From 47064dbcecf851f3be0d6f8eb0935b31f5872f41 Mon Sep 17 00:00:00 2001 From: himawari <54976075+guohuiyuan@users.noreply.github.com> Date: Sun, 30 Jan 2022 19:04:00 +0800 Subject: [PATCH] =?UTF-8?q?b=E7=AB=99=E8=A7=86=E9=A2=91=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=20(#113)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat:b站视频链接解析 * fix:修lint * fix:block改为true * fix:不加视频链接,以免两个机器人在同一个群疯狂触发 * fix:链接换成bv号 * fix:修改为send方法 Co-authored-by: Guohuiyuan --- README.md | 2 + main.go | 3 +- order/prio.go | 1 + plugin_bilibili_parse/bilibili_parse.go | 64 +++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 plugin_bilibili_parse/bilibili_parse.go diff --git a/README.md b/README.md index 9f1b6e49..af6966ef 100644 --- a/README.md +++ b/README.md @@ -260,6 +260,8 @@ zerobot [-h] [-t token] [-u url] [-n nickname] [-p prefix] [-d|w] [-g 监听地 - [x] 推送列表 - **网易云音乐热评** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_wangyiyun"` - [x] 来份网易云热评 +- **b站视频链接解析** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili_parse"` + - [x] https://www.bilibili.com/video/BV1xx411c7BF | https://www.bilibili.com/video/av1605 | https://b23.tv/I8uzWCA - **TODO...** ## 使用方法 diff --git a/main.go b/main.go index f3894fa0..60886ee5 100644 --- a/main.go +++ b/main.go @@ -52,7 +52,8 @@ import ( _ "github.com/FloatTech/ZeroBot-Plugin/plugin_wangyiyun" // 网易云音乐热评 // b站相关 - _ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili" // 查询b站用户信息 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili" // 查询b站用户信息 + _ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili_parse" // b站视频链接解析 // _ "github.com/FloatTech/ZeroBot-Plugin/plugin_bilibili_push" // b站推送 _ "github.com/FloatTech/ZeroBot-Plugin/plugin_diana" // 嘉心糖发病 diff --git a/order/prio.go b/order/prio.go index f592d6b8..c7aeed1d 100644 --- a/order/prio.go +++ b/order/prio.go @@ -12,6 +12,7 @@ const ( PrioAIWife PrioBase14 PrioBilibili + PrioBiliBiliParse PrioBilibiliPush PrioBookReview PrioCangTouShi diff --git a/plugin_bilibili_parse/bilibili_parse.go b/plugin_bilibili_parse/bilibili_parse.go new file mode 100644 index 00000000..ef6c53ba --- /dev/null +++ b/plugin_bilibili_parse/bilibili_parse.go @@ -0,0 +1,64 @@ +// Package bilibiliparse b站视频链接解析 +package bilibiliparse + +import ( + "github.com/FloatTech/ZeroBot-Plugin/order" + "github.com/FloatTech/zbputils/control" + "github.com/antchfx/htmlquery" + log "github.com/sirupsen/logrus" + zero "github.com/wdvxdr1123/ZeroBot" + "github.com/wdvxdr1123/ZeroBot/message" + "regexp" + "strings" +) + +var ( + 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]+" + validRe = "https://www.bilibili.com/video/(BV[0-9a-zA-Z]+)" +) + +func init() { + engine := control.Register("bilibiliparse", order.PrioBiliBiliParse, &control.Options{ + DisableOnDefault: false, + Help: "b站视频链接解析\n" + + "- https://www.bilibili.com/video/BV1xx411c7BF | https://www.bilibili.com/video/av1605 | https://b23.tv/I8uzWCA", + }) + + engine.OnRegex(bilibiliRe).SetBlock(true).Handle(func(ctx *zero.Ctx) { + bilibiliURL := ctx.State["regex_matched"].([]string)[0] + m := parseURL(bilibiliURL) + if len(m) != 0 { + ctx.Send(m) + } + }) +} + +func parseURL(bilibiliURL string) (m message.Message) { + doc, err := htmlquery.LoadURL(bilibiliURL) + if err != nil { + log.Errorln("[bilibiliparse]:访问的链接为", bilibiliURL, ",错误为", err) + } + videoURL := htmlquery.FindOne(doc, "/html/head/meta[@itemprop='url']").Attr[2].Val + re := regexp.MustCompile(validRe) + if !re.MatchString(videoURL) { + return + } + bv := re.FindStringSubmatch(videoURL)[1] + title := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/h1/span/text()").Data + m = append(m, message.Text(title+"\n")) + view := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/div/span[@class='view']/text()").Data + dm := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/div/span[@class='dm']/text()").Data + m = append(m, message.Text(view+dm+"\n")) + t := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/div/span[3]/text()").Data + m = append(m, message.Text(t)) + image := htmlquery.FindOne(doc, "/html/head/meta[@itemprop='image']").Attr[2].Val + m = append(m, message.Image(image)) + like := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='like']/text()").Data + coin := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='coin']/text()").Data + m = append(m, message.Text("点赞:", strings.TrimSpace(like)+"投币:", strings.TrimSpace(coin)+"\n")) + collect := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='collect']/text()").Data + share := htmlquery.FindOne(doc, "//*[@id='arc_toolbar_report']/div[1]/span[@class='share']/text()").Data + m = append(m, message.Text("收藏:", strings.TrimSpace(collect)+"分享:", strings.TrimSpace(share)+"\n")) + m = append(m, message.Text(bv)) + return +}