1
0
mirror of https://github.com/l1ving/youtube-dl synced 2025-03-13 06:37:14 +08:00
2019-02-19 22:35:42 +01:00

98 lines
3.4 KiB
Python

# coding: utf-8
from __future__ import unicode_literals
from .common import InfoExtractor
from ..utils import (js_to_json)
class NxLoadIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?nxload\.com/(?:embed-)?(?P<id>\w+)'
_TESTS = [
{
'url': 'https://nxload.com/embed-w9uwujpk2na7.html',
'md5': '955afd4f8f2c019bc4f116897346e3f9',
'info_dict': {
'id': 'w9uwujpk2na7',
'ext': 'mp4',
'title': 'pso firstman web 1080p mkv',
'thumbnail': 're:^https://\w+.nxload.com/i/\d{2}/\d{5}/\w+.jpg$',
'url': 're:^https://\w+.nxload.com/[,\w]+/v.mp4$'
}
},
{
'url': 'https://nxload.com/qhwxcxj5ah56.html',
'md5': '983814ba610cd26ddd0819cd6d26ab68',
'info_dict': {
'id': 'qhwxcxj5ah56',
'ext': 'mp4',
'title': 'pso kkk 1080p mkv',
'thumbnail': 're:^https://\w+.nxload.com/i/\d{2}/\d{5}/\w+.jpg',
'url': 're:^https://\w+.nxload.com/[,\w]+/v.mp4$'
}
},
{
'url': 'https://nxload.com/embed-ig0ud2p3h57l.html',
'md5': 'ab3a79c831fccfd8a34c77775082c694',
'info_dict': {
'id': 'ig0ud2p3h57l',
'ext': 'mp4',
'title': 'streams org Noragami S1E01 German DTS 1080p Blu Ray x264 mkv',
'thumbnail': 're:^https://\w+.nxload.com/i/\d{2}/\d{5}/\w+.jpg',
'url': 're:^https://\w+.nxload.com/[,\w]+/v.mp4$'
}
}
]
def _real_extract(self, url):
video_id = self._match_id(url)
webpage = self._download_webpage('https://nxload.com/' + video_id, video_id)
title = self._html_search_regex(r'<title>Watch ([^<]+)</title>', webpage, 'title', '')
alt_title = self._html_search_regex(r'<div class="filename">([^<]+)', webpage, 'title', video_id)
title = title or alt_title
json = self._search_regex(r'new Clappr\.Player\(((?:.|\s)+?})\);', webpage, u'video URL').replace('function() { }', '0').replace('3*1024*1024', '3145728')
jsonObj = self._parse_json(json, video_id, transform_source=js_to_json)
self.report_extraction(video_id)
sources = jsonObj.get('sources')
labels = jsonObj.get('levelSelectorConfig').get('labels')
manifest_url = sources[0]
formats = [
{
'url': sources[1],
'format_id': labels.get('1'),
'width': 1920,
'height': 1080
},
{
'url': sources[2],
'format_id': labels.get('0'),
'width': 1280,
'height': 720,
'quality': -2
}
]
self._sort_formats(formats)
thumbnail = jsonObj.get('poster')
subtitles = {}
for subtitle in jsonObj.get('playback').get('externalTracks'):
label = subtitle.get('label')
url = subtitle.get('src')
if label != 'Upload SRT':
subtitles[label] = [{'url': url}]
return {
'id': video_id,
'formats': formats,
'manifest_url': manifest_url,
'title': title,
'alt_title': alt_title,
'thumbnail': thumbnail,
'subtitles': subtitles
}