fbaaad49d7
It only accepts the urls that are use for embedding the video, it doesn't search in generic webpages to find Brightcove videos
32 lines
1.3 KiB
Python
32 lines
1.3 KiB
Python
import re
|
|
import json
|
|
|
|
from .common import InfoExtractor
|
|
|
|
class BrightcoveIE(InfoExtractor):
|
|
_VALID_URL = r'http://.*brightcove\.com/.*\?(?P<query>.*videoPlayer=(?P<id>\d*).*)'
|
|
|
|
def _real_extract(self, url):
|
|
mobj = re.match(self._VALID_URL, url)
|
|
query = mobj.group('query')
|
|
video_id = mobj.group('id')
|
|
|
|
request_url = 'http://c.brightcove.com/services/viewer/htmlFederated?%s' % query
|
|
webpage = self._download_webpage(request_url, video_id)
|
|
|
|
self.report_extraction(video_id)
|
|
info = self._search_regex(r'var experienceJSON = ({.*?});', webpage, 'json')
|
|
info = json.loads(info)['data']
|
|
video_info = info['programmedContent']['videoPlayer']['mediaDTO']
|
|
renditions = video_info['renditions']
|
|
renditions = sorted(renditions, key=lambda r: r['size'])
|
|
best_format = renditions[-1]
|
|
|
|
return {'id': video_id,
|
|
'title': video_info['displayName'],
|
|
'url': best_format['defaultURL'],
|
|
'ext': 'mp4',
|
|
'description': video_info.get('shortDescription'),
|
|
'thumbnail': video_info.get('videoStillURL') or video_info.get('thumbnailURL'),
|
|
'uploader': video_info.get('publisherName'),
|
|
}
|