一直在ubuntu下面使用xbmc看搜狐视频的电视剧,可是突然发现电视剧看不了,全是乱码。花了两个小时替作者查BUG,好早终于找到问题了。
问题表现为在电视剧的剧情列表显示为乱码,其实不是乱码而是unicode字符创。然后根据作者的源码一步步查看搜狐视频的源码,发现搜狐视频在返回json数据的时候将json数据了unicode加密,而作者没有可能没有考虑到这个问题,或者是当时的搜狐并没有做这样的修改。既然问题找到了,那修改也很简单。
具体修改的代码为,在$home/.xbmc/addons/plugin.video.sohuvideo文件中的第391行出,也就是link = getHttpData("http://search.vrs.sohu.com/avs_i"+vid+"_pr"+pid+"_o"+obtype+"_n_p1000_chltv.sohu.com.json")的后面添加一句:link=link.decode('raw_unicode_escape').encode('utf-8')。然后就可以正常观看了。
if len(match0)>0:
# print 'pid=' + match0[0]
pid=match0[0].replace('"','')
match0 = re.compile('var vid=(.+?);', re.DOTALL).findall(link)
vid=match0[0].replace('"','')
obtype= '2'
link = getHttpData("http://search.vrs.sohu.com/avs_i"+vid+"_pr"+pid+"_o"+obtype+"_n_p1000_chltv.sohu.com.json")
link=link.decode('raw_unicode_escape').encode('utf-8')
match = re.compile('"videoName":"(.+?)",.+?"videoPublishTime":(\d+),.+?"playOrder":"(\d+)",.+?"videoUrl":"(.+?)",.+?"videoBigPic":"(.+?)",', re.DOTALL).findall(link)
totalItems = len(match)
i = 0
for p_name, p_time, p_order, p_url, p_thumb in match:
i +=1
p_date = datetime.date.fromtimestamp(float(p_time)/1000).strftime('%d.%m.%Y')
li = xbmcgui.ListItem(p_name, iconImage = '', thumbnailImage = p_thumb)
li.setInfo(type="Video",infoLabels={"Title":p_name, "date":p_date, "episode":int(p_order)})
u = sys.argv[0] + "?mode=3&name=" + urllib.quote_plus(p_name) + "&url=" + urllib.quote_plus(p_url)+ "&thumb=" + urllib.quote_plus(p_thumb)
xbmcplugin.addDirectoryItem(int(sys.argv[1]), u, li, False, totalItems)
继续发现一个错误,作者写的那个正则表达式稍微有点问题,不能够完全显示电视剧的列表,只有奇数。我用json给修改了一下:
if len(match0)>0:
387 # print 'pid=' + match0[0]
388 pid=match0[0].replace('"','')
389 match0 = re.compile('var vid=(.+?);', re.DOTALL).findall(link)
390 vid=match0[0].replace('"','')
391 obtype= '2'
392 link = getHttpData("http://search.vrs.sohu.com/avs_i"+vid+"_pr"+pid+"_o"+obtype+"_n_p1000_chltv.sohu.com.json")
393 link=link.decode('raw_unicode_escape').encode('utf-8')
394
395 #match = re.compile('"videoName":"(.+?)",.+?"videoPublishTime":(\d+),.+?"playOrder":"(\d+)",.+?"videoUrl":"(.+?)",.+?"videoBigPic":"(.+?)",', re.DOTALL).findall(link)
396 #totalItems = len(match)
397 link=link.replace('var video_album_videos_result=','')
398 match=json.loads(link)['videos']
399 totalItems=len(match)
400 i = 0
401 for line in match:
402 p_name=line['videoName'].encode('utf-8')
403 p_time=line['videoPublishTime']
404 p_order=line['playOrder'].encode('utf-8')
405 p_url=line['videoUrl'].encode('utf-8')
406 p_thumb=line['videoBigPic'].encode('utf-8')
407
408 i +=1
409 p_date = datetime.date.fromtimestamp(float(p_time)/1000).strftime('%d.%m.%Y')
410 li = xbmcgui.ListItem(p_name, iconImage = '', thumbnailImage = p_thumb)
411 li.setInfo(type="Video",infoLabels={"Title":p_name, "date":p_date, "episode":int(p_order)})
412 u = sys.argv[0] + "?mode=3&name=" + urllib.quote_plus(p_name) + "&url=" + urllib.quote_plus(p_url)+ "&thumb=" + urllib.quote_plus(p_thumb)