mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	| @@ -1,8 +1,6 @@ | |||||||
| # coding: utf-8 | # coding: utf-8 | ||||||
| from __future__ import unicode_literals | from __future__ import unicode_literals | ||||||
|  |  | ||||||
| import re |  | ||||||
|  |  | ||||||
| from .common import InfoExtractor | from .common import InfoExtractor | ||||||
| from ..compat import ( | from ..compat import ( | ||||||
|     compat_HTTPError, |     compat_HTTPError, | ||||||
| @@ -18,7 +16,6 @@ from ..utils import ( | |||||||
|  |  | ||||||
| class RoosterTeethIE(InfoExtractor): | class RoosterTeethIE(InfoExtractor): | ||||||
|     _VALID_URL = r'https?://(?:.+?\.)?roosterteeth\.com/(?:episode|watch)/(?P<id>[^/?#&]+)' |     _VALID_URL = r'https?://(?:.+?\.)?roosterteeth\.com/(?:episode|watch)/(?P<id>[^/?#&]+)' | ||||||
|     _LOGIN_URL = 'https://roosterteeth.com/login' |  | ||||||
|     _NETRC_MACHINE = 'roosterteeth' |     _NETRC_MACHINE = 'roosterteeth' | ||||||
|     _TESTS = [{ |     _TESTS = [{ | ||||||
|         'url': 'http://roosterteeth.com/episode/million-dollars-but-season-2-million-dollars-but-the-game-announcement', |         'url': 'http://roosterteeth.com/episode/million-dollars-but-season-2-million-dollars-but-the-game-announcement', | ||||||
| @@ -53,48 +50,40 @@ class RoosterTeethIE(InfoExtractor): | |||||||
|         'url': 'https://roosterteeth.com/watch/million-dollars-but-season-2-million-dollars-but-the-game-announcement', |         'url': 'https://roosterteeth.com/watch/million-dollars-but-season-2-million-dollars-but-the-game-announcement', | ||||||
|         'only_matching': True, |         'only_matching': True, | ||||||
|     }] |     }] | ||||||
|  |     _EPISODE_BASE_URL = 'https://svod-be.roosterteeth.com/api/v1/episodes/' | ||||||
|  |  | ||||||
|     def _login(self): |     def _login(self): | ||||||
|         username, password = self._get_login_info() |         username, password = self._get_login_info() | ||||||
|         if username is None: |         if username is None: | ||||||
|             return |             return | ||||||
|  |  | ||||||
|         login_page = self._download_webpage( |         try: | ||||||
|             self._LOGIN_URL, None, |             self._download_json( | ||||||
|             note='Downloading login page', |                 'https://auth.roosterteeth.com/oauth/token', | ||||||
|             errnote='Unable to download login page') |                 None, 'Logging in', data=urlencode_postdata({ | ||||||
|  |                     'client_id': '4338d2b4bdc8db1239360f28e72f0d9ddb1fd01e7a38fbb07b4b1f4ba4564cc5', | ||||||
|         login_form = self._hidden_inputs(login_page) |                     'grant_type': 'password', | ||||||
|  |                     'username': username, | ||||||
|         login_form.update({ |                     'password': password, | ||||||
|             'username': username, |                 })) | ||||||
|             'password': password, |         except ExtractorError as e: | ||||||
|         }) |             msg = 'Unable to login' | ||||||
|  |             if isinstance(e.cause, compat_HTTPError) and e.cause.code == 401: | ||||||
|         login_request = self._download_webpage( |                 resp = self._parse_json(e.cause.read().decode(), None, fatal=False) | ||||||
|             self._LOGIN_URL, None, |                 if resp: | ||||||
|             note='Logging in', |                     error = resp.get('extra_info') or resp.get('error_description') or resp.get('error') | ||||||
|             data=urlencode_postdata(login_form), |                     if error: | ||||||
|             headers={ |                         msg += ': ' + error | ||||||
|                 'Referer': self._LOGIN_URL, |             self.report_warning(msg) | ||||||
|             }) |  | ||||||
|  |  | ||||||
|         if not any(re.search(p, login_request) for p in ( |  | ||||||
|                 r'href=["\']https?://(?:www\.)?roosterteeth\.com/logout"', |  | ||||||
|                 r'>Sign Out<')): |  | ||||||
|             error = self._html_search_regex( |  | ||||||
|                 r'(?s)<div[^>]+class=(["\']).*?\balert-danger\b.*?\1[^>]*>(?:\s*<button[^>]*>.*?</button>)?(?P<error>.+?)</div>', |  | ||||||
|                 login_request, 'alert', default=None, group='error') |  | ||||||
|             if error: |  | ||||||
|                 raise ExtractorError('Unable to login: %s' % error, expected=True) |  | ||||||
|             raise ExtractorError('Unable to log in') |  | ||||||
|  |  | ||||||
|     def _real_initialize(self): |     def _real_initialize(self): | ||||||
|  |         if self._get_cookies(self._EPISODE_BASE_URL).get('rt_access_token'): | ||||||
|  |             return | ||||||
|         self._login() |         self._login() | ||||||
|  |  | ||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
|         display_id = self._match_id(url) |         display_id = self._match_id(url) | ||||||
|         api_episode_url = 'https://svod-be.roosterteeth.com/api/v1/episodes/%s' % display_id |         api_episode_url = self._EPISODE_BASE_URL + display_id | ||||||
|  |  | ||||||
|         try: |         try: | ||||||
|             m3u8_url = self._download_json( |             m3u8_url = self._download_json( | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user