diff --git a/backend/data/market_news_api.go b/backend/data/market_news_api.go index 4e80295..94cd00a 100644 --- a/backend/data/market_news_api.go +++ b/backend/data/market_news_api.go @@ -702,7 +702,9 @@ func (m MarketNewsApi) ClsCalendar() []any { return respMap["data"].([]any) } -func (m MarketNewsApi) GetGDP() { +func (m MarketNewsApi) GetGDP() *models.GDPResp { + res := &models.GDPResp{} + url := "https://datacenter-web.eastmoney.com/api/data/v1/get?callback=data&columns=REPORT_DATE%2CTIME%2CDOMESTICL_PRODUCT_BASE%2CFIRST_PRODUCT_BASE%2CSECOND_PRODUCT_BASE%2CTHIRD_PRODUCT_BASE%2CSUM_SAME%2CFIRST_SAME%2CSECOND_SAME%2CTHIRD_SAME&pageNumber=1&pageSize=20&sortColumns=REPORT_DATE&sortTypes=-1&source=WEB&client=WEB&reportName=RPT_ECONOMY_GDP&p=1&pageNo=1&pageNum=1&_=" + strconv.FormatInt(time.Now().Unix(), 10) resp, err := resty.New().SetTimeout(time.Duration(30)*time.Second).R(). SetHeader("Host", "datacenter-web.eastmoney.com"). @@ -712,7 +714,7 @@ func (m MarketNewsApi) GetGDP() { Get(url) if err != nil { logger.SugaredLogger.Errorf("GDP err:%s", err.Error()) - return + return res } body := resp.Body() logger.SugaredLogger.Debugf("GDP:%s", body) @@ -722,13 +724,50 @@ func (m MarketNewsApi) GetGDP() { val, err := vm.Run(body) if err != nil { logger.SugaredLogger.Errorf("GDP err:%s", err.Error()) - return + return res } data, _ := val.Object().Value().Export() logger.SugaredLogger.Infof("GDP:%v", data) marshal, err := json.Marshal(data) if err != nil { - return + return res } - logger.SugaredLogger.Infof("GDP:%s", marshal) + json.Unmarshal(marshal, &res) + logger.SugaredLogger.Infof("GDP:%+v", res) + return res +} + +func (m MarketNewsApi) GetCPI() *models.CPIResp { + res := &models.CPIResp{} + + url := "https://datacenter-web.eastmoney.com/api/data/v1/get?callback=data&columns=REPORT_DATE%2CTIME%2CNATIONAL_SAME%2CNATIONAL_BASE%2CNATIONAL_SEQUENTIAL%2CNATIONAL_ACCUMULATE%2CCITY_SAME%2CCITY_BASE%2CCITY_SEQUENTIAL%2CCITY_ACCUMULATE%2CRURAL_SAME%2CRURAL_BASE%2CRURAL_SEQUENTIAL%2CRURAL_ACCUMULATE&pageNumber=1&pageSize=20&sortColumns=REPORT_DATE&sortTypes=-1&source=WEB&client=WEB&reportName=RPT_ECONOMY_CPI&p=1&pageNo=1&pageNum=1&_=" + strconv.FormatInt(time.Now().Unix(), 10) + resp, err := resty.New().SetTimeout(time.Duration(30)*time.Second).R(). + SetHeader("Host", "datacenter-web.eastmoney.com"). + SetHeader("Origin", "https://datacenter.eastmoney.com"). + SetHeader("Referer", "https://data.eastmoney.com/cjsj/gdp.html"). + SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0"). + Get(url) + if err != nil { + logger.SugaredLogger.Errorf("GDP err:%s", err.Error()) + return res + } + body := resp.Body() + logger.SugaredLogger.Debugf("GDP:%s", body) + vm := otto.New() + vm.Run("function data(res){return res};") + + val, err := vm.Run(body) + if err != nil { + logger.SugaredLogger.Errorf("GDP err:%s", err.Error()) + return res + } + data, _ := val.Object().Value().Export() + logger.SugaredLogger.Infof("GDP:%v", data) + marshal, err := json.Marshal(data) + if err != nil { + return res + } + json.Unmarshal(marshal, &res) + logger.SugaredLogger.Infof("GDP:%+v", res) + return res } diff --git a/backend/data/market_news_api_test.go b/backend/data/market_news_api_test.go index d16382b..d3219c4 100644 --- a/backend/data/market_news_api_test.go +++ b/backend/data/market_news_api_test.go @@ -6,6 +6,7 @@ import ( "github.com/tidwall/gjson" "go-stock/backend/db" "go-stock/backend/logger" + "go-stock/backend/util" "strings" "testing" ) @@ -177,5 +178,12 @@ func TestClsCalendar(t *testing.T) { } func TestGetGDP(t *testing.T) { - NewMarketNewsApi().GetGDP() + res := NewMarketNewsApi().GetGDP() + md := util.MarkdownTable(res.GDPResult.Data) + logger.SugaredLogger.Debugf("国内生产总值(GDP):\n %s", md) +} +func TestGetCPI(t *testing.T) { + res := NewMarketNewsApi().GetCPI() + md := util.MarkdownTable(res.CPIResult.Data) + logger.SugaredLogger.Debugf("居民消费价格指数(CPI) :\n %s", md) } diff --git a/backend/models/models.go b/backend/models/models.go index b2ef9ea..af0ac5d 100644 --- a/backend/models/models.go +++ b/backend/models/models.go @@ -383,3 +383,47 @@ type GDP struct { THIRDPRODUCTBASE float64 `json:"THIRD_PRODUCT_BASE" md:"第三产业(亿元)"` THIRDSAME float64 `json:"THIRD_SAME" md:"第三产业同比增长(%)"` } +type CPI struct { + REPORTDATE string `json:"REPORT_DATE" md:"报告时间"` + TIME string `json:"TIME" md:"报告期"` + NATIONALBASE float64 `json:"NATIONAL_BASE" md:"全国当月"` + NATIONALSAME float64 `json:"NATIONAL_SAME" md:"全国当月同比增长"` + NATIONALSEQUENTIAL float64 `json:"NATIONAL_SEQUENTIAL" md:"全国当月环比增长"` + NATIONALACCUMULATE float64 `json:"NATIONAL_ACCUMULATE" md:"全国当月累计"` + CITYBASE float64 `json:"CITY_BASE" md:"城市当月"` + CITYSAME float64 `json:"CITY_SAME" md:"城市当月同比增长"` + CITYSEQUENTIAL float64 `json:"CITY_SEQUENTIAL" md:"城市当月环比增长"` + CITYACCUMULATE int `json:"CITY_ACCUMULATE" md:"城市当月累计"` + RURALBASE float64 `json:"RURAL_BASE" md:"农村当月"` + RURALSAME float64 `json:"RURAL_SAME" md:"农村当月同比增长"` + RURALSEQUENTIAL int `json:"RURAL_SEQUENTIAL" md:"农村当月环比增长"` + RURALACCUMULATE float64 `json:"RURAL_ACCUMULATE" md:"农村当月累计"` +} + +type DCResp struct { + Version string `json:"version"` + Success bool `json:"success"` + Message string `json:"message"` + Code int `json:"code"` +} + +type GDPResult struct { + Pages int `json:"pages"` + Data []GDP `json:"data"` + Count int `json:"count"` +} +type CPIResult struct { + Pages int `json:"pages"` + Data []CPI `json:"data"` + Count int `json:"count"` +} + +type GDPResp struct { + DCResp + GDPResult GDPResult `json:"result"` +} + +type CPIResp struct { + DCResp + CPIResult CPIResult `json:"result"` +}