refactor(data):重构股票价格信息获取功能

- 更新 SearchStockPriceInfo 函数签名,增加 stockName 参数
- 优化股票价格信息的爬取逻辑,支持不同市场类型的股票
- 调整输出格式,增加股票名称和时间信息
- 添加日志记录,方便调试和监控
This commit is contained in:
ArvinLovegood 2025-04-02 09:24:24 +08:00
parent 5de74f220f
commit fdaa80777d
4 changed files with 20 additions and 14 deletions

View File

@ -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 <- "***❗获取股票价格失败,分析结果可能不准确***<hr>"
@ -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() {

View File

@ -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:

View File

@ -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()}
}

View File

@ -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)
}