135 lines
4 KiB
Python
135 lines
4 KiB
Python
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,
|
|
}
|