ausaki / subfinder

字幕查找器
MIT License
833 stars 96 forks source link

运行时遇到异常 #12

Closed charlesyc closed 6 years ago

charlesyc commented 6 years ago

首先感谢作者为大家制作这么方便的软件。 在抓取WestWorld S02 E03时遇到异常,难道是因为这部片子还没有字幕?(看log好像不像啊。。) 控制台输出:

#./SubFinder.py ~/Downloads/Westworld.S02E03.Virtu.e.Fortuna.720p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mkv
Find 1 video

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "./SubFinder.py", line 222, in run
    sub_info_list = getSubInfo(f, lang)
  File "./SubFinder.py", line 146, in getSubInfo
    return res.json()
  File "/usr/lib/python3/dist-packages/requests/models.py", line 892, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/lib/python3/dist-packages/simplejson/__init__.py", line 518, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode
    obj, end = self.raw_decode(s)
  File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode
    return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

********************************************************************************
Finish.find 0 subtitles,0 sucessed,0 failed,0 files not found subtitle

另外,抓了另一个片子的字幕没有问题。目前只有这个出错。 请帮忙看一下,谢谢!

charlesyc commented 6 years ago

又看了一下,好像是由于射手API没有返回json导致的?如果真的是这样的话(没有字幕),是不是给用户返回一个提示更好呢?(而不是程序异常)。谢谢!

ausaki commented 6 years ago

应该是射手 API 还没有对应的字幕,所以没有返回json 数据,而是返回了'\xff'。

https://docs.google.com/document/d/1ufdzy6jbornkXxsD-OGl3kgWa4P9WO5NZb6_QYZiGI0/preview 尚不能提供字幕时将返回一个字节,值为0xff(-1)。 可提供字幕时会返回json格式的Subinfo结构的Array数据,结构如下:

正好你使用的是 python3.6,导致if res.content == '\xff'判断失效了(python2/3的字符串兼容问题,res.content 应该是 bytes 类型,而'\xff'是unicode str),return res.json()尝试 json 解码失败。

正在计划重构代码以兼容 python2/3。