geekai/api/service/function/weibo_hot.go
2023-07-15 21:52:30 +08:00

57 lines
1.2 KiB
Go

package function
import (
"chatplus/utils"
"fmt"
"strings"
)
// 微博热搜函数实现
type FuncWeiboHot struct {
name string
apiURL string
token string
}
func NewWeiboHot(token string) FuncWeiboHot {
return FuncWeiboHot{name: "微博热搜", apiURL: "https://v2.alapi.cn/api/new/wbtop", token: token}
}
type WeiBoVo struct {
resVo
Data []struct {
HotWord string `json:"hot_word"`
HotWordNum int `json:"hot_word_num"`
Url string `json:"url"`
} `json:"data"`
}
func (f FuncWeiboHot) Invoke(...interface{}) (string, error) {
url := fmt.Sprintf("%s?num=10&token=%s", f.apiURL, f.token)
bytes, err := utils.HttpGet(url, "")
if err != nil {
return "", err
}
var res WeiBoVo
err = utils.JsonDecode(string(bytes), &res)
if err != nil {
return "", err
}
if res.Code != 200 {
return "", fmt.Errorf("call api fail: %s", res.Msg)
}
builder := make([]string, 0)
builder = append(builder, "**新浪微博今日热搜:**")
for i, v := range res.Data {
builder = append(builder, fmt.Sprintf("%d、 [%s](%s) [热度:%d]", i+1, v.HotWord, v.Url, v.HotWordNum))
}
return strings.Join(builder, "\n\n"), nil
}
func (f FuncWeiboHot) Name() string {
return f.name
}