XBMC不能看搜狐电视剧

    一直在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)




你可能感兴趣的:(乱码,xbmc,搜狐视频)