- mobj = re.search(r"jsclassref ?= ?'([^']*)'", webpage)
- if mobj is None:
- raise ExtractorError(u'Unable to extract video url')
- real_id = compat_urllib_parse.unquote(base64.b64decode(mobj.group(1).encode('ascii')).decode('utf-8'))
- video_url = 'rtmpe://video.infoq.com/cfx/st/' + real_id
+ encoded_id = self._search_regex(
+ r"jsclassref\s*=\s*'([^']*)'", webpage, 'encoded id', default=None)
+
+ real_id = compat_urllib_parse_unquote(base64.b64decode(encoded_id.encode('ascii')).decode('utf-8'))
+ playpath = 'mp4:' + real_id
+
+ return [{
+ 'format_id': 'rtmp_video',
+ 'url': video_url,
+ 'ext': determine_ext(playpath),
+ 'play_path': playpath,
+ }]
+
+ def _extract_cookies(self, webpage):
+ policy = self._search_regex(r'InfoQConstants.scp\s*=\s*\'([^\']+)\'', webpage, 'policy')
+ signature = self._search_regex(r'InfoQConstants.scs\s*=\s*\'([^\']+)\'', webpage, 'signature')
+ key_pair_id = self._search_regex(r'InfoQConstants.sck\s*=\s*\'([^\']+)\'', webpage, 'key-pair-id')
+ return 'CloudFront-Policy=%s; CloudFront-Signature=%s; CloudFront-Key-Pair-Id=%s' % (
+ policy, signature, key_pair_id)
+
+ def _extract_http_video(self, webpage):
+ http_video_url = self._search_regex(r'P\.s\s*=\s*\'([^\']+)\'', webpage, 'video URL')
+ return [{
+ 'format_id': 'http_video',
+ 'url': http_video_url,
+ 'http_headers': {
+ 'Cookie': self._extract_cookies(webpage)
+ },
+ }]