[eagleplatform] Add support for referrer protected videos (closes #13557)
This commit is contained in:
		| @@ -11,6 +11,7 @@ from ..compat import ( | ||||
| from ..utils import ( | ||||
|     ExtractorError, | ||||
|     int_or_none, | ||||
|     unsmuggle_url, | ||||
| ) | ||||
|  | ||||
|  | ||||
| @@ -50,6 +51,10 @@ class EaglePlatformIE(InfoExtractor): | ||||
|             'view_count': int, | ||||
|         }, | ||||
|         'skip': 'Georestricted', | ||||
|     }, { | ||||
|         # referrer protected video (https://tvrain.ru/lite/teleshow/kak_vse_nachinalos/namin-418921/) | ||||
|         'url': 'tvrainru.media.eagleplatform.com:582306', | ||||
|         'only_matching': True, | ||||
|     }] | ||||
|  | ||||
|     @staticmethod | ||||
| @@ -103,9 +108,10 @@ class EaglePlatformIE(InfoExtractor): | ||||
|         if status != 200: | ||||
|             raise ExtractorError(' '.join(response['errors']), expected=True) | ||||
|  | ||||
|     def _download_json(self, url_or_request, video_id, note='Downloading JSON metadata', *args, **kwargs): | ||||
|     def _download_json(self, url_or_request, video_id, *args, **kwargs): | ||||
|         try: | ||||
|             response = super(EaglePlatformIE, self)._download_json(url_or_request, video_id, note) | ||||
|             response = super(EaglePlatformIE, self)._download_json( | ||||
|                 url_or_request, video_id, *args, **kwargs) | ||||
|         except ExtractorError as ee: | ||||
|             if isinstance(ee.cause, compat_HTTPError): | ||||
|                 response = self._parse_json(ee.cause.read().decode('utf-8'), video_id) | ||||
| @@ -117,11 +123,24 @@ class EaglePlatformIE(InfoExtractor): | ||||
|         return self._download_json(url_or_request, video_id, note)['data'][0] | ||||
|  | ||||
|     def _real_extract(self, url): | ||||
|         url, smuggled_data = unsmuggle_url(url, {}) | ||||
|  | ||||
|         mobj = re.match(self._VALID_URL, url) | ||||
|         host, video_id = mobj.group('custom_host') or mobj.group('host'), mobj.group('id') | ||||
|  | ||||
|         headers = {} | ||||
|         query = { | ||||
|             'id': video_id, | ||||
|         } | ||||
|  | ||||
|         referrer = smuggled_data.get('referrer') | ||||
|         if referrer: | ||||
|             headers['Referer'] = referrer | ||||
|             query['referrer'] = referrer | ||||
|  | ||||
|         player_data = self._download_json( | ||||
|             'http://%s/api/player_data?id=%s' % (host, video_id), video_id) | ||||
|             'http://%s/api/player_data' % host, video_id, | ||||
|             headers=headers, query=query) | ||||
|  | ||||
|         media = player_data['data']['playlist']['viewports'][0]['medialist'][0] | ||||
|  | ||||
|   | ||||
| @@ -1185,7 +1185,7 @@ class GenericIE(InfoExtractor): | ||||
|             }, | ||||
|             'add_ie': ['Kaltura'], | ||||
|         }, | ||||
|         # Eagle.Platform embed (generic URL) | ||||
|         # EaglePlatform embed (generic URL) | ||||
|         { | ||||
|             'url': 'http://lenta.ru/news/2015/03/06/navalny/', | ||||
|             # Not checking MD5 as sometimes the direct HTTP link results in 404 and HLS is used | ||||
| @@ -1200,7 +1200,7 @@ class GenericIE(InfoExtractor): | ||||
|                 'age_limit': 0, | ||||
|             }, | ||||
|         }, | ||||
|         # ClipYou (Eagle.Platform) embed (custom URL) | ||||
|         # ClipYou (EaglePlatform) embed (custom URL) | ||||
|         { | ||||
|             'url': 'http://muz-tv.ru/play/7129/', | ||||
|             # Not checking MD5 as sometimes the direct HTTP link results in 404 and HLS is used | ||||
| @@ -2443,12 +2443,12 @@ class GenericIE(InfoExtractor): | ||||
|         if kaltura_url: | ||||
|             return self.url_result(smuggle_url(kaltura_url, {'source_url': url}), KalturaIE.ie_key()) | ||||
|  | ||||
|         # Look for Eagle.Platform embeds | ||||
|         # Look for EaglePlatform embeds | ||||
|         eagleplatform_url = EaglePlatformIE._extract_url(webpage) | ||||
|         if eagleplatform_url: | ||||
|             return self.url_result(eagleplatform_url, EaglePlatformIE.ie_key()) | ||||
|             return self.url_result(smuggle_url(eagleplatform_url, {'referrer': url}), EaglePlatformIE.ie_key()) | ||||
|  | ||||
|         # Look for ClipYou (uses Eagle.Platform) embeds | ||||
|         # Look for ClipYou (uses EaglePlatform) embeds | ||||
|         mobj = re.search( | ||||
|             r'<iframe[^>]+src="https?://(?P<host>media\.clipyou\.ru)/index/player\?.*\brecord_id=(?P<id>\d+).*"', webpage) | ||||
|         if mobj is not None: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user