mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[brightcove:legacy] add another fall back to brightcove:new
This commit is contained in:
		| @@ -1,8 +1,10 @@ | |||||||
| # coding: utf-8 | # coding: utf-8 | ||||||
| from __future__ import unicode_literals | from __future__ import unicode_literals | ||||||
|  |  | ||||||
| import re | import base64 | ||||||
| import json | import json | ||||||
|  | import re | ||||||
|  | import struct | ||||||
|  |  | ||||||
| from .common import InfoExtractor | from .common import InfoExtractor | ||||||
| from .adobepass import AdobePassIE | from .adobepass import AdobePassIE | ||||||
| @@ -310,6 +312,10 @@ class BrightcoveLegacyIE(InfoExtractor): | |||||||
|                 'Cannot find playerKey= variable. Did you forget quotes in a shell invocation?', |                 'Cannot find playerKey= variable. Did you forget quotes in a shell invocation?', | ||||||
|                 expected=True) |                 expected=True) | ||||||
|  |  | ||||||
|  |     def _brightcove_new_url_result(self, publisher_id, video_id): | ||||||
|  |         brightcove_new_url = 'http://players.brightcove.net/%s/default_default/index.html?videoId=%s' % (publisher_id, video_id) | ||||||
|  |         return self.url_result(brightcove_new_url, BrightcoveNewIE.ie_key(), video_id) | ||||||
|  |  | ||||||
|     def _get_video_info(self, video_id, query, referer=None): |     def _get_video_info(self, video_id, query, referer=None): | ||||||
|         headers = {} |         headers = {} | ||||||
|         linkBase = query.get('linkBaseURL') |         linkBase = query.get('linkBaseURL') | ||||||
| @@ -323,6 +329,29 @@ class BrightcoveLegacyIE(InfoExtractor): | |||||||
|             r"<h1>We're sorry.</h1>([\s\n]*<p>.*?</p>)+", webpage, |             r"<h1>We're sorry.</h1>([\s\n]*<p>.*?</p>)+", webpage, | ||||||
|             'error message', default=None) |             'error message', default=None) | ||||||
|         if error_msg is not None: |         if error_msg is not None: | ||||||
|  |             publisher_id = query.get('publisherId') | ||||||
|  |             if publisher_id and publisher_id[0].isdigit(): | ||||||
|  |                 publisher_id = publisher_id[0] | ||||||
|  |             if not publisher_id: | ||||||
|  |                 valid_key = lambda key: key and ',' in key | ||||||
|  |                 player_key = query.get('playerKey') | ||||||
|  |                 if player_key and ',' in player_key[0]: | ||||||
|  |                     player_key = player_key[0] | ||||||
|  |                 else: | ||||||
|  |                     player_id = query.get('playerID') | ||||||
|  |                     if player_id and player_id[0].isdigit(): | ||||||
|  |                         player_page = self._download_webpage( | ||||||
|  |                             'http://link.brightcove.com/services/player/bcpid' + player_id[0], | ||||||
|  |                             video_id, headers=headers, fatal=False) | ||||||
|  |                         if player_page: | ||||||
|  |                             player_key = self._search_regex( | ||||||
|  |                                 r'<param\s+name="playerKey"\s+value="([\w~,-]+)"', | ||||||
|  |                                 player_page, 'player key', fatal=False) | ||||||
|  |                 if player_key: | ||||||
|  |                     enc_pub_id = player_key.split(',')[1].replace('~', '=') | ||||||
|  |                     publisher_id = struct.unpack('>Q', base64.urlsafe_b64decode(enc_pub_id))[0] | ||||||
|  |                 if publisher_id: | ||||||
|  |                     return self._brightcove_new_url_result(publisher_id, video_id) | ||||||
|             raise ExtractorError( |             raise ExtractorError( | ||||||
|                 'brightcove said: %s' % error_msg, expected=True) |                 'brightcove said: %s' % error_msg, expected=True) | ||||||
|  |  | ||||||
| @@ -356,9 +385,7 @@ class BrightcoveLegacyIE(InfoExtractor): | |||||||
|  |  | ||||||
|     def _extract_video_info(self, video_info): |     def _extract_video_info(self, video_info): | ||||||
|         video_id = compat_str(video_info['id']) |         video_id = compat_str(video_info['id']) | ||||||
|  |  | ||||||
|         publisher_id = video_info.get('publisherId') |         publisher_id = video_info.get('publisherId') | ||||||
|  |  | ||||||
|         info = { |         info = { | ||||||
|             'id': video_id, |             'id': video_id, | ||||||
|             'title': video_info['displayName'].strip(), |             'title': video_info['displayName'].strip(), | ||||||
| @@ -449,11 +476,7 @@ class BrightcoveLegacyIE(InfoExtractor): | |||||||
|         if not info.get('url') and not info.get('formats'): |         if not info.get('url') and not info.get('formats'): | ||||||
|             uploader_id = info.get('uploader_id') |             uploader_id = info.get('uploader_id') | ||||||
|             if uploader_id: |             if uploader_id: | ||||||
|                 info.update({ |                 info.update(self._brightcove_new_url_result(uploader_id, video_id)) | ||||||
|                     '_type': 'url', |  | ||||||
|                     'url': 'http://players.brightcove.net/%s/default_default/index.html?videoId=%s' % (uploader_id, video_id), |  | ||||||
|                     'ie_key': BrightcoveNewIE.ie_key(), |  | ||||||
|                 }) |  | ||||||
|             else: |             else: | ||||||
|                 raise ExtractorError('Unable to extract video url for %s' % video_id) |                 raise ExtractorError('Unable to extract video url for %s' % video_id) | ||||||
|         return info |         return info | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Remita Amine
					Remita Amine