diff options
| author | Yen Chi Hsuan <yan12125@gmail.com> | 2017-02-25 01:40:12 +0800 | 
|---|---|---|
| committer | Yen Chi Hsuan <yan12125@gmail.com> | 2017-02-26 00:15:49 +0800 | 
| commit | 9d0c08a02c55136221621e8b8dda5860211af8dd (patch) | |
| tree | 30941d71a2e785185b8d15b5b280cc5af196be61 /youtube_dl/extractor/vevo.py | |
| parent | e498758b9cfa983d05b10a185ecdef480a93cf30 (diff) | |
[vevo] Fix videos with the new streams/streamsV3 format (closes #11719)
Diffstat (limited to 'youtube_dl/extractor/vevo.py')
| -rw-r--r-- | youtube_dl/extractor/vevo.py | 22 | 
1 files changed, 17 insertions, 5 deletions
| diff --git a/youtube_dl/extractor/vevo.py b/youtube_dl/extractor/vevo.py index c4e37f694..9aa38bc5a 100644 --- a/youtube_dl/extractor/vevo.py +++ b/youtube_dl/extractor/vevo.py @@ -17,12 +17,12 @@ from ..utils import (  class VevoBaseIE(InfoExtractor): -    def _extract_json(self, webpage, video_id, item): +    def _extract_json(self, webpage, video_id):          return self._parse_json(              self._search_regex(                  r'window\.__INITIAL_STORE__\s*=\s*({.+?});\s*</script>',                  webpage, 'initial store'), -            video_id)['default'][item] +            video_id)  class VevoIE(VevoBaseIE): @@ -139,6 +139,11 @@ class VevoIE(VevoBaseIE):          # no genres available          'url': 'http://www.vevo.com/watch/INS171400764',          'only_matching': True, +    }, { +        # Another case available only via the webpage; using streams/streamsV3 formats +        # Geo-restricted to Netherlands/Germany +        'url': 'http://www.vevo.com/watch/boostee/pop-corn-clip-officiel/FR1A91600909', +        'only_matching': True,      }]      _VERSIONS = {          0: 'youtube',  # only in AuthenticateVideo videoVersions @@ -193,7 +198,14 @@ class VevoIE(VevoBaseIE):          # https://github.com/rg3/youtube-dl/issues/9366)          if not video_versions:              webpage = self._download_webpage(url, video_id) -            video_versions = self._extract_json(webpage, video_id, 'streams')[video_id][0] +            json_data = self._extract_json(webpage, video_id) +            if 'streams' in json_data.get('default', {}): +                video_versions = json_data['default']['streams'][video_id][0] +            else: +                video_versions = [ +                    value +                    for key, value in json_data['apollo']['data'].items() +                    if key.startswith('%s.streams' % video_id)]          uploader = None          artist = None @@ -207,7 +219,7 @@ class VevoIE(VevoBaseIE):          formats = []          for video_version in video_versions: -            version = self._VERSIONS.get(video_version['version']) +            version = self._VERSIONS.get(video_version.get('version'), 'generic')              version_url = video_version.get('url')              if not version_url:                  continue @@ -339,7 +351,7 @@ class VevoPlaylistIE(VevoBaseIE):              if video_id:                  return self.url_result('vevo:%s' % video_id, VevoIE.ie_key()) -        playlists = self._extract_json(webpage, playlist_id, '%ss' % playlist_kind) +        playlists = self._extract_json(webpage, playlist_id)['default']['%ss' % playlist_kind]          playlist = (list(playlists.values())[0]                      if playlist_kind == 'playlist' else playlists[playlist_id]) | 
