mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 22:00:11 +08:00
b站视频链接解析 (#113)
* feat:b站视频链接解析 * fix:修lint * fix:block改为true * fix:不加视频链接,以免两个机器人在同一个群疯狂触发 * fix:链接换成bv号 * fix:修改为send方法 Co-authored-by: Guohuiyuan <haibaraguo@yeahka.com>
This commit is contained in:
parent
2cda7ecb04
commit
47064dbcec
@ -260,6 +260,8 @@ zerobot [-h] [-t token] [-u url] [-n nickname] [-p prefix] [-d|w] [-g 监听地
|
|||||||
- [x] 推送列表
|
- [x] 推送列表
|
||||||
- **网易云音乐热评** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_wangyiyun"`
|
- **网易云音乐热评** `import _ "github.com/FloatTech/ZeroBot-Plugin/plugin_wangyiyun"`
|
||||||
- [x] 来份网易云热评
|
- [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...**
|
- **TODO...**
|
||||||
|
|
||||||
## 使用方法
|
## 使用方法
|
||||||
|
|||||||
3
main.go
3
main.go
@ -52,7 +52,8 @@ import (
|
|||||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_wangyiyun" // 网易云音乐热评
|
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_wangyiyun" // 网易云音乐热评
|
||||||
|
|
||||||
// b站相关
|
// 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_bilibili_push" // b站推送
|
||||||
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_diana" // 嘉心糖发病
|
_ "github.com/FloatTech/ZeroBot-Plugin/plugin_diana" // 嘉心糖发病
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@ const (
|
|||||||
PrioAIWife
|
PrioAIWife
|
||||||
PrioBase14
|
PrioBase14
|
||||||
PrioBilibili
|
PrioBilibili
|
||||||
|
PrioBiliBiliParse
|
||||||
PrioBilibiliPush
|
PrioBilibiliPush
|
||||||
PrioBookReview
|
PrioBookReview
|
||||||
PrioCangTouShi
|
PrioCangTouShi
|
||||||
|
|||||||
64
plugin_bilibili_parse/bilibili_parse.go
Normal file
64
plugin_bilibili_parse/bilibili_parse.go
Normal file
@ -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
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user