Synology Video Station TMDB刮削器评级返回格式不正确(小数过多),需要手动处理的问题修正

1 篇文章 0 订阅
1 篇文章 0 订阅

神器也有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个步骤↓

  1. 首先把文件备份一下, cp /var/packages/VideoStation/target/plugins/syno_themoviedb/search.py /var/packages/VideoStation/target/plugins/syno_themoviedb/search.py.bak

  2. 打开文件编辑器 vi /var/packages/VideoStation/target/plugins/syno_themoviedb/search.py

  3. 修改代码

    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
    
  4. 修改完毕后,使用:wq命令保存文件,回到浏览器,进入Video Station,感受无比丝滑吧~

DEBUG过程

对于不需要了解详情的人,下面的都是废话,可以直接跳过了,我只是记录一下生活而已。

虽然一直都知道只是数据处理的结构不一样导致的BUG,但是用起来就是很不爽,几乎每次都需要手改。这作为一个程序员来说,简直无法忍受这种低级的BUG存在。于是,终于沉默爆发了,今天不修正这个BUG,老子就不叫程序员!

于是,我先是翻遍了全网,结果没一个人问过或解决过这个问题。(难道我是头一份?不可能吧?还是大家都在默默的手动改?…)只好靠自己了。

看了一下群晖的代码,结果发现它的web界面都是加密的JS,根本没法调试。(恶心!!!)
于是上网搜了几个网友自己写的Video Station插件,终于找到了Video Station存放插件的目录。/var/packages/VideoStation/target/plugins/,目录下有一个叫做syno_themoviedb的文件夹。进去ls一下,发现了里面的脚本,原来都是py格式的,也就是python了!那就好办了,只要能有地方改就行,就怕需要二次编译的!本地什么环境都没有,要是需要编译才能改的bug,那可太麻烦了。

但是,还有一个问题,这么多代码,咋找到需要的呢?

答案是没法找~不是自己写的程序,对结构也不熟,那就只能靠蒙了!于是开始找和评级相关的单词,找ratescore等等一大堆,结果最后发现都不对…这什么鬼,给起名字那么随意的吗…(这就体现出一个程序员对命名的规范了)虽然此处浪费的大量时间,挨个脚本翻找,也没找到。不过还是对一些函数的功能有所了解了。从一个叫做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和结构组成,为以后再有小改动,也不必苦心烦恼,可以自己修改做好了铺垫。

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值