|
@@ -12,11 +12,12 @@ from ..compat import (
|
|
|
)
|
|
|
from ..utils import (
|
|
|
clean_html,
|
|
|
- unescapeHTML,
|
|
|
+ determine_ext,
|
|
|
ExtractorError,
|
|
|
+ extract_attributes,
|
|
|
int_or_none,
|
|
|
mimetype2ext,
|
|
|
- determine_ext,
|
|
|
+ unescapeHTML,
|
|
|
)
|
|
|
|
|
|
from .brightcove import (
|
|
@@ -278,13 +279,21 @@ class YahooIE(InfoExtractor):
|
|
|
if bc_url:
|
|
|
return self.url_result(bc_url, BrightcoveNewIE.ie_key())
|
|
|
|
|
|
- brightcove_id = self._search_regex(
|
|
|
- r'<iframe[^>]+data-video-id=["\'](\d+)', webpage, 'brightcove id',
|
|
|
- default=None)
|
|
|
- if brightcove_id:
|
|
|
- return self.url_result(
|
|
|
- 'http://players.brightcove.net/2376984109001/default_default/index.html?videoId=%s' % brightcove_id,
|
|
|
- BrightcoveNewIE.ie_key())
|
|
|
+ brightcove_iframe = self._search_regex(
|
|
|
+ r'(<iframe[^>]+data-video-id=["\']\d+[^>]+>)', webpage,
|
|
|
+ 'brightcove iframe', default=None)
|
|
|
+ if brightcove_iframe:
|
|
|
+ attr = extract_attributes(brightcove_iframe)
|
|
|
+ src = attr.get('src')
|
|
|
+ if src:
|
|
|
+ parsed_src = compat_urlparse.urlparse(src)
|
|
|
+ qs = compat_urlparse.parse_qs(parsed_src.query)
|
|
|
+ account_id = qs.get('accountId', ['2376984109001'])[0]
|
|
|
+ brightcove_id = attr.get('data-video-id') or qs.get('videoId', [None])[0]
|
|
|
+ if account_id and brightcove_id:
|
|
|
+ return self.url_result(
|
|
|
+ 'http://players.brightcove.net/%s/default_default/index.html?videoId=%s' % (account_id, brightcove_id),
|
|
|
+ BrightcoveNewIE.ie_key())
|
|
|
|
|
|
# Query result is often embedded in webpage as JSON. Sometimes explicit requests
|
|
|
# to video API results in a failure with geo restriction reason therefore using
|