From bf6f5418bf9d9d273f23598da75a22f815347d27 Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Wed, 1 Nov 2023 21:01:42 +0800 Subject: [PATCH] Feat: support b23 tv parser --- utils/utils.go | 14 +++++++++++++- vendors/bilibili/utils.go | 19 +++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/utils/utils.go b/utils/utils.go index 25a1a7a..7c1ba18 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -4,6 +4,7 @@ import ( "fmt" "math/rand" "net" + "net/http" "net/url" "os" "path/filepath" @@ -17,7 +18,18 @@ import ( "gopkg.in/yaml.v3" ) -var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") +var ( + letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") + noRedirectHttpClient = &http.Client{ + CheckRedirect: func(req *http.Request, via []*http.Request) error { + return http.ErrUseLastResponse + }, + } +) + +func NoRedirectHttpClient() *http.Client { + return noRedirectHttpClient +} const ( UA = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.69` diff --git a/vendors/bilibili/utils.go b/vendors/bilibili/utils.go index c79a627..4fd9c91 100644 --- a/vendors/bilibili/utils.go +++ b/vendors/bilibili/utils.go @@ -3,16 +3,27 @@ package bilibili import ( "errors" "regexp" + + "github.com/synctv-org/synctv/utils" ) var ( - BVRegex = regexp.MustCompile(`(?:https://www\.bilibili\.com/video/)?((?:bv|bV|Bv|BV)\w+)(?:/(\?.*)?)?$`) - ARegex = regexp.MustCompile(`(?:https://www\.bilibili\.com/video/)?(?:av|aV|Av|AV)(\d+)(?:/(\?.*)?)?$`) - SSRegex = regexp.MustCompile(`(?:https://www\.bilibili\.com/bangumi/play/)?(?:ss|sS|Ss|SS)(\d+)(?:\?.*)?$`) - EPRegex = regexp.MustCompile(`(?:https://www\.bilibili\.com/bangumi/play/)?(?:ep|eP|Ep|EP)(\d+)(?:\?.*)?$`) + BVRegex = regexp.MustCompile(`^(?:https://www\.bilibili\.com/video/)?((?:bv|bV|Bv|BV)\w+)(?:[/\?].*)?$`) + ARegex = regexp.MustCompile(`^(?:https://www\.bilibili\.com/video/)?(?:av|aV|Av|AV)(\d+)(?:[/\?].*)?$`) + SSRegex = regexp.MustCompile(`^(?:https://www\.bilibili\.com/bangumi/play/)?(?:ss|sS|Ss|SS)(\d+)(?:\?.*)?$`) + EPRegex = regexp.MustCompile(`^(?:https://www\.bilibili\.com/bangumi/play/)?(?:ep|eP|Ep|EP)(\d+)(?:\?.*)?$`) + B23Regex = regexp.MustCompile(`^(https://)?b23\.tv/(\w+)$`) ) func Match(url string) (t string, id string, err error) { + if B23Regex.MatchString(url) { + resp, err := utils.NoRedirectHttpClient().Get(url) + if err != nil { + return "", "", err + } + resp.Body.Close() + return Match(resp.Header.Get("Location")) + } if m := BVRegex.FindStringSubmatch(url); m != nil { return "bv", m[1], nil }