From 8199f044b4b5f10e36b3cb8efd5391379811505e Mon Sep 17 00:00:00 2001 From: tewe Date: Sun, 15 Sep 2013 21:58:49 +0200 Subject: [PATCH] [youku] better error handling blocked videos used to cause death by TypeError, now we report what the server says --- run | 6 ++++++ youtube_dl/extractor/youku.py | 8 ++++++++ 2 files changed, 14 insertions(+) create mode 100755 run diff --git a/run b/run new file mode 100755 index 000000000..fc3cc8ad8 --- /dev/null +++ b/run @@ -0,0 +1,6 @@ +#!/usr/bin/env python + +import youtube_dl + +if __name__ == '__main__': + youtube_dl.main() diff --git a/youtube_dl/extractor/youku.py b/youtube_dl/extractor/youku.py index 996d38478..ec792d2fa 100644 --- a/youtube_dl/extractor/youku.py +++ b/youtube_dl/extractor/youku.py @@ -9,6 +9,7 @@ import time from .common import InfoExtractor from ..utils import ( ExtractorError, + UnavailableVideoError, ) @@ -66,6 +67,12 @@ class YoukuIE(InfoExtractor): self.report_extraction(video_id) try: config = json.loads(jsondata) + error_code = config['data'][0].get('error_code') + if error_code: + # -8 means blocked outside China. + error = config['data'][0].get('error') # Chinese and English, separated by newline. + self.to_screen(error or u'Server reported error %i' % error_code) + raise UnavailableVideoError() video_title = config['data'][0]['title'] seed = config['data'][0]['seed'] @@ -89,6 +96,7 @@ class YoukuIE(InfoExtractor): fileid = config['data'][0]['streamfileids'][format] keys = [s['k'] for s in config['data'][0]['segs'][format]] + # segs is usually a dictionary, but an empty *list* if an error occured. except (UnicodeDecodeError, ValueError, KeyError): raise ExtractorError(u'Unable to extract info section')