+ }, {
+ 'url': 'https://www.infoq.com/presentations/Simple-Made-Easy',
+ 'md5': '0e34642d4d9ef44bf86f66f6399672db',
+ 'info_dict': {
+ 'id': 'Simple-Made-Easy',
+ 'title': 'Simple Made Easy',
+ 'ext': 'mp3',
+ 'description': 'md5:3e0e213a8bbd074796ef89ea35ada25b',
+ },
+ 'params': {
+ 'format': 'bestaudio',
+ },
+ }]
+
+ def _extract_rtmp_video(self, webpage):
+ # The server URL is hardcoded
+ video_url = 'rtmpe://video.infoq.com/cfx/st/'
+
+ # Extract video URL
+ 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_cf_auth(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 {
+ 'Policy': policy,
+ 'Signature': signature,
+ 'Key-Pair-Id': key_pair_id,