iambus / youku-lixian

优酷下载脚本,顺便支持其他……
Other
849 stars 264 forks source link

下载youku视频失败,似乎是优酷返回的json中segs对应值为空导致 #76

Closed kira1928 closed 9 years ago

kira1928 commented 10 years ago

使用的是今天新下载的youku-lixian版本,python版本 2.7.3,主机是Synology NAS ds110j 命令和错误报告如下:

bash-3.2# python ../tool/youku-lixian-master/youku.py --playlist http://www.youku.com/playlist_show/id_3516032.html Downloading 1 of 50 videos... Traceback (most recent call last): File "../tool/youku-lixian-master/youku.py", line 202, in main() File "../tool/youku-lixian-master/youku.py", line 199, in main script_main('youku', youku_download, youku_download_playlist) File "/volume1/public/tool/youku-lixian-master/common.py", line 285, in script_main download_playlist(url, create_dir=create_dir, merge=merge) File "../tool/youku-lixian-master/youku.py", line 193, in youku_download_playlist youku_download(id, output_dir=output_dir, merge=merge) File "../tool/youku-lixian-master/youku.py", line 135, in youku_download youku_download_by_id(id2, title, output_dir, merge=merge) File "../tool/youku-lixian-master/youku.py", line 126, in youku_download_by_id urls, sizes = zip(*find_video(info, stream_type)) File "../tool/youku-lixian-master/youku.py", line 88, in find_video types = segs.keys() AttributeError: 'list' object has no attribute 'keys'

测试了一下,用chrome浏览器或bash里执行wget访问http://v.youku.com/player/getPlayList/VideoIDS/XNDk3MDM0NDQ= 都可以得到完整的json。但用python的urllib2.urlopen访问这个网址的话,返回的比较深层的dict会变空[]。上面的脚本错误就是因为info['data'][0]['segs']是空[],可浏览器上看到的json,segs对应的应该是一个dict才对。

kira1928 commented 10 years ago

刚才在别处的其他电脑上用chrome试了一下http://v.youku.com/player/getPlayList/VideoIDS/XNDk3MDM0NDQ= ,这次在浏览器上也出现空segs的问题了 返回结果如下:

{"data":[{"ct":"h","cs":"2205|2224","logo":"http:\/\/g1.ykimg.com\/1100641F464C74EBD4C4B5010B5E410B7B302A-4779-4FDA-D898-1F9667A501FC","seed":508,"tags":["\u79c0\u9017\u9b54\u5bfc\u58eb","\u4e2d\u6587\u7248","\u9b54\u5251\u7f8e\u795e","TRY","\u7b2c3\u90e8"],"categories":"100","videoid":"12425861","vidEncoded":"XNDk3MDM0NDQ=","username":"\u599e\u5c0f\u79d8","userid":"17522241","title":"\u79c0\u9017\u9b54\u5bfc\u58eb\u4e2d\u6587\u7248\u7b2c3\u90e8TRY\u7b2c26\u96c6","up":0,"down":0,"ts":"nQIMeTTgvPLDitgBSzgwrA","tsup":"nQIIBzfgvPLDitgCNTwwrA","key1":"bf7fba7e","key2":"86a62ece71d98691","tt":"0","videoSource":1,"seconds":"1338.60","streamfileids":{"flv":"1914"},"segs":[],"streamsizes":[],"stream_ids":[],"streamlogos":{"flv":0},"streamtypes":["flv"],"streamtypes_o":["flvhd"],"error":"\u62b1\u6b49\uff0c\u6b64\u89c6\u9891\u53ea\u9650\u4e8e\u4e2d\u56fd\u5185\u5730\u64ad\u653e\u3002\nSorry, this video can only be streamed within Mainland China.","error_code":-8}],"user":{"id":0},"controller":{"search_count":true,"mp4_restrict":1,"stream_mode":1,"video_capture":true,"hd3_enabled":false,"area_code":"","dma_code":"","continuous":0,"playmode":"normal","circle":false,"tsflag":false,"other_disable":false,"xplayer_disable":false,"app_disable":false,"share_disabled":false,"download_disabled":false,"pc_disabled":false,"pad_disabled":false,"mobile_disabled":false,"tv_disabled":false,"comment_disabled":false}}

kira1928 commented 10 years ago

我好像明白了……这是对海外用户的屏蔽。我家里的浏览器因为有插件所以能看,python和别的电脑看不到。嗯,好吧orz