mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 13:59:39 +08:00
* 🎨 修改bilibili,bilibiliparse插件结构,添加bilibili动态直播专栏解析 * 💩 修改大小写 * 🎨 正则全局,错误处理 * 🎨 使用json.NewDecoder() * 💚 空使用 * 💚 修lint
129 lines
3.0 KiB
Go
129 lines
3.0 KiB
Go
package bilibili
|
||
|
||
import (
|
||
"encoding/json"
|
||
"errors"
|
||
"fmt"
|
||
"net/http"
|
||
"strconv"
|
||
|
||
"github.com/FloatTech/zbputils/binary"
|
||
"github.com/FloatTech/zbputils/web"
|
||
"github.com/tidwall/gjson"
|
||
)
|
||
|
||
var (
|
||
errNeedCookie = errors.New("该api需要设置b站cookie,请发送命令设置cookie,例如\"设置b站cookie SESSDATA=82da790d,1663822823,06ecf*31\"")
|
||
)
|
||
|
||
// searchUser 查找b站用户
|
||
func searchUser(keyword string) (r []searchResult, err error) {
|
||
data, err := web.GetData(fmt.Sprintf(searchUserURL, keyword))
|
||
if err != nil {
|
||
return
|
||
}
|
||
j := gjson.ParseBytes(data)
|
||
if j.Get("data.numResults").Int() == 0 {
|
||
err = errors.New("查无此人")
|
||
return
|
||
}
|
||
err = json.Unmarshal(binary.StringToBytes(j.Get("data.result").Raw), &r)
|
||
if err != nil {
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
// getVtbDetail 查找vtb信息
|
||
func getVtbDetail(uid string) (result vtbDetail, err error) {
|
||
data, err := web.GetData(fmt.Sprintf(vtbDetailURL, uid))
|
||
if err != nil {
|
||
return
|
||
}
|
||
if err = json.Unmarshal(data, &result); err != nil {
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
// getMemberCard 获取b站个人详情
|
||
func getMemberCard(uid interface{}) (result memberCard, err error) {
|
||
data, err := web.GetData(fmt.Sprintf(memberCardURL, uid))
|
||
if err != nil {
|
||
return
|
||
}
|
||
err = json.Unmarshal(binary.StringToBytes(gjson.ParseBytes(data).Get("card").Raw), &result)
|
||
if err != nil {
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
// getMedalwall 用b站uid获得牌子
|
||
func getMedalwall(uid string) (result []medal, err error) {
|
||
client := &http.Client{}
|
||
req, err := http.NewRequest("GET", fmt.Sprintf(medalwallURL, uid), nil)
|
||
if err != nil {
|
||
return
|
||
}
|
||
c := vdb.getBilibiliCookie()
|
||
req.Header.Add("cookie", c.Value)
|
||
res, err := client.Do(req)
|
||
if err != nil {
|
||
return
|
||
}
|
||
defer res.Body.Close()
|
||
var md medalData
|
||
err = json.NewDecoder(res.Body).Decode(&md)
|
||
if err != nil {
|
||
return
|
||
}
|
||
if md.Code == -101 {
|
||
err = errNeedCookie
|
||
return
|
||
}
|
||
if md.Code != 0 {
|
||
err = errors.New(md.Message)
|
||
}
|
||
result = md.Data.List
|
||
return
|
||
}
|
||
|
||
// getArticleInfo 用id查专栏信息
|
||
func getArticleInfo(id string) (card Card, err error) {
|
||
var data []byte
|
||
data, err = web.GetData(fmt.Sprintf(articleInfoURL, id))
|
||
if err != nil {
|
||
return
|
||
}
|
||
err = json.Unmarshal(binary.StringToBytes(gjson.ParseBytes(data).Get("data").Raw), &card)
|
||
return
|
||
}
|
||
|
||
// getLiveRoomInfo 用直播间id查直播间信息
|
||
func getLiveRoomInfo(roomID string) (card roomCard, err error) {
|
||
var data []byte
|
||
data, err = web.GetData(fmt.Sprintf(liveRoomInfoURL, roomID))
|
||
if err != nil {
|
||
return
|
||
}
|
||
err = json.Unmarshal(binary.StringToBytes(gjson.ParseBytes(data).Get("data").Raw), &card)
|
||
return
|
||
}
|
||
|
||
// getVideoInfo 用av或bv查视频信息
|
||
func getVideoInfo(id string) (card Card, err error) {
|
||
var data []byte
|
||
_, err = strconv.Atoi(id)
|
||
if err == nil {
|
||
data, err = web.GetData(fmt.Sprintf(videoInfoURL, id, ""))
|
||
} else {
|
||
data, err = web.GetData(fmt.Sprintf(videoInfoURL, "", id))
|
||
}
|
||
if err != nil {
|
||
return
|
||
}
|
||
err = json.Unmarshal(binary.StringToBytes(gjson.ParseBytes(data).Get("data").Raw), &card)
|
||
return
|
||
}
|