[twitter] Support HLS streams in vmap URLs

This commit is contained in:
Yen Chi Hsuan 2017-07-11 15:48:34 +08:00
parent 7f176ac477
commit 9be31e771c
No known key found for this signature in database
GPG Key ID: 7F902A182457CA23
2 changed files with 15 additions and 9 deletions

View File

@ -1,6 +1,7 @@
version <unreleased> version <unreleased>
Extractors Extractors
+ [twitter] Support HLS streams in vmap URLs
+ [periscope] Support pscp.tv URLs in embedded frames + [periscope] Support pscp.tv URLs in embedded frames
* [niconico] Fix authentication error handling (#12486) * [niconico] Fix authentication error handling (#12486)
* [giantbomb] Extract m3u8 formats (#13626) * [giantbomb] Extract m3u8 formats (#13626)

View File

@ -20,9 +20,16 @@
class TwitterBaseIE(InfoExtractor): class TwitterBaseIE(InfoExtractor):
def _get_vmap_video_url(self, vmap_url, video_id): def _extract_formats_from_vmap_url(self, vmap_url, video_id):
vmap_data = self._download_xml(vmap_url, video_id) vmap_data = self._download_xml(vmap_url, video_id)
return xpath_text(vmap_data, './/MediaFile').strip() video_url = xpath_text(vmap_data, './/MediaFile').strip()
if determine_ext(video_url) == 'm3u8':
return self._extract_m3u8_formats(
video_url, video_id, ext='mp4', m3u8_id='hls',
entry_protocol='m3u8_native')
return [{
'url': video_url,
}]
@staticmethod @staticmethod
def _search_dimensions_in_video_url(a_format, video_url): def _search_dimensions_in_video_url(a_format, video_url):
@ -197,9 +204,8 @@ def _real_extract(self, url):
vmap_url = config.get('vmapUrl') or config.get('vmap_url') vmap_url = config.get('vmapUrl') or config.get('vmap_url')
if vmap_url: if vmap_url:
formats.append({ formats.extend(
'url': self._get_vmap_video_url(vmap_url, video_id), self._extract_formats_from_vmap_url(vmap_url, video_id))
})
media_info = None media_info = None
@ -449,7 +455,7 @@ def _real_extract(self, url):
vmap_url = self._html_search_meta( vmap_url = self._html_search_meta(
'twitter:amplify:vmap', webpage, 'vmap url') 'twitter:amplify:vmap', webpage, 'vmap url')
video_url = self._get_vmap_video_url(vmap_url, video_id) formats = self._extract_formats_from_vmap_url(vmap_url, video_id)
thumbnails = [] thumbnails = []
thumbnail = self._html_search_meta( thumbnail = self._html_search_meta(
@ -471,11 +477,10 @@ def _find_dimension(target):
}) })
video_w, video_h = _find_dimension('player') video_w, video_h = _find_dimension('player')
formats = [{ formats[0].update({
'url': video_url,
'width': video_w, 'width': video_w,
'height': video_h, 'height': video_h,
}] })
return { return {
'id': video_id, 'id': video_id,