diff options
Diffstat (limited to 'youtube_dl/extractor/viki.py')
| -rw-r--r-- | youtube_dl/extractor/viki.py | 24 | 
1 files changed, 22 insertions, 2 deletions
diff --git a/youtube_dl/extractor/viki.py b/youtube_dl/extractor/viki.py index a63c23617..ca3f20a3d 100644 --- a/youtube_dl/extractor/viki.py +++ b/youtube_dl/extractor/viki.py @@ -30,6 +30,12 @@ class VikiBaseIE(InfoExtractor):      _token = None +    _ERRORS = { +        'geo': 'Sorry, this content is not available in your region.', +        'upcoming': 'Sorry, this content is not yet available.', +        # 'paywall': 'paywall', +    } +      def _prepare_call(self, path, timestamp=None, post_data=None):          path += '?' if '?' not in path else '&'          if not timestamp: @@ -67,6 +73,12 @@ class VikiBaseIE(InfoExtractor):              '%s returned error: %s' % (self.IE_NAME, error),              expected=True) +    def _check_errors(self, data): +        for reason, status in data.get('blocking', {}).items(): +            if status and reason in self._ERRORS: +                raise ExtractorError('%s said: %s' % ( +                    self.IE_NAME, self._ERRORS[reason]), expected=True) +      def _real_initialize(self):          self._login() @@ -193,6 +205,7 @@ class VikiIE(VikiBaseIE):              'timestamp': 1321985454,              'description': 'md5:44b1e46619df3a072294645c770cef36',              'title': 'Love In Magic', +            'age_limit': 13,          },      }] @@ -202,6 +215,8 @@ class VikiIE(VikiBaseIE):          video = self._call_api(              'videos/%s.json' % video_id, video_id, 'Downloading video JSON') +        self._check_errors(video) +          title = self.dict_selection(video.get('titles', {}), 'en')          if not title:              title = 'Episode %d' % video.get('number') if video.get('type') == 'episode' else video.get('id') or video_id @@ -262,8 +277,11 @@ class VikiIE(VikiBaseIE):                  r'^(\d+)[pP]$', format_id, 'height', default=None))              for protocol, format_dict in stream_dict.items():                  if format_id == 'm3u8': -                    formats = self._extract_m3u8_formats( -                        format_dict['url'], video_id, 'mp4', m3u8_id='m3u8-%s' % protocol) +                    m3u8_formats = self._extract_m3u8_formats( +                        format_dict['url'], video_id, 'mp4', 'm3u8_native', +                        m3u8_id='m3u8-%s' % protocol, fatal=None) +                    if m3u8_formats: +                        formats.extend(m3u8_formats)                  else:                      formats.append({                          'url': format_dict['url'], @@ -315,6 +333,8 @@ class VikiChannelIE(VikiBaseIE):              'containers/%s.json' % channel_id, channel_id,              'Downloading channel JSON') +        self._check_errors(channel) +          title = self.dict_selection(channel['titles'], 'en')          description = self.dict_selection(channel['descriptions'], 'en')  | 
