diff options
| -rw-r--r-- | youtube_dl/extractor/twitter.py | 22 | 
1 files changed, 19 insertions, 3 deletions
| diff --git a/youtube_dl/extractor/twitter.py b/youtube_dl/extractor/twitter.py index 41d0b6be8..cebb6238c 100644 --- a/youtube_dl/extractor/twitter.py +++ b/youtube_dl/extractor/twitter.py @@ -428,11 +428,22 @@ class TwitterIE(InfoExtractor):          'params': {              'skip_download': True,  # requires ffmpeg          }, +    }, { +        'url': 'https://twitter.com/foobar/status/1087791357756956680', +        'info_dict': { +            'id': '1087791357756956680', +            'ext': 'mp4', +            'title': 'Twitter - A new is coming.  Some of you got an opt-in to try it now. Check out the emoji button, quick keyboard shortcuts, upgraded trends, advanced search, and more. Let us know your thoughts!', +            'thumbnail': r're:^https?://.*\.jpg', +            'description': 'md5:66d493500c013e3e2d434195746a7f78', +            'uploader': 'Twitter', +            'uploader_id': 'Twitter', +            'duration': 61.567, +        },      }]      def _real_extract(self, url):          mobj = re.match(self._VALID_URL, url) -        user_id = mobj.group('user_id')          twid = mobj.group('id')          webpage, urlh = self._download_webpage_handle( @@ -441,8 +452,13 @@ class TwitterIE(InfoExtractor):          if 'twitter.com/account/suspended' in urlh.geturl():              raise ExtractorError('Account suspended by Twitter.', expected=True) -        if user_id is None: -            mobj = re.match(self._VALID_URL, urlh.geturl()) +        user_id = None + +        redirect_mobj = re.match(self._VALID_URL, urlh.geturl()) +        if redirect_mobj: +            user_id = redirect_mobj.group('user_id') + +        if not user_id:              user_id = mobj.group('user_id')          username = remove_end(self._og_search_title(webpage), ' on Twitter') | 
