diff options
| author | Yen Chi Hsuan <yan12125@gmail.com> | 2016-04-23 00:06:49 +0800 | 
|---|---|---|
| committer | Yen Chi Hsuan <yan12125@gmail.com> | 2016-04-23 00:06:49 +0800 | 
| commit | c80037918b86cf79c1542bb7bd7dda94d81c3efb (patch) | |
| tree | c2e1f696d2c13e031d3653328aa75f514462fb25 | |
| parent | 237a41108ae2be9eb76364bb92471489b2eedb7b (diff) | |
[iqiyi] Improve error detection (#9276)
| -rw-r--r-- | youtube_dl/extractor/iqiyi.py | 25 | 
1 files changed, 18 insertions, 7 deletions
| diff --git a/youtube_dl/extractor/iqiyi.py b/youtube_dl/extractor/iqiyi.py index ea8fbb329..ffb8008ce 100644 --- a/youtube_dl/extractor/iqiyi.py +++ b/youtube_dl/extractor/iqiyi.py @@ -287,6 +287,13 @@ class IqiyiIE(InfoExtractor):          ('10', 'h1'),      ] +    AUTH_API_ERRORS = { +        # No preview available (不允许试看鉴权失败) +        'Q00505': 'This video requires a VIP account', +        # End of preview time (试看结束鉴权失败) +        'Q00506': 'Needs a VIP account for full video', +    } +      def _real_initialize(self):          self._login() @@ -372,14 +379,18 @@ class IqiyiIE(InfoExtractor):              note='Downloading video authentication JSON',              errnote='Unable to download video authentication JSON') -        if auth_result['code'] == 'Q00505':  # No preview available (不允许试看鉴权失败) -            raise ExtractorError('This video requires a VIP account', expected=True) -        if auth_result['code'] == 'Q00506':  # End of preview time (试看结束鉴权失败) +        code = auth_result.get('code') +        msg = self.AUTH_API_ERRORS.get(code) or auth_result.get('msg') or code +        if code == 'Q00506':              if do_report_warning: -                self.report_warning('Needs a VIP account for full video') +                self.report_warning(msg)              return False +        if 'data' not in auth_result: +            if msg is not None: +                raise ExtractorError('%s said: %s' % (self.IE_NAME, msg), expected=True) +            raise ExtractorError('Unexpected error from Iqiyi auth API') -        return auth_result +        return auth_result['data']      def construct_video_urls(self, data, video_id, _uuid, tvid):          def do_xor(x, y): @@ -455,11 +466,11 @@ class IqiyiIE(InfoExtractor):                          need_vip_warning_report = False                          break                      param.update({ -                        't': auth_result['data']['t'], +                        't': auth_result['t'],                          # cid is hard-coded in com/qiyi/player/core/player/RuntimeData.as                          'cid': 'afbe8fd3d73448c9',                          'vid': video_id, -                        'QY00001': auth_result['data']['u'], +                        'QY00001': auth_result['u'],                      })                  api_video_url += '?' if '?' not in api_video_url else '&'                  api_video_url += compat_urllib_parse_urlencode(param) | 
