diff --git a/app.go b/app.go index a0d7426..6ef6cd6 100644 --- a/app.go +++ b/app.go @@ -5,15 +5,18 @@ package main import ( "context" "fmt" + "github.com/PuerkitoBio/goquery" "github.com/coocood/freecache" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/mathutil" "github.com/duke-git/lancet/v2/slice" "github.com/getlantern/systray" + "github.com/go-resty/resty/v2" "github.com/wailsapp/wails/v2/pkg/runtime" "go-stock/backend/data" "go-stock/backend/db" "go-stock/backend/logger" + "strings" "time" ) @@ -56,6 +59,41 @@ func (a *App) domReady(ctx context.Context) { } } }() + + go func() { + ticker := time.NewTicker(time.Second * time.Duration(60)) + defer ticker.Stop() + for range ticker.C { + telegraph := refreshTelegraphList() + if telegraph != nil { + go runtime.EventsEmit(a.ctx, "telegraph", telegraph) + } + } + + }() + go runtime.EventsEmit(a.ctx, "telegraph", refreshTelegraphList()) +} + +func refreshTelegraphList() *[]string { + url := "https://www.cls.cn/telegraph" + response, err := resty.New().R(). + SetHeader("Referer", "https://www.cls.cn/"). + SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60"). + Get(fmt.Sprintf(url)) + if err != nil { + return &[]string{} + } + //logger.SugaredLogger.Info(string(response.Body())) + document, err := goquery.NewDocumentFromReader(strings.NewReader(string(response.Body()))) + if err != nil { + return &[]string{} + } + var telegraph []string + document.Find("div.telegraph-content-box").Each(func(i int, selection *goquery.Selection) { + //logger.SugaredLogger.Info(selection.Text()) + telegraph = append(telegraph, selection.Text()) + }) + return &telegraph } // isTradingDay 判断是否是交易日 diff --git a/backend/data/dingding_api_test.go b/backend/data/dingding_api_test.go index 72a0e4f..f3ceec8 100644 --- a/backend/data/dingding_api_test.go +++ b/backend/data/dingding_api_test.go @@ -11,6 +11,7 @@ import ( //----------------------------------------------------------------------------------- func TestRobot(t *testing.T) { + dingdingRobotUrl := "XXX" resp, err := resty.New().R(). SetHeader("Content-Type", "application/json"). SetBody(`{ @@ -23,7 +24,7 @@ func TestRobot(t *testing.T) { "isAtAll": true } }`). - Post(dingding_robot_url) + Post(dingdingRobotUrl) if err != nil { t.Error(err) } diff --git a/backend/data/stock_data_api_test.go b/backend/data/stock_data_api_test.go index eab9b90..46bf564 100644 --- a/backend/data/stock_data_api_test.go +++ b/backend/data/stock_data_api_test.go @@ -3,6 +3,7 @@ package data import ( "encoding/json" "fmt" + "github.com/PuerkitoBio/goquery" "github.com/duke-git/lancet/v2/convertor" "github.com/duke-git/lancet/v2/strutil" "github.com/go-resty/resty/v2" @@ -19,6 +20,26 @@ import ( // @Desc //----------------------------------------------------------------------------------- +func TestGetTelegraph(t *testing.T) { + url := "https://www.cls.cn/telegraph" + response, err := resty.New().R(). + SetHeader("Referer", "https://www.cls.cn/"). + SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60"). + Get(fmt.Sprintf(url)) + if err != nil { + return + } + logger.SugaredLogger.Info(string(response.Body())) + document, err := goquery.NewDocumentFromReader(strings.NewReader(string(response.Body()))) + if err != nil { + return + } + document.Find("div.telegraph-content-box").Each(func(i int, selection *goquery.Selection) { + logger.SugaredLogger.Info(selection.Text()) + }) + +} + func TestParseFullSingleStockData(t *testing.T) { resp, err := resty.New().R(). SetHeader("Host", "hq.sinajs.cn"). diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 35ec0bf..74cf760 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -15,14 +15,15 @@ import { SettingsOutline, ReorderTwoOutline, ExpandOutline, - RefreshOutline, PowerOutline, BarChartOutline, MoveOutline, WalletOutline, + RefreshOutline, PowerOutline, BarChartOutline, MoveOutline, WalletOutline, StarOutline, } from '@vicons/ionicons5' const content = ref('数据来源于网络,仅供参考\n投资有风险,入市需谨慎') const isFullscreen = ref(false) const activeKey = ref('stock') const containerRef= ref({}) -const realtimeProfit= ref("") +const realtimeProfit= ref(0) +const telegraph= ref([]) const menuOptions = ref([ { label: () => @@ -39,7 +40,7 @@ const menuOptions = ref([ { default: () => '我的自选',} ), key: 'stock', - icon: renderIcon(BarChartOutline), + icon: renderIcon(StarOutline), children:[ { label: ()=> h(NText, {type:realtimeProfit.value>0?'error':'success'},{ default: () => '当日盈亏 '+realtimeProfit.value+"¥"}), @@ -136,6 +137,9 @@ window.addEventListener('mousemove', dragstart) EventsOn("realtime_profit",(data)=>{ realtimeProfit.value=data }) +EventsOn("telegraph",(data)=>{ + telegraph.value=data +})