mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[brightcove] Imrove extraction of new embeds
This commit is contained in:
		| @@ -354,7 +354,7 @@ class BrightcoveIE(InfoExtractor): | |||||||
|  |  | ||||||
|  |  | ||||||
| class BrightcoveInPageEmbedIE(InfoExtractor): | class BrightcoveInPageEmbedIE(InfoExtractor): | ||||||
|     _VALID_URL = r'https?://players\.brightcove\.net/(?P<account_id>\d+)/(?P<player_id>[\da-f-]+)_(?P<embed>[a-z]+)/index\.html\?.*videoId=(?P<video_id>\d+)' |     _VALID_URL = r'https?://players\.brightcove\.net/(?P<account_id>\d+)/(?P<player_id>[^/]+)_(?P<embed>[^/]+)/index\.html\?.*videoId=(?P<video_id>\d+)' | ||||||
|     _TEST = { |     _TEST = { | ||||||
|         'url': 'http://players.brightcove.net/929656772001/e41d32dc-ec74-459e-a845-6c69f7b724ea_default/index.html?videoId=4463358922001', |         'url': 'http://players.brightcove.net/929656772001/e41d32dc-ec74-459e-a845-6c69f7b724ea_default/index.html?videoId=4463358922001', | ||||||
|         'md5': 'c8100925723840d4b0d243f7025703be', |         'md5': 'c8100925723840d4b0d243f7025703be', | ||||||
| @@ -370,18 +370,34 @@ class BrightcoveInPageEmbedIE(InfoExtractor): | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @staticmethod |     def _extract_urls(self, webpage): | ||||||
|     def _extract_url(webpage): |         # Reference: | ||||||
|         video_attributes = re.search(r'(?s)<video([^>]*)>.*?</(?:video|audio)>', webpage) |         # 1. http://docs.brightcove.com/en/video-cloud/brightcove-player/guides/publish-video.html#setvideoiniframe | ||||||
|         if video_attributes: |         # 2. http://docs.brightcove.com/en/video-cloud/brightcove-player/guides/publish-video.html#setvideousingjavascript) | ||||||
|             video_attributes = extract_attributes(video_attributes.group(), r'(?s)\s*data-(account|video-id|playlist-id|policy-key|player|embed)\s*=\s*["\']([^"\']+)["\']') |         # 3. http://docs.brightcove.com/en/video-cloud/brightcove-player/guides/embed-in-page.html | ||||||
|             account_id = video_attributes.get('account') |  | ||||||
|             player_id = video_attributes.get('player') |         entries = [] | ||||||
|             embed = video_attributes.get('embed') |  | ||||||
|             video_id = video_attributes.get('video-id') |         # Look for iframe embeds [1] | ||||||
|             if account_id and player_id and embed and video_id: |         for _, url in re.findall( | ||||||
|                 return 'http://players.brightcove.net/%s/%s_%s/index.html?videoId=%s' % (account_id, player_id, embed, video_id) |                 r'<iframe[^>]+src=(["\'])((?:https?:)//players\.brightcove\.net/\d+/[^/]+/index\.html.+?)\1', webpage): | ||||||
|         return None |             entries.append(self.url_result(self._proto_relative_url(url))) | ||||||
|  |         # Look for embed_in_page embeds [2] | ||||||
|  |         # According to examples from [3] it's unclear whether video id may be optional | ||||||
|  |         # and what to do when it is | ||||||
|  |         for video_id, account_id, player_id, embed in re.findall( | ||||||
|  |                 r'''(?sx) | ||||||
|  |                     <video[^>]+ | ||||||
|  |                         data-video-id=["\'](\d+)["\'][^>]*>.*? | ||||||
|  |                     </video>.*? | ||||||
|  |                     <script[^>]+ | ||||||
|  |                         src=["\'](?:https?:)?//players\.brightcove\.net/ | ||||||
|  |                         (\d+)/([\da-f-]+)_([^/]+)/index\.min\.js | ||||||
|  |                 ''', webpage): | ||||||
|  |             entries.append(self.url_result( | ||||||
|  |                 'http://players.brightcove.net/%s/%s_%s/index.html?videoId=%s' | ||||||
|  |                 % (account_id, player_id, embed, video_id))) | ||||||
|  |         return entries | ||||||
|  |  | ||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
|         account_id, player_id, embed, video_id = re.match(self._VALID_URL, url).groups() |         account_id, player_id, embed, video_id = re.match(self._VALID_URL, url).groups() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․