Use original Referer URL in Brightcove requests (Fixes #2110)

This commit is contained in:
Philipp Hagemeister 2014-01-07 05:34:14 +01:00
parent 400e58103d
commit 79f8295303
3 changed files with 11 additions and 6 deletions

View file

@ -14,6 +14,7 @@ from ..utils import (
compat_urllib_request, compat_urllib_request,
ExtractorError, ExtractorError,
unsmuggle_url,
) )
@ -121,6 +122,8 @@ class BrightcoveIE(InfoExtractor):
return None return None
def _real_extract(self, url): def _real_extract(self, url):
url, smuggled_data = unsmuggle_url(url, {})
# Change the 'videoId' and others field to '@videoPlayer' # Change the 'videoId' and others field to '@videoPlayer'
url = re.sub(r'(?<=[?&])(videoI(d|D)|bctid)', '%40videoPlayer', url) url = re.sub(r'(?<=[?&])(videoI(d|D)|bctid)', '%40videoPlayer', url)
# Change bckey (used by bcove.me urls) to playerKey # Change bckey (used by bcove.me urls) to playerKey
@ -131,9 +134,10 @@ class BrightcoveIE(InfoExtractor):
videoPlayer = query.get('@videoPlayer') videoPlayer = query.get('@videoPlayer')
if videoPlayer: if videoPlayer:
return self._get_video_info(videoPlayer[0], query_str, query,
# We set the original url as the default 'Referer' header # We set the original url as the default 'Referer' header
referer=url) referer = smuggled_data.get('Referer', url)
return self._get_video_info(
videoPlayer[0], query_str, query, referer=referer)
else: else:
player_key = query['playerKey'] player_key = query['playerKey']
return self._get_playlist_info(player_key[0]) return self._get_playlist_info(player_key[0])

View file

@ -225,7 +225,8 @@ class GenericIE(InfoExtractor):
bc_url = BrightcoveIE._extract_brightcove_url(webpage) bc_url = BrightcoveIE._extract_brightcove_url(webpage)
if bc_url is not None: if bc_url is not None:
self.to_screen('Brightcove video detected.') self.to_screen('Brightcove video detected.')
return self.url_result(bc_url, 'Brightcove') surl = smuggle_url(bc_url, {'Referer': url})
return self.url_result(surl, 'Brightcove')
# Look for embedded (iframe) Vimeo player # Look for embedded (iframe) Vimeo player
mobj = re.search( mobj = re.search(

View file

@ -1027,9 +1027,9 @@ def smuggle_url(url, data):
return url + u'#' + sdata return url + u'#' + sdata
def unsmuggle_url(smug_url): def unsmuggle_url(smug_url, default=None):
if not '#__youtubedl_smuggle' in smug_url: if not '#__youtubedl_smuggle' in smug_url:
return smug_url, None return smug_url, default
url, _, sdata = smug_url.rpartition(u'#') url, _, sdata = smug_url.rpartition(u'#')
jsond = compat_parse_qs(sdata)[u'__youtubedl_smuggle'][0] jsond = compat_parse_qs(sdata)[u'__youtubedl_smuggle'][0]
data = json.loads(jsond) data = json.loads(jsond)