Skip to content

Commit 47064db

Browse files
guohuiyuanGuohuiyuan
andauthored
b站视频链接解析 (#113)
* feat:b站视频链接解析 * fix:修lint * fix:block改为true * fix:不加视频链接,以免两个机器人在同一个群疯狂触发 * fix:链接换成bv号 * fix:修改为send方法 Co-authored-by: Guohuiyuan <haibaraguo@yeahka.com>
1 parent 2cda7ec commit 47064db

4 files changed

Lines changed: 69 additions & 1 deletion

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,8 @@ zerobot [-h] [-t token] [-u url] [-n nickname] [-p prefix] [-d|w] [-g 监听地
260260
- [x] 推送列表
261261
- **网易云音乐热评** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_wangyiyun"`
262262
- [x] 来份网易云热评
263+
- **b站视频链接解析** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili_parse"`
264+
- [x] https://www.bilibili.com/video/BV1xx411c7BF | https://www.bilibili.com/video/av1605 | https://b23.tv/I8uzWCA
263265
- **TODO...**
264266

265267
## 使用方法

main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ import (
5252
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_wangyiyun" // 网易云音乐热评
5353

5454
// b站相关
55-
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili" // 查询b站用户信息
55+
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili" // 查询b站用户信息
56+
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili_parse" // b站视频链接解析
5657
// _ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili_push" // b站推送
5758
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_diana" // 嘉心糖发病
5859

order/prio.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const (
1212
PrioAIWife
1313
PrioBase14
1414
PrioBilibili
15+
PrioBiliBiliParse
1516
PrioBilibiliPush
1617
PrioBookReview
1718
PrioCangTouShi
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// Package bilibiliparse b站视频链接解析
2+
package bilibiliparse
3+
4+
import (
5+
"github.com/FloatTech/ZeroBot-Plugin/order"
6+
"github.com/FloatTech/zbputils/control"
7+
"github.com/antchfx/htmlquery"
8+
log "github.com/sirupsen/logrus"
9+
zero "github.com/wdvxdr1123/ZeroBot"
10+
"github.com/wdvxdr1123/ZeroBot/message"
11+
"regexp"
12+
"strings"
13+
)
14+
15+
var (
16+
bilibiliRe = "https://www.bilibili.com/video/av[0-9]+|https://www.bilibili.com/video/BV[0-9a-zA-Z]+|https://b23.tv/[0-9a-zA-Z]+"
17+
validRe = "https://www.bilibili.com/video/(BV[0-9a-zA-Z]+)"
18+
)
19+
20+
func init() {
21+
engine := control.Register("bilibiliparse", order.PrioBiliBiliParse, &control.Options{
22+
DisableOnDefault: false,
23+
Help: "b站视频链接解析\n" +
24+
"- https://www.bilibili.com/video/BV1xx411c7BF | https://www.bilibili.com/video/av1605 | https://b23.tv/I8uzWCA",
25+
})
26+
27+
engine.OnRegex(bilibiliRe).SetBlock(true).Handle(func(ctx *zero.Ctx) {
28+
bilibiliURL := ctx.State["regex_matched"].([]string)[0]
29+
m := parseURL(bilibiliURL)
30+
if len(m) != 0 {
31+
ctx.Send(m)
32+
}
33+
})
34+
}
35+
36+
func parseURL(bilibiliURL string) (m message.Message) {
37+
doc, err := htmlquery.LoadURL(bilibiliURL)
38+
if err != nil {
39+
log.Errorln("[bilibiliparse]:访问的链接为", bilibiliURL, ",错误为", err)
40+
}
41+
videoURL := htmlquery.FindOne(doc, "/html/head/meta[@itemprop='url']").Attr[2].Val
42+
re := regexp.MustCompile(validRe)
43+
if !re.MatchString(videoURL) {
44+
return
45+
}
46+
bv := re.FindStringSubmatch(videoURL)[1]
47+
title := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/h1/span/text()").Data
48+
m = append(m, message.Text(title+"\n"))
49+
view := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/div/span[@class='view']/text()").Data
50+
dm := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/div/span[@class='dm']/text()").Data
51+
m = append(m, message.Text(view+dm+"\n"))
52+
t := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/div/span[3]/text()").Data
53+
m = append(m, message.Text(t))
54+
image := htmlquery.FindOne(doc, "/html/head/meta[@itemprop='image']").Attr[2].Val
55+
m = append(m, message.Image(image))
56+
like := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='like']/text()").Data
57+
coin := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='coin']/text()").Data
58+
m = append(m, message.Text("点赞:", strings.TrimSpace(like)+"投币:", strings.TrimSpace(coin)+"\n"))
59+
collect := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='collect']/text()").Data
60+
share := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='share']/text()").Data
61+
m = append(m, message.Text("收藏:", strings.TrimSpace(collect)+"分享:", strings.TrimSpace(share)+"\n"))
62+
m = append(m, message.Text(bv))
63+
return
64+
}

0 commit comments

Comments
 (0)