mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-21 20:46:36 -05:00
[brightcove] Validate ambiguous embeds' URLs (closes #9163, closes #12005, closes #12178, closes #12480)
This commit is contained in:
parent
40158f55c9
commit
0254f93b08
2 changed files with 33 additions and 24 deletions
|
@ -489,7 +489,7 @@ def _extract_url(webpage):
|
||||||
return urls[0] if urls else None
|
return urls[0] if urls else None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _extract_urls(webpage):
|
def _extract_urls(ie, webpage):
|
||||||
# Reference:
|
# Reference:
|
||||||
# 1. http://docs.brightcove.com/en/video-cloud/brightcove-player/guides/publish-video.html#setvideoiniframe
|
# 1. http://docs.brightcove.com/en/video-cloud/brightcove-player/guides/publish-video.html#setvideoiniframe
|
||||||
# 2. http://docs.brightcove.com/en/video-cloud/brightcove-player/guides/publish-video.html#tag
|
# 2. http://docs.brightcove.com/en/video-cloud/brightcove-player/guides/publish-video.html#tag
|
||||||
|
@ -506,37 +506,46 @@ def _extract_urls(webpage):
|
||||||
|
|
||||||
# Look for <video> tags [2] and embed_in_page embeds [3]
|
# Look for <video> tags [2] and embed_in_page embeds [3]
|
||||||
# [2] looks like:
|
# [2] looks like:
|
||||||
# <video data-video-id="5320421710001" data-account="245991542" data-player="SJWAiyYWg" data-embed="default" class="video-js" controls itemscope itemtype="http://schema.org/VideoObject">
|
|
||||||
|
|
||||||
for video, script_tag, account_id, player_id, embed in re.findall(
|
for video, script_tag, account_id, player_id, embed in re.findall(
|
||||||
r'''(?isx)
|
r'''(?isx)
|
||||||
(<video[^>]+>)
|
(<video\s+[^>]+>)
|
||||||
(?:.*?
|
(?:.*?
|
||||||
(<script[^>]+
|
(<script[^>]+
|
||||||
src=["\'](?:https?:)?//players\.brightcove\.net/
|
src=["\'](?:https?:)?//players\.brightcove\.net/
|
||||||
(\d+)/([^/]+)_([^/]+)/index(?:\.min)?\.js
|
(\d+)/([^/]+)_([^/]+)/index(?:\.min)?\.js
|
||||||
)
|
)
|
||||||
)?
|
)?
|
||||||
''', webpage
|
''', webpage):
|
||||||
):
|
|
||||||
attrs = extract_attributes(video)
|
attrs = extract_attributes(video)
|
||||||
|
|
||||||
# According to examples from [4] it's unclear whether video id
|
# According to examples from [4] it's unclear whether video id
|
||||||
# may be optional and what to do when it is
|
# may be optional and what to do when it is
|
||||||
video_id = attrs.get('data-video-id')
|
video_id = attrs.get('data-video-id')
|
||||||
# See PR#12099/bostonglobe.py for 'data-brightcove-video-id' variant
|
if not video_id:
|
||||||
|
continue
|
||||||
|
|
||||||
|
account_id = account_id or attrs.get('data-account')
|
||||||
if not account_id:
|
if not account_id:
|
||||||
account_id = attrs.get('data-account')
|
continue
|
||||||
if not player_id:
|
|
||||||
player_id = attrs.get('data-player')
|
|
||||||
if not embed:
|
|
||||||
embed = attrs.get('data-embed')
|
|
||||||
|
|
||||||
if video_id and account_id and player_id and embed:
|
player_id = player_id or attrs.get('data-player') or 'default'
|
||||||
entries.append(
|
embed = embed or attrs.get('data-embed') or 'default'
|
||||||
'http://players.brightcove.net/%s/%s_%s/index.html?videoId=%s'
|
|
||||||
% (account_id, player_id, embed, video_id))
|
bc_url = 'http://players.brightcove.net/%s/%s_%s/index.html?videoId=%s' % (
|
||||||
|
account_id, player_id, embed, video_id)
|
||||||
|
|
||||||
|
# Some brightcove videos may be embedded with video tag only and
|
||||||
|
# without script tag or any mentioning of brightcove at all. Such
|
||||||
|
# embeds are considered ambiguous since they are matched based only
|
||||||
|
# on data-video-id and data-account attributes and in the wild may
|
||||||
|
# not be brightcove embeds at all. Let's check reconstructed
|
||||||
|
# brightcove URLs in case of such embeds and only process valid
|
||||||
|
# ones. By this we ensure there is indeed a brightcove embed.
|
||||||
|
if not script_tag and not ie._is_valid_url(
|
||||||
|
bc_url, video_id, 'possible brightcove video'):
|
||||||
|
continue
|
||||||
|
|
||||||
|
entries.append(bc_url)
|
||||||
|
|
||||||
return entries
|
return entries
|
||||||
|
|
||||||
|
|
|
@ -1967,7 +1967,7 @@ def _real_extract(self, url):
|
||||||
}
|
}
|
||||||
|
|
||||||
# Look for Brightcove New Studio embeds
|
# Look for Brightcove New Studio embeds
|
||||||
bc_urls = BrightcoveNewIE._extract_urls(webpage)
|
bc_urls = BrightcoveNewIE._extract_urls(self, webpage)
|
||||||
if bc_urls:
|
if bc_urls:
|
||||||
return self.playlist_from_matches(bc_urls, video_id, video_title, ie='BrightcoveNew')
|
return self.playlist_from_matches(bc_urls, video_id, video_title, ie='BrightcoveNew')
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue