吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3968|回复: 10
收起左侧

[其他原创] 【原创源码】【Go】Go语言蚂蚁基金查询

  [复制链接]
熊猫拍板砖 发表于 2020-11-30 14:17
本帖最后由 熊猫拍板砖 于 2020-11-30 14:19 编辑

看到有小伙伴是在支付宝买的基金,然后在天天基金上看,这个数据可能对不上,所以搞了一个和支付宝用同一接口的蚂蚁基金
conf.txt是存放基金代码的
项目结构
image.png
运行截图
image.png
package main

import (
        "AntFund/easyjson"
        "AntFund/fetcher"
        "bufio"
        "bytes"
        "encoding/json"
        "fmt"
        "net/http/cookiejar"
        "os"
        "regexp"
        "strconv"
        "time"
)

var jsonRe = regexp.MustCompile(`{(.*?)};`)

type InitInfo struct {
        Fundname         string // 基金名称
        Csrf             string // csrftoken
        ProudctId        string // 产品ID
        NetValue         string // 净值
        NetValueDate     string // 净值日期
        DayOfGrowth      string // 前一日涨幅
        ForecastNetValue string // 估算净值
        ForecastGrowth   string // 估算涨幅
}

func main() {
        fmt.Println("基金名称 | 基金代码 | 单位净值 | 日涨幅 | 单位净值日期 | 估算净值 | 估算涨幅")
        fileName := "./conf/conf.txt"
        file, err := os.Open(fileName)
        if err != nil {
                fmt.Println(err)
        }
        defer file.Close()
        scanner := bufio.NewScanner(file)
        for scanner.Scan() {
                code := scanner.Text()
                fetcher.Cookie = nil
                fetcher.Cookiejar, _ = cookiejar.New(nil)
                var info InitInfo
                info = Init(code)

                info, err := DatePost(info)
                if err != nil {
                        fmt.Println(err)
                }
                dayOfGrowth := floatToStr(info.DayOfGrowth, 2, "") + "%"
                forecastNetValue := floatToStr(info.ForecastNetValue, 4, "")
                forecastGrowth := floatToStr(info.ForecastGrowth, 2, "a") + "%"
                fmt.Printf("%s | %s | %s | %s | %s | %s | %s\n", info.Fundname, code, info.NetValue, dayOfGrowth, info.NetValueDate, forecastNetValue, forecastGrowth)

        }

        fmt.Scanf("%s")

}

func Init(code string) InitInfo {
        url := "http://www.fund123.cn/matiaria?fundCode=" + code
        bytedata, err := fetcher.Fetch(url, "GET", nil)
        if err != nil {
                fmt.Println(err)
        }
        //fmt.Println(string(bytedata))
        //metches:=jsonRe.FindAll(bytedata,-1)
        //fmt.Println(string(metches[0][25:len(metches[0])-10]))
        metches := jsonRe.FindAllString(string(bytedata), 1)
        //fmt.Println()
        var datas easyjson.JsonInfo
        json.Unmarshal([]byte(metches[0][:len(metches[0])-1]), &datas)
        //fmt.Println(datas)
        info := InitInfo{}
        info.Fundname = datas.MaterialInfo.FundBrief.FundNameAbbr
        info.Csrf = datas.Csrf
        info.ProudctId = datas.MaterialInfo.ProductID
        info.NetValue = datas.MaterialInfo.TitleInfo.NetValue
        info.NetValueDate = datas.MaterialInfo.TitleInfo.NetValueDate
        info.DayOfGrowth = datas.MaterialInfo.TitleInfo.DayOfGrowth

        return info
}

func DatePost(info InitInfo) (InitInfo, error) {

        //fmt.Println(info)
        url := "http://www.fund123.cn/api/fund/queryFundEstimateIntraday?_csrf=" + info.Csrf
        data := make(map[string]interface{})
        now := time.Now()
        startTime := now.Format("2006-01-02")
        endtTime := now.AddDate(0, 0, 1).Format("2006-01-02")
        data["startTime"] = startTime
        data["endTime"] = endtTime
        data["limit"] = 200
        data["productId"] = info.ProudctId
        data["format"] = "true"
        data["source"] = "WEALTHBFFWEB"
        //fmt.Println(data)
        datas, _ := json.Marshal(data)
        //fmt.Println(string(datas))
        byte_data, err := fetcher.Fetch(url, "POST", bytes.NewBuffer(datas))
        if err != nil {
                fmt.Println(err)
                return InitInfo{}, err
        }
        //fmt.Println(string(byte_data))
        var result easyjson.Datas
        err = json.Unmarshal(byte_data, &result)
        if err != nil {
                fmt.Println(err)
                return InitInfo{}, err
        }
        //fmt.Println("开始显示当前基金图")
        value := result.List[len(result.List)-1]
        info.ForecastGrowth = value.ForecastGrowth
        info.ForecastNetValue = value.ForecastNetValue
        //for _,v:=range result.List{
        //        fmt.Println(v.BizSeq,v.Time,v.ForecastNetValue,v.ForecastGrowth)
        //}
        //fmt.Println(value)
        return info, nil

}

// float字符串转换成你想要的float字符串
func floatToStr(str string, prec int, zhuangtai string) string {
        strToflost, _ := strconv.ParseFloat(str, 64)
        if zhuangtai != "" {
                strToflost = strToflost * 100
        }
        floststr := strconv.FormatFloat(strToflost, 'f', prec, 64)
        return floststr
}
package fetcher

import (
        "fmt"
        "io"
        "io/ioutil"
        "net/http"
        cookiejar2 "net/http/cookiejar"
        "strings"
)

var Cookie []*http.Cookie
var Cookiejar *cookiejar2.Jar

// Fetch:统一请求,POST,GET
func Fetch(url, method string, body io.Reader) ([]byte, error) {
        client := &http.Client{
                CheckRedirect: nil,
                Jar:           Cookiejar,
        }
        req, err := http.NewRequest(strings.ToUpper(method), url, body)
        if err != nil {
                fmt.Println(err)
                return nil, err
        }
        req.Header.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)")
        req.Header.Add("Content-Type", "application/json")
        response, err := client.Do(req)
        if err != nil {
                //fmt.Println(err)
                return nil, err
        }
        defer response.Body.Close()
        Cookie = Cookiejar.Cookies(req.URL)
        //fmt.Println(Cookie)
        bytedata, err := ioutil.ReadAll(response.Body)
        if err != nil {
                //fmt.Println(err)
                return nil, err
        }
        //fmt.Println(string(bytedata))
        return bytedata, nil
}

https://github.com/yzhack/AntFund
欢迎小伙伴们给个star

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
hahaxi + 1 + 1 谢谢@Thanks!
Dom-Lewis + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaoan87 发表于 2020-11-30 14:48
一年半 不能动 - -   我都不看
kiopc 发表于 2020-11-30 15:08
cc660292 发表于 2021-1-20 23:09
Ess3nce 发表于 2021-1-20 23:31
我来试试
C.Tristan 发表于 2021-1-21 21:22
我还准备用天天的数据  现在才知道蚂蚁的API
cuxuan 发表于 2021-11-10 15:11
本帖最后由 cuxuan 于 2021-11-10 15:18 编辑

楼主这个代码看着不是 蚂蚁的API? 还是天天基金的API? 只是查了固定基金代码?
 楼主| 熊猫拍板砖 发表于 2021-11-11 15:20
cuxuan 发表于 2021-11-10 15:11
楼主这个代码看着不是 蚂蚁的API? 还是天天基金的API? 只是查了固定基金代码?

conf.txt里面是基金代码,因为蚂蚁没有提供 API,所以你懂得,这个确定是蚂蚁基金的
cuxuan 发表于 2021-11-11 15:56
熊猫拍板砖 发表于 2021-11-11 15:20
conf.txt里面是基金代码,因为蚂蚁没有提供 API,所以你懂得,这个确定是蚂蚁基金的

嗯是的 昨天看错了,以为是天天基金的123456了 (๑•̀ㅂ•́)و✧棒
梦毁他城 发表于 2022-2-24 01:21
这个 请求净值接口的返回是个html,java怎么解析出里面的json
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表