知名视频下载工具 annie 的一个大重构挺有意思。

matrix67:annie 是一个视频下载工具。能够下各个视频网站的视频到本地。

然后之前它下载,都是在 main 函数里面根据 url 进行判断,然后每个包自己实现 Extract 方法。具体为有一个 download 函数

func download(videoURL string) error {
	var (
		domain string
		err    error
		data   []downloader.Data
	)
……
	switch domain {
	case "douyin", "iesdouyin":
		data, err = douyin.Extract(videoURL)
	case "bilibili":
		data, err = bilibili.Extract(videoURL)
	case "bcy":
		data, err = bcy.Extract(videoURL)
	case "pixivision":
		data, err = pixivision.Extract(videoURL)
	case "youku":
		data, err = youku.Extract(videoURL)
很多这边就不贴了
 ……

}

最近有个更新,commit 为 424f8def refactor the whole structure (#676), 作者重构了一下,引入了 interface 。具体实现为:

var extractorMap map[string]types.Extractor

func init() {
	douyinExtractor := douyin.New()
	youtubeExtractor := youtube.New()

	extractorMap = map[string]types.Extractor{
		"": universal.New(), // universal extractor

		"douyin":     douyinExtractor,
		"iesdouyin":  douyinExtractor,
		"bilibili":   bilibili.New(),
		"bcy":        bcy.New(),
		"pixivision": pixivision.New(),
		"youku":      youku.New(),
		"youtube":    youtubeExtractor,
		"youtu":      youtubeExtractor, // youtu.be
	……
	}
}

然后 extract 里面

extractor := extractorMap[domain]
videos, err := extractor.Extract(u, option)

每个包实现了Extractor接口 Extract 方法。

// Extractor implements video data extraction related operations.
type Extractor interface {
	// Extract is the main function to extract the data.
	Extract(url string, option Options) ([]*Data, error)
}

这个重构还是挺有意思,作者应该早就想改了,但是是一个大工程,不知道作者心路历程是咋样滴 。

我想问问 extractorMap[domain] 这个用法是比较 native 的吗。另外好像仅仅针对这个问题,用接口的方法没太省事儿,因为 Extractor 就一个方法,之前的那种写法也可行。感觉就是解耦跟好了?

下面是之前学习看视频的时候说用接口的好处。
知名视频下载工具 annie 的一个大重构挺有意思。

xgfan:同样新增一个视频网站下载器
第一种,理论上需要修改 download 方法。
第二种,只需要在这个下载器初始化的时候,注册到 extractorMap 中就完事了。
第二种 1 是把下载和其他逻辑分离开来了。2 是利于拓展。

总之就是很常见的模式,具体叫啥名忘记了……

视频 App 青少年守护模式如何关闭?

inhd:每次打开视频 App,都会弹出这个窗口真的很烦人。 https://i.loli.net/2020/09/26/cOXyudvkJM8aZqp.jpgmisaka19000:关不了 runking:成年人表示登录后大多数 APP 天天弹这个 ziseyinzi:B 站的话,xposed 模块“哔哩漫游” ddefewfewf:找党 51557674…

二次元与程小东

helloworld2010:一直以为二次元是物理学上的概念,没想到是指漫画与视频,一静一动。一直以为程小东应该是个帅哥,没想到是一个中年发福的大叔。尴尬至极。。。。

请教一下关于宽带的问题

leeeeec:事情是这样的,我现在用的宽带是室友的,电信。但是室友要搬走,所以我要再搞一根,但是电信有个规则是,老宽带搬走后,新宽带要一个月后才可以装。所以就想换其他的,平时看看视频玩玩 lol,联通或者移动有推荐的吗?坐标上海。

消掉李诞的笑声

pheyer:最近微博上李雪琴好像火了,所以中午我去看了一下她的脱口秀视频,看着看着就发现有一样东西使我观看体验大打折扣,那就是李诞的笑声,虽然极具鲜明个人特色,但在我听来太突出太刺耳而又有些尬,讲真,我感觉要是没他的笑声,或者他憋笑,低调的笑的话,节目质量应该会上一个档次。特地去搜了一下微博,看是不是有人跟我有同样的感觉,还真有几个仅表达个人感觉,可能有人…

为什么无线路由器会时不时限速

mainlong:用的是移动的 100M 宽带,但是有时候会限速到 10M,看个视频都卡。 师傅来了之后,发现猫出口速度正常是 100M,但是无线路由器出来就限速到 10M 了,师傅走之后就正常了,过了几天又限速了。 大家有遇到这种情况吗?