Merge branch 'master' into GoogleDrive-issue-13619
This commit is contained in:
commit
59418f0b11
6
.github/ISSUE_TEMPLATE.md
vendored
6
.github/ISSUE_TEMPLATE.md
vendored
@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Make sure you are using the *latest* version: run `youtube-dl --version` and ensure your version is *2017.08.06*. If it's not, read [this FAQ entry](https://github.com/rg3/youtube-dl/blob/master/README.md#how-do-i-update-youtube-dl) and update. Issues with outdated version will be rejected.
|
### Make sure you are using the *latest* version: run `youtube-dl --version` and ensure your version is *2017.08.09*. If it's not, read [this FAQ entry](https://github.com/rg3/youtube-dl/blob/master/README.md#how-do-i-update-youtube-dl) and update. Issues with outdated version will be rejected.
|
||||||
- [ ] I've **verified** and **I assure** that I'm running youtube-dl **2017.08.06**
|
- [ ] I've **verified** and **I assure** that I'm running youtube-dl **2017.08.09**
|
||||||
|
|
||||||
### Before submitting an *issue* make sure you have:
|
### Before submitting an *issue* make sure you have:
|
||||||
- [ ] At least skimmed through the [README](https://github.com/rg3/youtube-dl/blob/master/README.md), **most notably** the [FAQ](https://github.com/rg3/youtube-dl#faq) and [BUGS](https://github.com/rg3/youtube-dl#bugs) sections
|
- [ ] At least skimmed through the [README](https://github.com/rg3/youtube-dl/blob/master/README.md), **most notably** the [FAQ](https://github.com/rg3/youtube-dl#faq) and [BUGS](https://github.com/rg3/youtube-dl#bugs) sections
|
||||||
@ -35,7 +35,7 @@ Add the `-v` flag to **your command line** you run youtube-dl with (`youtube-dl
|
|||||||
[debug] User config: []
|
[debug] User config: []
|
||||||
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKcj']
|
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKcj']
|
||||||
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
|
||||||
[debug] youtube-dl version 2017.08.06
|
[debug] youtube-dl version 2017.08.09
|
||||||
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
|
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
|
||||||
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
|
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
|
||||||
[debug] Proxy map: {}
|
[debug] Proxy map: {}
|
||||||
|
10
ChangeLog
10
ChangeLog
@ -1,6 +1,14 @@
|
|||||||
version <unreleased>
|
version 2017.08.09
|
||||||
|
|
||||||
|
Core
|
||||||
|
* [utils] Skip missing params in cli_bool_option (#13865)
|
||||||
|
|
||||||
Extractors
|
Extractors
|
||||||
|
* [xxxymovies] Fix title extraction (#13868)
|
||||||
|
+ [nick] Add support for nick.com.pl (#13860)
|
||||||
|
* [mixcloud] Fix play info decryption (#13867)
|
||||||
|
* [20min] Fix embeds extraction (#13852)
|
||||||
|
* [dplayit] Fix extraction (#13851)
|
||||||
+ [niconico] Support videos with multiple formats (#13522)
|
+ [niconico] Support videos with multiple formats (#13522)
|
||||||
+ [niconico] Support HTML5-only videos (#13806)
|
+ [niconico] Support HTML5-only videos (#13806)
|
||||||
|
|
||||||
|
@ -1182,6 +1182,10 @@ part 3</font></u>
|
|||||||
cli_bool_option(
|
cli_bool_option(
|
||||||
{'nocheckcertificate': False}, '--check-certificate', 'nocheckcertificate', 'false', 'true', '='),
|
{'nocheckcertificate': False}, '--check-certificate', 'nocheckcertificate', 'false', 'true', '='),
|
||||||
['--check-certificate=true'])
|
['--check-certificate=true'])
|
||||||
|
self.assertEqual(
|
||||||
|
cli_bool_option(
|
||||||
|
{}, '--check-certificate', 'nocheckcertificate', 'false', 'true', '='),
|
||||||
|
[])
|
||||||
|
|
||||||
def test_ohdave_rsa_encrypt(self):
|
def test_ohdave_rsa_encrypt(self):
|
||||||
N = 0xab86b6371b5318aaa1d3c9e612a9f1264f372323c8c0f19875b5fc3b3fd3afcc1e5bec527aa94bfa85bffc157e4245aebda05389a5357b75115ac94f074aefcd
|
N = 0xab86b6371b5318aaa1d3c9e612a9f1264f372323c8c0f19875b5fc3b3fd3afcc1e5bec527aa94bfa85bffc157e4245aebda05389a5357b75115ac94f074aefcd
|
||||||
|
@ -54,15 +54,22 @@ class MixcloudIE(InfoExtractor):
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
# See https://www.mixcloud.com/media/js2/www_js_2.9e23256562c080482435196ca3975ab5.js
|
# See https://www.mixcloud.com/media/js2/www_js_2.9e23256562c080482435196ca3975ab5.js
|
||||||
@staticmethod
|
def _decrypt_play_info(self, play_info, video_id):
|
||||||
def _decrypt_play_info(play_info):
|
KEYS = (
|
||||||
KEY = 'pleasedontdownloadourmusictheartistswontgetpaid'
|
'pleasedontdownloadourmusictheartistswontgetpaid',
|
||||||
|
'(function() { return new Date().toLocaleDateString(); })()'
|
||||||
|
)
|
||||||
play_info = base64.b64decode(play_info.encode('ascii'))
|
play_info = base64.b64decode(play_info.encode('ascii'))
|
||||||
|
for num, key in enumerate(KEYS, start=1):
|
||||||
return ''.join([
|
try:
|
||||||
compat_chr(compat_ord(ch) ^ compat_ord(KEY[idx % len(KEY)]))
|
return self._parse_json(
|
||||||
for idx, ch in enumerate(play_info)])
|
''.join([
|
||||||
|
compat_chr(compat_ord(ch) ^ compat_ord(key[idx % len(key)]))
|
||||||
|
for idx, ch in enumerate(play_info)]),
|
||||||
|
video_id)
|
||||||
|
except ExtractorError:
|
||||||
|
if num == len(KEYS):
|
||||||
|
raise
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
mobj = re.match(self._VALID_URL, url)
|
mobj = re.match(self._VALID_URL, url)
|
||||||
@ -78,8 +85,8 @@ class MixcloudIE(InfoExtractor):
|
|||||||
|
|
||||||
encrypted_play_info = self._search_regex(
|
encrypted_play_info = self._search_regex(
|
||||||
r'm-play-info="([^"]+)"', webpage, 'play info')
|
r'm-play-info="([^"]+)"', webpage, 'play info')
|
||||||
play_info = self._parse_json(
|
|
||||||
self._decrypt_play_info(encrypted_play_info), track_id)
|
play_info = self._decrypt_play_info(encrypted_play_info, track_id)
|
||||||
|
|
||||||
if message and 'stream_url' not in play_info:
|
if message and 'stream_url' not in play_info:
|
||||||
raise ExtractorError('%s said: %s' % (self.IE_NAME, message), expected=True)
|
raise ExtractorError('%s said: %s' % (self.IE_NAME, message), expected=True)
|
||||||
|
@ -75,7 +75,7 @@ class NickIE(MTVServicesInfoExtractor):
|
|||||||
|
|
||||||
class NickDeIE(MTVServicesInfoExtractor):
|
class NickDeIE(MTVServicesInfoExtractor):
|
||||||
IE_NAME = 'nick.de'
|
IE_NAME = 'nick.de'
|
||||||
_VALID_URL = r'https?://(?:www\.)?(?P<host>nick\.de|nickelodeon\.(?:nl|at))/(?:playlist|shows)/(?:[^/]+/)*(?P<id>[^/?#&]+)'
|
_VALID_URL = r'https?://(?:www\.)?(?P<host>nick\.(?:de|com\.pl)|nickelodeon\.(?:nl|at))/[^/]+/(?:[^/]+/)*(?P<id>[^/?#&]+)'
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'http://www.nick.de/playlist/3773-top-videos/videos/episode/17306-zu-wasser-und-zu-land-rauchende-erdnusse',
|
'url': 'http://www.nick.de/playlist/3773-top-videos/videos/episode/17306-zu-wasser-und-zu-land-rauchende-erdnusse',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
@ -88,6 +88,9 @@ class NickDeIE(MTVServicesInfoExtractor):
|
|||||||
}, {
|
}, {
|
||||||
'url': 'http://www.nickelodeon.at/playlist/3773-top-videos/videos/episode/77993-das-letzte-gefecht',
|
'url': 'http://www.nickelodeon.at/playlist/3773-top-videos/videos/episode/77993-das-letzte-gefecht',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
|
}, {
|
||||||
|
'url': 'http://www.nick.com.pl/seriale/474-spongebob-kanciastoporty/wideo/17412-teatr-to-jest-to-rodeo-oszolom',
|
||||||
|
'only_matching': True,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def _extract_mrss_url(self, webpage, host):
|
def _extract_mrss_url(self, webpage, host):
|
||||||
|
@ -50,7 +50,7 @@ class TwentyMinutenIE(InfoExtractor):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def _extract_urls(webpage):
|
def _extract_urls(webpage):
|
||||||
return [m.group('url') for m in re.finditer(
|
return [m.group('url') for m in re.finditer(
|
||||||
r'<iframe[^>]+src=(["\'])(?P<url>(?:https?://)?(?:www\.)?20min\.ch/videoplayer/videoplayer.html\?.*?\bvideoId@\d+.*?)\1',
|
r'<iframe[^>]+src=(["\'])(?P<url>(?:(?:https?:)?//)?(?:www\.)?20min\.ch/videoplayer/videoplayer.html\?.*?\bvideoId@\d+.*?)\1',
|
||||||
webpage)]
|
webpage)]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
|
@ -39,8 +39,8 @@ class XXXYMoviesIE(InfoExtractor):
|
|||||||
r"video_url\s*:\s*'([^']+)'", webpage, 'video URL')
|
r"video_url\s*:\s*'([^']+)'", webpage, 'video URL')
|
||||||
|
|
||||||
title = self._html_search_regex(
|
title = self._html_search_regex(
|
||||||
[r'<div class="block_header">\s*<h1>([^<]+)</h1>',
|
[r'<div[^>]+\bclass="block_header"[^>]*>\s*<h1>([^<]+)<',
|
||||||
r'<title>(.*?)\s*-\s*XXXYMovies\.com</title>'],
|
r'<title>(.*?)\s*-\s*(?:XXXYMovies\.com|XXX\s+Movies)</title>'],
|
||||||
webpage, 'title')
|
webpage, 'title')
|
||||||
|
|
||||||
thumbnail = self._search_regex(
|
thumbnail = self._search_regex(
|
||||||
|
@ -2733,6 +2733,8 @@ def cli_option(params, command_option, param):
|
|||||||
|
|
||||||
def cli_bool_option(params, command_option, param, true_value='true', false_value='false', separator=None):
|
def cli_bool_option(params, command_option, param, true_value='true', false_value='false', separator=None):
|
||||||
param = params.get(param)
|
param = params.get(param)
|
||||||
|
if param is None:
|
||||||
|
return []
|
||||||
assert isinstance(param, bool)
|
assert isinstance(param, bool)
|
||||||
if separator:
|
if separator:
|
||||||
return [command_option + separator + (true_value if param else false_value)]
|
return [command_option + separator + (true_value if param else false_value)]
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
__version__ = '2017.08.06'
|
__version__ = '2017.08.09'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user