bangumi-data/bangumi-data

番组补完计划

Opened this issue · 7 comments

bangumi-data 原先的数据维护模式,是每一季度手动添加各站新番,虽然工作量人工维护还算能承受,但仍显疲惫,况且对旧番组就力不从心了。

两个月前我翻看了各站动画列表才意识到,像乐视总共就 470 部,搜狐、AcFun、腾讯视频、芒果tv 等也就几百上下,优酷土豆有三四千,B 站番剧 id 接近 6000,可能算是最多的了。实际上,把各站动画爬一边全部添加是可能的。

于是就诞生了番组补完计划。首先是要有每季度番组的 meta 信息,这部分已经做好了自动化,由 Bangumi Data Helper 爬取 http://cal.syoboi.jp/quarter/ 的数据,目前已经添加到 1990 年;其次是获取各站所有的番剧列表,这部分不难,在各站的列表页遍历一遍拿到 id 和标题;最后是将爬到的列表添加到对应的 JSON 里,这个是比较麻烦的。对于标题一模一样的,可以直接添加,只要注意少部分特例就好,这样差不多可以自动添加 50% 的番组。剩下 50%,我想不到什么好的方法来自动处理,模糊匹配不知道怎么做,另爬放送日期也只能作为辅助判断,所以都是人工判断添加的。

等各站数据都添加完后,番组补完计划可以进入第二阶段。对于数据的更新,就把该站全爬一遍,filter 掉已经存在的,剩下的不符合的番组(如 xx 合集版)存到 exclude 列表,也 filter 掉,再剩下的就是该站新添加的番组,这样维护的话会比较便捷。

目前,我已经补完了不少站点,还剩 pptv、优酷、土豆、B 站未添加。之后还考虑添加 nico、crunchyroll、Amazon Anime Strike、Netflix 等海外站点。

在补完过程中,发现了一些问题以及待讨论的事项:

  • 在爬取全站添加的时候,除了标题完全匹配,有无其他匹配方案?
  • 腾讯视频的专辑页面,如 https://v.qq.com/detail/o/oesitw7dajrcifs.html,目前是使用 o/oesitw7dajrcifs 作为 id。实际上,把前面的 o 换成 [a-zA-Z0-9] 不影响链接的正确性,比如 https://v.qq.com/detail/x/oesitw7dajrcifs.html 也能到达专辑页面。而且腾讯视频相关的 API 中也是 oesitw7dajrcifs 作为 id 的,是否更换?(我是倾向于更换的
  • 各站的剧场版、OVA 还是不少的,可能要重新考虑一下 #1,目前未做区分直接当做普通番组放进去了。不过剧场版缺少一个获取 meta 信息的方案,cal.syoboi.jp 没有剧场版数据。
  • 像 B 站和优酷专辑页面,没有实际的各集视频,PPTV 有些也只有 PV 和 CM,有些仅列出其他站点的播放源。考虑到现在各站也在购买旧番,说不定哪天就买了,那这些是否应该添加?该如何区分?

关于剧场版我这里 MikanProject/bangumi-data 已经开始维护了,可以参考这里的数据。meta信息是从萌娘百科爬的,我找下来应该是当前最适合的数据源了。

不知道是否有计划新开一个维护用的前端项目? 方便用户可视化共同编辑维护?

@GPBeta 感觉需求不大啊?

主要是直接改 JSON 对我们这种代码小白来说不友好, 难以实现普通肥宅的共同维护 (

@GPBeta

我之前想过,可视化编辑,提交后由 bot 自动发 PR,但流程太过简化后,怕一些无意义的提交或 spam,不知道怎样算一个合理的平衡点。

目前一部分维护工作可以由 bdh 自动化,对我来说需求确实不强烈。

我对当前的数据结构有个想法,就是大部分字段都默认值为 null,比如 official,有些站点自动化拿不到数据,自动填了 false 之后就不知道这个值对不对了,默认为 null 的话可以之后人工填写。这样可视化编辑的作用可能会稍微大一点。

https://github.com/manami-project/anime-offline-database

发现这个项目,可以考虑吃掉 AGPL 许可,吃不掉。

在爬取全站添加的时候,除了标题完全匹配,有无其他匹配方案?

您有试过例如Levenshtein等字符串模糊匹配的方式吗?我在一些番剧上测试过效果还好,您可以考虑一下。
希望不算挖坟(