mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 08:57:08 -05: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