mirror of
https://github.com/l1ving/youtube-dl
synced 2024-12-22 21:02:51 +08:00
fbaaad49d7
It only accepts the urls that are use for embedding the video, it doesn't search in generic webpages to find Brightcove videos
33 lines
1.3 KiB
Python
33 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'),
|
|
}
|