From f31c8182e72492c0317df81d99da3a07c1e192a7 Mon Sep 17 00:00:00 2001 From: Tithen-Firion Date: Sun, 30 Apr 2017 00:52:47 +0200 Subject: [PATCH] [vevo] move authentication to VevoBase now it can be used by playlist extractor --- youtube_dl/extractor/vevo.py | 94 ++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/youtube_dl/extractor/vevo.py b/youtube_dl/extractor/vevo.py index cb2ac19eb..61c7b16d0 100644 --- a/youtube_dl/extractor/vevo.py +++ b/youtube_dl/extractor/vevo.py @@ -24,6 +24,53 @@ class VevoBaseIE(InfoExtractor): webpage, 'initial store'), video_id) + def _initialize_api(self, refresh=False): + data = {'client_id': 'SPupX1tvqFEopQ1YS6SS'} + if refresh: + data.update({ + 'grant_type': 'refresh_token', + 'refresh_token': self._REFRESH_TOKEN, + }) + else: + data['grant_type'] = 'urn:vevo:params:oauth:grant-type:anonymous' + post_data = json.dumps(data).encode('utf-8') + + webpage = self._download_webpage( + 'https://accounts.vevo.com/token', 'token', + data=post_data, headers={'Content-Type': 'application/json'}, + note='Retrieving oauth token', + errnote='Unable to retrieve oauth token') + + if re.search(r'(?i)THIS PAGE IS CURRENTLY UNAVAILABLE IN YOUR REGION', webpage): + self.raise_geo_restricted( + '%s said: This page is currently unavailable in your region' % self.IE_NAME) + + auth_info = self._parse_json(webpage, 'token') + + self._ACCESS_TOKEN = auth_info['legacy_token'] + self._REFRESH_TOKEN = auth_info['refresh_token'] + + def _call_api(self, path, *args, **kwargs): + try: + data = self._download_json( + 'https://apiv2.vevo.com/%s' % path, headers={ + 'Authorization': 'Bearer %s' % self._ACCESS_TOKEN, + }, *args, **kwargs) + except ExtractorError as e: + if isinstance(e.cause, compat_HTTPError): + errors = self._parse_json(e.cause.read().decode(), None)['errors'] + error_messages = [error['message'] for error in errors] + if 'Token is expired' in error_messages: + self._initialize_api(refresh=True) + return self._call_api(path, *args, **kwargs) + else: + error_message = ', '.join(error_messages) + raise ExtractorError( + '%s said: %s' % (self.IE_NAME, error_message), + expected=True) + raise + return data + class VevoIE(VevoBaseIE): ''' @@ -153,53 +200,6 @@ class VevoIE(VevoBaseIE): 4: 'amazon', } - def _initialize_api(self, refresh=False): - data = {'client_id': 'SPupX1tvqFEopQ1YS6SS'} - if refresh: - data.update({ - 'grant_type': 'refresh_token', - 'refresh_token': self._REFRESH_TOKEN, - }) - else: - data['grant_type'] = 'urn:vevo:params:oauth:grant-type:anonymous' - post_data = json.dumps(data).encode('utf-8') - - webpage = self._download_webpage( - 'https://accounts.vevo.com/token', 'token', - data=post_data, headers={'Content-Type': 'application/json'}, - note='Retrieving oauth token', - errnote='Unable to retrieve oauth token') - - if re.search(r'(?i)THIS PAGE IS CURRENTLY UNAVAILABLE IN YOUR REGION', webpage): - self.raise_geo_restricted( - '%s said: This page is currently unavailable in your region' % self.IE_NAME) - - auth_info = self._parse_json(webpage, 'token') - - self._ACCESS_TOKEN = auth_info['legacy_token'] - self._REFRESH_TOKEN = auth_info['refresh_token'] - - def _call_api(self, path, *args, **kwargs): - try: - data = self._download_json( - 'https://apiv2.vevo.com/%s' % path, headers={ - 'Authorization': 'Bearer %s' % self._ACCESS_TOKEN, - }, *args, **kwargs) - except ExtractorError as e: - if isinstance(e.cause, compat_HTTPError): - errors = self._parse_json(e.cause.read().decode(), None)['errors'] - error_messages = [error['message'] for error in errors] - if 'Token is expired' in error_messages: - self._initialize_api(refresh=True) - return self._call_api(path, *args, **kwargs) - else: - error_message = ', '.join(error_messages) - raise ExtractorError( - '%s said: %s' % (self.IE_NAME, error_message), - expected=True) - raise - return data - def _real_extract(self, url): video_id = self._match_id(url)