From dd3c2316370e9d320910a6682c777babbc092416 Mon Sep 17 00:00:00 2001 From: ArvinLovegood Date: Thu, 10 Jul 2025 16:29:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(data):=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=9B=BD=E5=86=85=E7=94=9F=E4=BA=A7=E6=80=BB=E5=80=BC(GDP)?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现了从东财数据中心获取GDP数据的功能 - 新增GDP数据结构用于解析获取的数据 - 添加了获取GDP数据的测试用例 --- backend/data/market_news_api.go | 31 ++++++++++++++++++++++++++++ backend/data/market_news_api_test.go | 4 ++++ backend/models/models.go | 13 ++++++++++++ 3 files changed, 48 insertions(+) diff --git a/backend/data/market_news_api.go b/backend/data/market_news_api.go index dc9d87a..4e80295 100644 --- a/backend/data/market_news_api.go +++ b/backend/data/market_news_api.go @@ -701,3 +701,34 @@ func (m MarketNewsApi) ClsCalendar() []any { err = json.Unmarshal(resp.Body(), &respMap) return respMap["data"].([]any) } + +func (m MarketNewsApi) GetGDP() { + 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"). + 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 + } + 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 + } + data, _ := val.Object().Value().Export() + logger.SugaredLogger.Infof("GDP:%v", data) + marshal, err := json.Marshal(data) + if err != nil { + return + } + logger.SugaredLogger.Infof("GDP:%s", marshal) +} diff --git a/backend/data/market_news_api_test.go b/backend/data/market_news_api_test.go index 3770b92..d16382b 100644 --- a/backend/data/market_news_api_test.go +++ b/backend/data/market_news_api_test.go @@ -175,3 +175,7 @@ func TestClsCalendar(t *testing.T) { } logger.SugaredLogger.Debugf("md:\n %s", md.String()) } + +func TestGetGDP(t *testing.T) { + NewMarketNewsApi().GetGDP() +} diff --git a/backend/models/models.go b/backend/models/models.go index b11e276..b2ef9ea 100644 --- a/backend/models/models.go +++ b/backend/models/models.go @@ -370,3 +370,16 @@ type HotEvent struct { StatusCount int `json:"status_count"` Content string `json:"content"` } + +type GDP struct { + REPORTDATE string `json:"REPORT_DATE" md:"报告时间"` + TIME string `json:"TIME" md:"报告期"` + DOMESTICLPRODUCTBASE float64 `json:"DOMESTICL_PRODUCT_BASE" md:"国内生产总值(亿元)"` + SUMSAME float64 `json:"SUM_SAME" md:"国内生产总值同比增长(%)"` + FIRSTPRODUCTBASE float64 `json:"FIRST_PRODUCT_BASE" md:"第一产业(亿元)"` + FIRSTSAME int `json:"FIRST_SAME" md:"第一产业同比增长(%)"` + SECONDPRODUCTBASE float64 `json:"SECOND_PRODUCT_BASE" md:"第二产业(亿元)"` + SECONDSAME float64 `json:"SECOND_SAME" md:"第二产业同比增长(%)"` + THIRDPRODUCTBASE float64 `json:"THIRD_PRODUCT_BASE" md:"第三产业(亿元)"` + THIRDSAME float64 `json:"THIRD_SAME" md:"第三产业同比增长(%)"` +}