mirror of
https://github.com/ArvinLovegood/go-stock.git
synced 2025-07-19 00:00:09 +08:00
refactor(data):重构股票价格信息获取功能
- 更新 SearchStockPriceInfo 函数签名,增加 stockName 参数 - 优化股票价格信息的爬取逻辑,支持不同市场类型的股票 - 调整输出格式,增加股票名称和时间信息 - 添加日志记录,方便调试和监控
This commit is contained in:
parent
5de74f220f
commit
fdaa80777d
@ -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() {
|
||||
|
@ -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:
|
||||
|
@ -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()}
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user