diff options
| author | Sergey M․ <dstftw@gmail.com> | 2018-06-03 04:07:59 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2018-06-03 04:07:59 +0700 | 
| commit | 6d155707e67dc9e3bc4e118dc7d6a06bf8af471f (patch) | |
| tree | 6a6371f30f5ecc471fd9388718f1872689aec1f9 | |
| parent | eb6793ba970351ecc8f8a579ff4e4665fb649f9b (diff) | |
[bbc] Add support for bbcthree (closes #16612)
| -rw-r--r-- | youtube_dl/extractor/bbc.py | 42 | 
1 files changed, 42 insertions, 0 deletions
| diff --git a/youtube_dl/extractor/bbc.py b/youtube_dl/extractor/bbc.py index 8b20c03d6..30a63a24e 100644 --- a/youtube_dl/extractor/bbc.py +++ b/youtube_dl/extractor/bbc.py @@ -12,6 +12,7 @@ from ..utils import (      float_or_none,      get_element_by_class,      int_or_none, +    js_to_json,      parse_duration,      parse_iso8601,      try_get, @@ -772,6 +773,17 @@ class BBCIE(BBCCoUkIE):          # single video article embedded with data-media-vpid          'url': 'http://www.bbc.co.uk/sport/rowing/35908187',          'only_matching': True, +    }, { +        'url': 'https://www.bbc.co.uk/bbcthree/clip/73d0bbd0-abc3-4cea-b3c0-cdae21905eb1', +        'info_dict': { +            'id': 'p06556y7', +            'ext': 'mp4', +            'title': 'Transfers: Cristiano Ronaldo to Man Utd, Arsenal to spend?', +            'description': 'md5:4b7dfd063d5a789a1512e99662be3ddd', +        }, +        'params': { +            'skip_download': True, +        }      }]      @classmethod @@ -994,6 +1006,36 @@ class BBCIE(BBCCoUkIE):                      'subtitles': subtitles,                  } +        bbc3_config = self._parse_json( +            self._search_regex( +                r'(?s)bbcthreeConfig\s*=\s*({.+?})\s*;\s*<', webpage, +                'bbcthree config', default='{}'), +            playlist_id, transform_source=js_to_json, fatal=False) +        if bbc3_config: +            bbc3_playlist = try_get( +                bbc3_config, lambda x: x['payload']['content']['bbcMedia']['playlist'], +                dict) +            if bbc3_playlist: +                playlist_title = bbc3_playlist.get('title') or playlist_title +                thumbnail = bbc3_playlist.get('holdingImageURL') +                entries = [] +                for bbc3_item in bbc3_playlist['items']: +                    programme_id = bbc3_item.get('versionID') +                    if not programme_id: +                        continue +                    formats, subtitles = self._download_media_selector(programme_id) +                    self._sort_formats(formats) +                    entries.append({ +                        'id': programme_id, +                        'title': playlist_title, +                        'thumbnail': thumbnail, +                        'timestamp': timestamp, +                        'formats': formats, +                        'subtitles': subtitles, +                    }) +                return self.playlist_result( +                    entries, playlist_id, playlist_title, playlist_description) +          def extract_all(pattern):              return list(filter(None, map(                  lambda s: self._parse_json(s, playlist_id, fatal=False), | 
