From 4f248c4dc7f7ad6174832b41103c5429f87cf6d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Fri, 27 May 2022 19:09:07 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20=E4=BC=98=E5=8C=96=20bilibilipar?= =?UTF-8?q?se?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/bilibili_parse/bilibili_parse.go | 33 ++++++++++++++----------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/plugin/bilibili_parse/bilibili_parse.go b/plugin/bilibili_parse/bilibili_parse.go index d17d3972..ac000bd8 100644 --- a/plugin/bilibili_parse/bilibili_parse.go +++ b/plugin/bilibili_parse/bilibili_parse.go @@ -2,6 +2,7 @@ package bilibiliparse import ( + "errors" "regexp" "strings" @@ -12,10 +13,11 @@ import ( ) const ( - 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]+|https://www.bilibili.com/video/bv[0-9a-zA-Z]+" - validRe = "https://www.bilibili.com/video/(BV[0-9a-zA-Z]+)" + validRe = "https://www.bilibili.com/video/(BV[0-9a-zA-Z]+)" ) +var re = regexp.MustCompile(validRe) + func init() { engine := control.Register("bilibiliparse", &control.Options{ DisableOnDefault: false, @@ -23,16 +25,17 @@ func init() { "- https://www.bilibili.com/video/BV1xx411c7BF | https://www.bilibili.com/video/av1605 | https://b23.tv/I8uzWCA | https://www.bilibili.com/video/bv1xx411c7BF", }) - engine.OnRegex(bilibiliRe).SetBlock(true).Handle(func(ctx *zero.Ctx) { - bilibiliURL := ctx.State["regex_matched"].([]string)[0] + engine.OnRegex("(av[0-9]+|BV[0-9a-zA-Z]+|https://b23.tv/[0-9a-zA-Z]+|bv[0-9a-zA-Z]+){1}").SetBlock(true).Handle(func(ctx *zero.Ctx) { + bilibiliURL := ctx.State["regex_matched"].([]string)[1] + if bilibiliURL[0] != 'h' { + bilibiliURL = "https://www.bilibili.com/video/" + bilibiliURL + } m, err := parseURL(bilibiliURL) if err != nil { ctx.SendChain(message.Text("ERROR:", err)) return } - if len(m) != 0 { - ctx.Send(m) - } + ctx.Send(m) }) } @@ -42,29 +45,29 @@ func parseURL(bilibiliURL string) (m message.Message, err error) { return } videoURL := htmlquery.FindOne(doc, "/html/head/meta[@itemprop='url']").Attr[2].Val - re := regexp.MustCompile(validRe) if !re.MatchString(videoURL) { + err = errors.New("parse html error: invalid video url") return } - bv := re.FindStringSubmatch(videoURL)[1] + m = make(message.Message, 0, 8) title := htmlquery.FindOne(doc, "//*[@id='viewbox_report']/h1/span/text()").Data - m = append(m, message.Text(title+"\n")) + m = append(m, message.Text(title, "\n")) upName := strings.TrimSpace(htmlquery.FindOne(doc, "//*[@id='v_upinfo']/div[2]/div[1]/a[1]/text()").Data) fanNumber := htmlquery.InnerText(htmlquery.FindOne(doc, "//i[@class='van-icon-general_addto_s']").NextSibling.NextSibling) - m = append(m, message.Text("up:"+upName+",粉丝:"+fanNumber+"\n")) + m = append(m, message.Text("up: "+upName+",粉丝: "+fanNumber+"\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")) + 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("\n点赞:", strings.TrimSpace(like)+",投币:", strings.TrimSpace(coin)+"\n")) + m = append(m, message.Text("\n点赞: ", 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)) + m = append(m, message.Text("收藏: ", strings.TrimSpace(collect)+",分享: ", strings.TrimSpace(share)+"\n")) + m = append(m, message.Text(videoURL)) return }