神器也有BUG
群晖的Video Station
一直都是个人流媒体库这个业界中免费的王者。对于不必花钱就可以享受自己搭建流媒体库的乐趣这件事,我一直都很热衷。不过,有一说一,再好的软件也有BUG。
BUG问题
经常使用Video Station
的人就知道,一个好用的刮削器会带来什么样的愉悦体验。当然如果你不在乎缩略图全是X,视频信息全部手填的话,那么,下面的文章也不必看了。
Video Station
默认的刮削器是TMDB
,需要到TMDB官网上去申请API,配置到插件里面去。对于如何配置,网上的教程随便搜,遍地都是,本文不做讨论。
TMDB
返回的数据集中,评级
属性返回的格式和Video Station
需要存储的格式不一致。Video Station
需要的是一个保留1位的小数,而TMDB
返回的是保留4位小数的数据。结果导致每次搜索后都需要手动改评级
才能保存。
解决方案
既然是返回的数据有问题,那就在返回数据时,把小数处理成Video Station
认可的1位小数就可以了。
所以,我修改了/var/packages/VideoStation/target/plugins/syno_themoviedb/search.py
这个文件。
找到函数_parse_movie_info
和_parse_episode_info
,修改其中带有vote_average
属性的数据,保留1位小数就行了。只需要4个步骤↓
-
首先把文件备份一下,
cp /var/packages/VideoStation/target/plugins/syno_themoviedb/search.py /var/packages/VideoStation/target/plugins/syno_themoviedb/search.py.bak
-
打开文件编辑器
vi /var/packages/VideoStation/target/plugins/syno_themoviedb/search.py
-
修改代码
python # 这里是电影的信息处理函数 def _parse_movie_info(movie_data): ... if movie_data['vote_average']: # 只需要把vote_average返回值保留1为小数就可以了,所以使用round(‘8.006’, 1) data = _set_data_value(data, ['extra', constant.PLUGINID, 'rating', 'themoviedb'],round(movie_data['vote_average'],1)) ... return data # 这里是电视剧的信息处理函数 def _parse_episode_info(tv_data, episode_data, season, episode): data = copy.deepcopy(constant.TVSHOW_EPISODE_DATA_TEMPLATE) .... # 只需要把vote_average返回值保留1为小数就可以了,所以使用round(‘8.006’, 1) data = _set_data_value(data, ['extra', constant.PLUGINID, 'rating', 'themoviedb_tv'], round(tv_data['vote_average'],1)) return data
-
修改完毕后,使用
:wq
命令保存文件,回到浏览器,进入Video Station
,感受无比丝滑吧~
DEBUG过程
对于不需要了解详情的人,下面的都是废话,可以直接跳过了,我只是记录一下生活而已。
虽然一直都知道只是数据处理的结构不一样导致的BUG,但是用起来就是很不爽,几乎每次都需要手改。这作为一个程序员来说,简直无法忍受这种低级的BUG存在。于是,终于沉默爆发了,今天不修正这个BUG,老子就不叫程序员!
于是,我先是翻遍了全网,结果没一个人问过或解决过这个问题。(难道我是头一份?不可能吧?还是大家都在默默的手动改?…)只好靠自己了。
看了一下群晖的代码,结果发现它的web界面都是加密的JS,根本没法调试。(恶心!!!)
于是上网搜了几个网友自己写的Video Station
插件,终于找到了Video Station
存放插件的目录。/var/packages/VideoStation/target/plugins/
,目录下有一个叫做syno_themoviedb
的文件夹。进去ls
一下,发现了里面的脚本,原来都是py格式的,也就是python了!那就好办了,只要能有地方改就行,就怕需要二次编译的!本地什么环境都没有,要是需要编译才能改的bug,那可太麻烦了。
但是,还有一个问题,这么多代码,咋找到需要的呢?
答案是没法找~不是自己写的程序,对结构也不熟,那就只能靠蒙了!于是开始找和评级
相关的单词,找rate
,score
等等一大堆,结果最后发现都不对…这什么鬼,给起名字那么随意的吗…(这就体现出一个程序员对命名的规范了)虽然此处浪费的大量时间,挨个脚本翻找,也没找到。不过还是对一些函数的功能有所了解了。从一个叫做util_themoviedb.py
的脚本中得知,刮削器会通过searchinc.py
中的一个目录下载文件,并保存为JSON格式。于是到searchinc.py
查看了一下,目录是../plugin_data
,于是顺藤摸瓜,找到了文件下载的目录/var/packages/VideoStation/target/plugins/plugin_data
,然后使用刮削器,下载了一个新的信息,利用命令ls -altr
查看更新时间有变化的最新的目录,结果就找到了存储的JSON文件。xxxxxxxxx是utf8的编码xxxxxxxxxxxxxxxxxx_0_zh-CN_1.json
,利用vi
查看文件内容,终于在JSON文件里面找到了一个叫vote_average
的,直译的话,就是平均得票
,也就是平均评分了。终于找到了!找到了名字就好办了,再次回到脚本里面找vote_average
,于是在search.py
文件中发现了两处使用的地方。就是上面解决方案里面的那两处。看函数名一个是电影用的,一个是电视剧用的,两个函数都需要改。那就改吧,把保留1为小数round(xx,1)
的函数套在最外面。然后保存文件,再刷新浏览器页面,重新搜一个之前不好使的,发现不再报错了,至此,完美解决了这个BUG。
总结
经过此次修改BUG,大致了解了TMDB刮削器插件的API和结构组成,为以后再有小改动,也不必苦心烦恼,可以自己修改做好了铺垫。