X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Ftwitter.py;h=5d2b5ec3515277980f2da45a91a0c73fae17923d;hb=2812c24c167dfaeed62737f2b5ba2a5c7c0de97f;hp=64c429f02c61b1a1fea49c7900e93757740bc28d;hpb=acb6e97e6a039b7bcce952e9fcf71a5ccf92aec3;p=youtube-dl diff --git a/youtube_dl/extractor/twitter.py b/youtube_dl/extractor/twitter.py index 64c429f02..5d2b5ec35 100644 --- a/youtube_dl/extractor/twitter.py +++ b/youtube_dl/extractor/twitter.py @@ -165,6 +165,7 @@ class TwitterIE(InfoExtractor): 'uploader': 'Gifs', 'uploader_id': 'giphz', }, + 'expected_warnings': ['height', 'width'], }, { 'url': 'https://twitter.com/starwars/status/665052190608723968', 'md5': '39b7199856dee6cd4432e72c74bc69d4', @@ -212,24 +213,28 @@ class TwitterIE(InfoExtractor): return info mobj = re.search(r'''(?x) - ]+class="animated-gif"[^>]+ - (?:data-height="(?P\d+)")?[^>]+ - (?:data-width="(?P\d+)")?[^>]+ - (?:poster="(?P[^"]+)")?[^>]*>\s* + ]+class="animated-gif"(?P[^>]+)>\s* ]+video-src="(?P[^"]+)" ''', webpage) if mobj: + more_info = mobj.group('more_info') + height = int_or_none(self._search_regex( + r'data-height="(\d+)"', more_info, 'height', fatal=False)) + width = int_or_none(self._search_regex( + r'data-width="(\d+)"', more_info, 'width', fatal=False)) + thumbnail = self._search_regex( + r'poster="([^"]+)"', more_info, 'poster', fatal=False) info.update({ 'id': twid, 'url': mobj.group('url'), - 'height': int_or_none(mobj.group('height')), - 'width': int_or_none(mobj.group('width')), - 'thumbnail': mobj.group('poster'), + 'height': height, + 'width': width, + 'thumbnail': thumbnail, }) return info - raise ExtractorError('There\'s not video in this tweet.') + raise ExtractorError('There\'s no video in this tweet.') class TwitterAmplifyIE(TwitterBaseIE): @@ -243,6 +248,7 @@ class TwitterAmplifyIE(TwitterBaseIE): 'id': '0ba0c3c7-0af3-4c0a-bed5-7efd1ffa2951', 'ext': 'mp4', 'title': 'Twitter Video', + 'thumbnail': 're:^https?://.*', }, } @@ -254,8 +260,35 @@ class TwitterAmplifyIE(TwitterBaseIE): 'twitter:amplify:vmap', webpage, 'vmap url') video_url = self._get_vmap_video_url(vmap_url, video_id) + thumbnails = [] + thumbnail = self._html_search_meta( + 'twitter:image:src', webpage, 'thumbnail', fatal=False) + + def _find_dimension(target): + w = int_or_none(self._html_search_meta( + 'twitter:%s:width' % target, webpage, fatal=False)) + h = int_or_none(self._html_search_meta( + 'twitter:%s:height' % target, webpage, fatal=False)) + return w, h + + if thumbnail: + thumbnail_w, thumbnail_h = _find_dimension('image') + thumbnails.append({ + 'url': thumbnail, + 'width': thumbnail_w, + 'height': thumbnail_h, + }) + + video_w, video_h = _find_dimension('player') + formats = [{ + 'url': video_url, + 'width': video_w, + 'height': video_h, + }] + return { 'id': video_id, 'title': 'Twitter Video', - 'url': video_url, + 'formats': formats, + 'thumbnails': thumbnails, }