|
| 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