diff options
| -rw-r--r-- | youtube_dl/extractor/common.py | 2 | ||||
| -rw-r--r-- | youtube_dl/extractor/vimeo.py | 51 | 
2 files changed, 31 insertions, 22 deletions
| diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 0889288f0..59ad455c1 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -2019,6 +2019,8 @@ class InfoExtractor(object):          if res is False:              return []          mpd_doc, urlh = res +        if mpd_doc is None: +            return []          mpd_base_url = base_url(urlh.geturl())          return self._parse_mpd_formats( diff --git a/youtube_dl/extractor/vimeo.py b/youtube_dl/extractor/vimeo.py index 9aec8a2ab..d404498aa 100644 --- a/youtube_dl/extractor/vimeo.py +++ b/youtube_dl/extractor/vimeo.py @@ -109,23 +109,8 @@ class VimeoBaseInfoExtractor(InfoExtractor):      def _parse_config(self, config, video_id):          video_data = config['video'] -        # Extract title          video_title = video_data['title'] - -        # Extract uploader, uploader_url and uploader_id -        video_uploader = video_data.get('owner', {}).get('name') -        video_uploader_url = video_data.get('owner', {}).get('url') -        video_uploader_id = video_uploader_url.split('/')[-1] if video_uploader_url else None - -        # Extract video thumbnail -        video_thumbnail = video_data.get('thumbnail') -        if video_thumbnail is None: -            video_thumbs = video_data.get('thumbs') -            if video_thumbs and isinstance(video_thumbs, dict): -                _, video_thumbnail = sorted((int(width if width.isdigit() else 0), t_url) for (width, t_url) in video_thumbs.items())[-1] - -        # Extract video duration -        video_duration = int_or_none(video_data.get('duration')) +        is_live = try_get(video_data, lambda x: x['live_event']['status']) == 'started'          formats = []          config_files = video_data.get('files') or config['request'].get('files', {}) @@ -151,7 +136,7 @@ class VimeoBaseInfoExtractor(InfoExtractor):                  if files_type == 'hls':                      formats.extend(self._extract_m3u8_formats(                          manifest_url, video_id, 'mp4', -                        'm3u8_native', m3u8_id=format_id, +                        'm3u8' if is_live else 'm3u8_native', m3u8_id=format_id,                          note='Downloading %s m3u8 information' % cdn_name,                          fatal=False))                  elif files_type == 'dash': @@ -164,6 +149,10 @@ class VimeoBaseInfoExtractor(InfoExtractor):                      else:                          mpd_manifest_urls = [(format_id, manifest_url)]                      for f_id, m_url in mpd_manifest_urls: +                        if 'json=1' in m_url: +                            real_m_url = (self._download_json(m_url, video_id, fatal=False) or {}).get('url') +                            if real_m_url: +                                m_url = real_m_url                          mpd_formats = self._extract_mpd_formats(                              m_url.replace('/master.json', '/master.mpd'), video_id, f_id,                              'Downloading %s MPD information' % cdn_name, @@ -184,15 +173,33 @@ class VimeoBaseInfoExtractor(InfoExtractor):                      'url': 'https://vimeo.com' + tt['url'],                  }] +        thumbnails = [] +        if not is_live: +            for key, thumb in video_data.get('thumbs', {}).items(): +                thumbnails.append({ +                    'id': key, +                    'width': int_or_none(key), +                    'url': thumb, +                }) +            thumbnail = video_data.get('thumbnail') +            if thumbnail: +                thumbnails.append({ +                    'url': thumbnail, +                }) + +        owner = video_data.get('owner') or {} +        video_uploader_url = owner.get('url') +          return { -            'title': video_title, -            'uploader': video_uploader, -            'uploader_id': video_uploader_id, +            'title': self._live_title(video_title) if is_live else video_title, +            'uploader': owner.get('name'), +            'uploader_id': video_uploader_url.split('/')[-1] if video_uploader_url else None,              'uploader_url': video_uploader_url, -            'thumbnail': video_thumbnail, -            'duration': video_duration, +            'thumbnails': thumbnails, +            'duration': int_or_none(video_data.get('duration')),              'formats': formats,              'subtitles': subtitles, +            'is_live': is_live,          }      def _extract_original_format(self, url, video_id): | 
