From 05a0e8fb1e187aacb8444bed0ed71aaf00a8b4a4 Mon Sep 17 00:00:00 2001 From: Loknar Date: Tue, 12 Sep 2017 23:31:37 +0000 Subject: [PATCH] fixes make parameters like uploader optional if not available implement djivideos extractor change skypixel extractor so it uses djivideos as a generic embed --- youtube_dl/extractor/djivideos.py | 59 ++++++++++++++++++++++++++++++ youtube_dl/extractor/extractors.py | 1 + youtube_dl/extractor/skypixel.py | 43 ++++++++-------------- 3 files changed, 75 insertions(+), 28 deletions(-) create mode 100644 youtube_dl/extractor/djivideos.py diff --git a/youtube_dl/extractor/djivideos.py b/youtube_dl/extractor/djivideos.py new file mode 100644 index 000000000..d2eb582da --- /dev/null +++ b/youtube_dl/extractor/djivideos.py @@ -0,0 +1,59 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor + + +class DJIVideosIE(InfoExtractor): + """InfoExtractor for djivideos.com""" + + _VALID_URL = r'https?://(?:www\.)?djivideos\.com/video_play/(?P[^&#]+)' + _TESTS = [ + { + 'url': 'https://www.djivideos.com/video_play/3d844cad-c722-4fdb-a270-a588d2ff6245', + 'info_dict': { + 'id': '3d844cad-c722-4fdb-a270-a588d2ff6245', + # 'md5': 'b7d012bfd1a9a3bb5dbe0a3e32e48d28', + 'ext': 'mp4', + 'title': 'djivideos-3d844cad-c722-4fdb-a270-a588d2ff6245', + 'thumbnail': 'http://dn-djidl2.qbox.me/cloud/c89382b0b8dc75ea9f07354e098e0971/2.jpg', + } + }, + { + 'url': 'https://www.djivideos.com/video_play/02a59336-89bc-43f1-920d-40b24d96407a', + 'info_dict': { + 'id': '02a59336-89bc-43f1-920d-40b24d96407a', + # 'md5': '7b2edcf58ddd0d14ef08bd73f8630929', + 'ext': 'mp4', + 'title': 'djivideos-02a59336-89bc-43f1-920d-40b24d96407a', + 'thumbnail': 'http://dn-djidl2.qbox.me/cloud/3c1a3aea1bdc042362a36ed482edb3ae/2.jpg', + } + } + ] + + def _real_extract(self, url): + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) + title = 'djivideos-%s' % (video_id, ) + video_definitions_json = self._simple_search_between( + webpage, u'JSON.parse(\'', u'\');') + assert(video_definitions_json is not None) + video_definitions = self._parse_json(video_definitions_json, video_id) + video_url = video_definitions[-1]['src'] + video_url_params = video_url.find('?sign=') + if video_url_params != -1: + video_url = video_url[:video_url_params] + thumbnail = self._simple_search_between( + webpage, u'poster: "', u'",') + if thumbnail is not None: + url_params = thumbnail.find('?sign=') + if url_params != -1: + thumbnail = thumbnail[:url_params] + + return { + 'id': video_id, + 'url': video_url, + 'ext': 'mp4', + 'title': title, + 'thumbnail': thumbnail, + } diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index 936243e7a..2c1895428 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -291,6 +291,7 @@ from .discoverynetworks import DiscoveryNetworksDeIE from .discoveryvr import DiscoveryVRIE from .disney import DisneyIE from .dispeak import DigitallySpeakingIE +from .djivideos import DJIVideosIE from .dropbox import DropboxIE from .dw import ( DWIE, diff --git a/youtube_dl/extractor/skypixel.py b/youtube_dl/extractor/skypixel.py index 4b54f3bd7..b7c3095f2 100644 --- a/youtube_dl/extractor/skypixel.py +++ b/youtube_dl/extractor/skypixel.py @@ -5,35 +5,33 @@ from .common import InfoExtractor class SkypixelIE(InfoExtractor): - """InfoExtractor for Skypixel.com""" + """InfoExtractor for skypixel.com (generic embed for djivideos)""" _VALID_URL = r'https?://(?:www\.)?skypixel\.com/share/video/(?P[^&#]+)' _TESTS = [ { 'url': 'https://skypixel.com/share/video/check-out-my-latest-artwork-4f90b8ac-e7c3-4ed8-82c2-203addfd629e', 'info_dict': { - 'id': 'check-out-my-latest-artwork-4f90b8ac-e7c3-4ed8-82c2-203addfd629e', + 'id': '3d844cad-c722-4fdb-a270-a588d2ff6245', + 'url': 'http://dn-djidl2.qbox.me/cloud/c89382b0b8dc75ea9f07354e098e0971/720.mp4', 'ext': 'mp4', 'title': 'Check out my latest artwork!', 'uploader': 'Alby98', - 'thumbnail': 'http://dn-djidl2.qbox.me/cloud/c89382b0b8dc75ea9f07354e098e0971/2.jpg', }, 'params': { - 'noplaylist': True, 'skip_download': True, } }, { 'url': 'https://www.skypixel.com/share/video/undirfellsrett-i-vatnsdal-8-9-2017', 'info_dict': { - 'id': 'undirfellsrett-i-vatnsdal-8-9-2017', + 'id': '02a59336-89bc-43f1-920d-40b24d96407a', + 'url': 'http://dn-djidl2.qbox.me/cloud/3c1a3aea1bdc042362a36ed482edb3ae/1080.mp4', 'ext': 'mp4', 'title': 'Undirfellsrétt í Vatnsdal 8/9/2017', 'uploader': 'Flokmundur', - 'thumbnail': 'http://dn-djidl2.qbox.me/cloud/3c1a3aea1bdc042362a36ed482edb3ae/2.jpg', }, 'params': { - 'noplaylist': True, 'skip_download': True, } } @@ -42,33 +40,22 @@ class SkypixelIE(InfoExtractor): def _real_extract(self, url): video_id = self._match_id(url) webpage = self._download_webpage(url, video_id) - title = self._og_search_title(webpage).strip() - title = title.replace(' | SkyPixel.com', '') + title = self._og_search_title(webpage).strip().replace(' | SkyPixel.com', '') uploader = self._simple_search_between( webpage, u'') - assert(uploader is not None) - djivideos_url = self._simple_search_between( + url = self._simple_search_between( webpage, u'