from __future__ import unicode_literals from urllib.parse import parse_qs from .common import InfoExtractor from ..compat import ( compat_urlparse, ) from ..utils import ( try_get, ExtractorError, ) class RtmpIE(InfoExtractor): IE_DESC = False # Do not list _VALID_URL = r'(?i)rtmp[est]?://.+' _TESTS = [{ 'url': 'rtmp://cp44293.edgefcs.net/ondemand?auth=daEcTdydfdqcsb8cZcDbAaCbhamacbbawaS-bw7dBb-bWG-GqpGFqCpNCnGoyL&aifp=v001&slist=public/unsecure/audio/2c97899446428e4301471a8cb72b4b97--audio--pmg-20110908-0900a_flv_aac_med_int.mp4', 'only_matching': True, }, { 'url': 'rtmp://edge.live.hitbox.tv/live/dimak', 'only_matching': True, }] def _real_extract(self, url): video_id = self._generic_id(url) title = self._generic_title(url) return { 'id': video_id, 'title': title, 'formats': [{ 'url': url, 'ext': 'flv', 'format_id': compat_urlparse.urlparse(url).scheme, }], } class MmsIE(InfoExtractor): IE_DESC = False # Do not list _VALID_URL = r'(?i)mms://.+' _TEST = { # Direct MMS link 'url': 'mms://kentro.kaist.ac.kr/200907/MilesReid(0709).wmv', 'info_dict': { 'id': 'MilesReid(0709)', 'ext': 'wmv', 'title': 'MilesReid(0709)', }, 'params': { 'skip_download': True, # rtsp downloads, requiring mplayer or mpv }, } def _real_extract(self, url): video_id = self._generic_id(url) title = self._generic_title(url) return { 'id': video_id, 'title': title, 'url': url, } class BitTorrentMagnetIE(InfoExtractor): IE_DESC = False _VALID_URL = r'(?i)magnet:\?.+' _TESTS = [{ 'url': 'magnet:?xs=https%3A%2F%2Fvideo.internet-czas-dzialac.pl%2Fstatic%2Ftorrents%2F9085aa69-90c2-40c6-a707-3472b92cafc8-0.torrent&xt=urn:btih:0ae4cc8cb0e098a1a40b3224aa578bb4210a8cff&dn=Podcast+Internet.+Czas+dzia%C5%82a%C4%87!+-+Trailer&tr=wss%3A%2F%2Fvideo.internet-czas-dzialac.pl%3A443%2Ftracker%2Fsocket&tr=https%3A%2F%2Fvideo.internet-czas-dzialac.pl%2Ftracker%2Fannounce&ws=https%3A%2F%2Fvideo.internet-czas-dzialac.pl%2Fstatic%2Fwebseed%2F9085aa69-90c2-40c6-a707-3472b92cafc8-0.mp4', 'info_dict': { 'id': 'urn:btih:0ae4cc8cb0e098a1a40b3224aa578bb4210a8cff', 'ext': 'torrent', 'title': 'Podcast Internet. Czas działać! - Trailer', }, 'params': { 'allow_p2p': True, 'prefer_p2p': True, 'skip_download': True, }, }] def _real_extract(self, url): qs = parse_qs(url[len('magnet:?'):]) # eXact Topic video_id = qs['xt'][0] if not video_id.startswith('urn:btih:'): raise ExtractorError('Not a BitTorrent magnet') # Display Name title = try_get(qs, lambda x: x['dn'][0], str) or video_id[len('urn:btih:'):] formats = [{ 'url': url, 'protocol': 'bittorrent', }] # Web Seed if qs.get('ws'): for ws in qs['ws']: formats.append({ 'url': ws, }) # Acceptable Source if qs.get('as'): for as_ in qs['as']: formats.append({ 'url': as_, 'preference': -2, }) # eXact Source if qs.get('xs'): for xs in qs['xs']: formats.append({ 'url': xs, 'protocol': 'bittorrent', }) self._sort_formats(formats) # eXact Length if qs.get('xl'): xl = int(qs['xl'][0]) for i in range(0, len(formats)): formats[i]['filesize'] = xl return { 'id': video_id, 'title': title, 'formats': formats, }