From fdaa80777d02a0808f34949e77a52aff894992c6 Mon Sep 17 00:00:00 2001 From: ArvinLovegood Date: Wed, 2 Apr 2025 09:24:24 +0800 Subject: [PATCH] =?UTF-8?q?refactor(data):=E9=87=8D=E6=9E=84=E8=82=A1?= =?UTF-8?q?=E7=A5=A8=E4=BB=B7=E6=A0=BC=E4=BF=A1=E6=81=AF=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新 SearchStockPriceInfo 函数签名,增加 stockName 参数 - 优化股票价格信息的爬取逻辑,支持不同市场类型的股票 - 调整输出格式,增加股票名称和时间信息 - 添加日志记录,方便调试和监控 --- backend/data/openai_api.go | 4 +++- backend/data/openai_api_test.go | 2 +- backend/data/stock_data_api.go | 16 ++++++++++------ backend/data/stock_data_api_test.go | 12 ++++++------ 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/backend/data/openai_api.go b/backend/data/openai_api.go index d6d3be8..36b8036 100644 --- a/backend/data/openai_api.go +++ b/backend/data/openai_api.go @@ -199,7 +199,7 @@ func (o OpenAi) NewChatStream(stock, stockCode, userQuestion string, sysPromptId go func() { defer wg.Done() - messages := SearchStockPriceInfo(stockCode, o.CrawlTimeOut) + messages := SearchStockPriceInfo(stock, stockCode, o.CrawlTimeOut) if messages == nil || len(*messages) == 0 { logger.SugaredLogger.Error("获取股票价格失败") //ch <- "***❗获取股票价格失败,分析结果可能不准确***
" @@ -223,6 +223,8 @@ func (o OpenAi) NewChatStream(stock, stockCode, userQuestion string, sysPromptId "role": "assistant", "content": "\n## " + stock + "股价数据:\n" + price, }) + logger.SugaredLogger.Infof("SearchStockPriceInfo stock:%s stockCode:%s", stock, stockCode) + logger.SugaredLogger.Infof("SearchStockPriceInfo assistant:%s", "\n## "+stock+"股价数据:\n"+price) }() go func() { diff --git a/backend/data/openai_api_test.go b/backend/data/openai_api_test.go index 6707aa7..ab2806a 100644 --- a/backend/data/openai_api_test.go +++ b/backend/data/openai_api_test.go @@ -9,7 +9,7 @@ import ( func TestNewDeepSeekOpenAiConfig(t *testing.T) { db.Init("../../data/stock.db") ai := NewDeepSeekOpenAi(context.TODO()) - res := ai.NewChatStream("上海贝岭", "sh600171", "上海贝岭分析和总结", nil) + res := ai.NewChatStream("中信证券", "hk06030", "中信证券分析和总结", nil) for { select { case msg := <-res: diff --git a/backend/data/stock_data_api.go b/backend/data/stock_data_api.go index f033fe9..c983061 100644 --- a/backend/data/stock_data_api.go +++ b/backend/data/stock_data_api.go @@ -768,7 +768,7 @@ func GetRealTimeStockPriceInfo(ctx context.Context, stockCode string) (price, pr return price, priceTime } -func SearchStockPriceInfo(stockCode string, crawlTimeOut int64) *[]string { +func SearchStockPriceInfo(stockName, stockCode string, crawlTimeOut int64) *[]string { if strutil.HasPrefixAny(stockCode, []string{"SZ", "SH", "sh", "sz", "bj"}) { //if strutil.HasPrefixAny(stockCode, []string{"bj", "BJ"}) { @@ -778,7 +778,7 @@ func SearchStockPriceInfo(stockCode string, crawlTimeOut int64) *[]string { // }) + ".BJ" //} - return getSHSZStockPriceInfo(stockCode, crawlTimeOut) + return getSHSZStockPriceInfo(stockName, stockCode, crawlTimeOut) } if strutil.HasPrefixAny(stockCode, []string{"HK", "hk"}) { return getHKStockPriceInfo(stockCode, crawlTimeOut) @@ -838,6 +838,7 @@ func getUSStockPriceInfo(stockCode string, crawlTimeOut int64) *[]string { messages = append(messages, text) }) + logger.SugaredLogger.Infof("messages: %s", messages) return &messages } @@ -855,10 +856,12 @@ func getHKStockPriceInfo(stockCode string, crawlTimeOut int64) *[]string { crawlerAPI = crawlerAPI.NewCrawler(ctx, crawlerBaseInfo) url := fmt.Sprintf("https://stock.finance.sina.com.cn/hkstock/quotes/%s.html", strings.ReplaceAll(stockCode, "hk", "")) - htmlContent, ok := crawlerAPI.GetHtml(url, ".deta_hqContainer >.deta03 ", true) + logger.SugaredLogger.Infof("CrawlHKStockPriceInfo url:%s", url) + htmlContent, ok := crawlerAPI.GetHtml(url, "div.deta_hqContainer >.deta03>ul ", false) if !ok { return &[]string{} } + //logger.SugaredLogger.Infof("CrawlHKStockPriceInfo htmlContent:%s", htmlContent) document, err := goquery.NewDocumentFromReader(strings.NewReader(htmlContent)) if err != nil { logger.SugaredLogger.Error(err.Error()) @@ -890,6 +893,7 @@ func getHKStockPriceInfo(stockCode string, crawlTimeOut int64) *[]string { messages = append(messages, text) }) + logger.SugaredLogger.Infof("messages: %s", messages) return &messages } @@ -919,12 +923,12 @@ func getZSInfo(name, stockCode string, crawlTimeOut int64) string { hqTime := strutil.RemoveWhiteSpace(document.Find("div#hqTime").First().Text(), false) var markdown strings.Builder - markdown.WriteString(fmt.Sprintf("### %s:%s 时间:%s\n", name, price, hqTime)) + markdown.WriteString(fmt.Sprintf("### 时间:%s %s:%s \n", hqTime, name, price)) GetTableMarkdown(document, "div#hqDetails table", &markdown) return markdown.String() } -func getSHSZStockPriceInfo(stockCode string, crawlTimeOut int64) *[]string { +func getSHSZStockPriceInfo(stockName, stockCode string, crawlTimeOut int64) *[]string { url := "https://finance.sina.com.cn/realstock/company/" + stockCode + "/nc.shtml" crawlerAPI := CrawlerApi{} crawlerBaseInfo := CrawlerBaseInfo{ @@ -950,7 +954,7 @@ func getSHSZStockPriceInfo(stockCode string, crawlTimeOut int64) *[]string { hqTime := strutil.RemoveWhiteSpace(document.Find("div#hqTime").First().Text(), false) var markdown strings.Builder - markdown.WriteString(fmt.Sprintf("### 当前股价:%s 时间:%s\n", price, hqTime)) + markdown.WriteString(fmt.Sprintf("### %s现价:%s 现价时间:%s\n", stockName, price, hqTime)) GetTableMarkdown(document, "div#hqDetails table", &markdown) return &[]string{markdown.String()} } diff --git a/backend/data/stock_data_api_test.go b/backend/data/stock_data_api_test.go index 1c55f84..61bb01e 100644 --- a/backend/data/stock_data_api_test.go +++ b/backend/data/stock_data_api_test.go @@ -47,13 +47,13 @@ func TestSearchStockInfoByCode(t *testing.T) { func TestSearchStockPriceInfo(t *testing.T) { db.Init("../../data/stock.db") - //SearchStockPriceInfo("hk06030", 30) - //SearchStockPriceInfo("sh600171", 30) - //SearchStockPriceInfo("gb_aapl", 30) - //SearchStockPriceInfo("bj430198", 30) + //SearchStockPriceInfo("中信证券", "hk06030", 30) + //SearchStockPriceInfo("上海贝岭", "sh600171", 30) + SearchStockPriceInfo("苹果公司", "gb_aapl", 30) + //SearchStockPriceInfo("微创光电", "bj430198", 30) getZSInfo("创业板指数", "sz399006", 30) - getZSInfo("上证综合指数", "sh000001", 30) - getZSInfo("沪深300指数", "sh000300", 30) + //getZSInfo("上证综合指数", "sh000001", 30) + //getZSInfo("沪深300指数", "sh000300", 30) }