From 2da619c4ed26768b33359fb8ef73ba99b253f6fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E5=9B=9E=E6=9D=A5=E5=95=A6?= Date: Tue, 25 Jan 2022 10:55:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E8=99=8E=E7=89=99?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E4=B8=8B=E8=BD=BD=20(#1007)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 支持虎牙视频下载 * style: format * style: format Co-authored-by: 瓜瓜 --- README.md | 3 +- extractors/extractors.go | 2 ++ extractors/huya/huya.go | 66 ++++++++++++++++++++++++++++++++++++ extractors/huya/huya_test.go | 28 +++++++++++++++ 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 extractors/huya/huya.go create mode 100644 extractors/huya/huya_test.go diff --git a/README.md b/README.md index e17673ac5..8441dc547 100644 --- a/README.md +++ b/README.md @@ -620,7 +620,8 @@ $ lux -j "https://www.bilibili.com/video/av20203945" | AcFun | | ✓ | | ✓ | | | Eporner | | ✓ | | | | | StreamTape | | ✓ | | | | -| 虎扑 | https://hupu.com | ✓ | | | | +| 虎扑 | | ✓ | | | | +| 虎牙视频 | | ✓ | | | | ## Known issues diff --git a/extractors/extractors.go b/extractors/extractors.go index 20b41827f..b453ee209 100644 --- a/extractors/extractors.go +++ b/extractors/extractors.go @@ -14,6 +14,7 @@ import ( "github.com/iawia002/lux/extractors/geekbang" "github.com/iawia002/lux/extractors/haokan" "github.com/iawia002/lux/extractors/hupu" + "github.com/iawia002/lux/extractors/huya" "github.com/iawia002/lux/extractors/instagram" "github.com/iawia002/lux/extractors/iqiyi" "github.com/iawia002/lux/extractors/mgtv" @@ -83,6 +84,7 @@ func init() { "streamtape": stExtractor, "streamta": stExtractor, // streamta.pe "hupu": hupu.New(), + "huya": huya.New(), } } diff --git a/extractors/huya/huya.go b/extractors/huya/huya.go new file mode 100644 index 000000000..9d33c589a --- /dev/null +++ b/extractors/huya/huya.go @@ -0,0 +1,66 @@ +package huya + +import ( + "github.com/iawia002/lux/extractors/types" + "github.com/iawia002/lux/request" + "github.com/iawia002/lux/utils" +) + +type extractor struct{} + +const huyaVideoHost = "https://videotx-platform.cdn.huya.com/" + +// New returns a huya extractor. +func New() types.Extractor { + return &extractor{} +} + +func (e *extractor) Extract(url string, option types.Options) ([]*types.Data, error) { + html, err := request.Get(url, url, nil) + if err != nil { + return nil, err + } + + var title string + titleDesc := utils.MatchOneOf(html, `

(.+?)

`) + if len(titleDesc) > 1 { + title = titleDesc[1] + } else { + title = "huya video" + } + + var videoUrl string + videoDesc := utils.MatchOneOf(html, `//videotx-platform.cdn.huya.com/(.*)" poster=(.+?)`) + if len(videoDesc) > 1 { + videoUrl = huyaVideoHost + videoDesc[1] + } else { + return nil, types.ErrURLParseFailed + } + + size, err := request.Size(videoUrl, url) + if err != nil { + return nil, err + } + urlData := &types.Part{ + URL: videoUrl, + Size: size, + Ext: "mp4", + } + quality := "normal" + streams := map[string]*types.Stream{ + quality: { + Parts: []*types.Part{urlData}, + Size: size, + Quality: quality, + }, + } + return []*types.Data{ + { + Site: "虎牙 huya.com", + Title: title, + Type: types.DataTypeVideo, + Streams: streams, + URL: url, + }, + }, nil +} diff --git a/extractors/huya/huya_test.go b/extractors/huya/huya_test.go new file mode 100644 index 000000000..39034bd71 --- /dev/null +++ b/extractors/huya/huya_test.go @@ -0,0 +1,28 @@ +package huya + +import ( + "testing" + + "github.com/iawia002/lux/extractors/types" + "github.com/iawia002/lux/test" +) + +func TestHuya(t *testing.T) { + tests := []struct { + name string + args test.Args + }{ + { + name: "normal test", + args: test.Args{ + URL: "https://m.v.huya.com/play/fans/630103747.html/?shareid=4597484513543964249&shareUid=2179142017&source=ios&sharetype=other&platform=2", + Title: "12.28 集梦薛小谦【封号斗罗】直播名场面", + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + New().Extract(tt.args.URL, types.Options{}) + }) + } +}