Merge branch 'master' into GoogleDrive-issue-13619
This commit is contained in:
commit
5844e87ac4
12
.github/ISSUE_TEMPLATE_tmpl.md
vendored
12
.github/ISSUE_TEMPLATE_tmpl.md
vendored
@ -1,16 +1,16 @@
|
|||||||
## Please follow the guide below
|
## Please follow the guide below
|
||||||
|
|
||||||
- You will be asked some questions and requested to provide some information, please read them **carefully** and answer honestly
|
- You will be asked some questions and requested to provide some information, please read them **carefully** and answer honestly
|
||||||
- Put an `x` into all the boxes [ ] relevant to your *issue* (like that [x])
|
- Put an `x` into all the boxes [ ] relevant to your *issue* (like this: `[x]`)
|
||||||
- Use *Preview* tab to see how your issue will actually look like
|
- Use the *Preview* tab to see what your issue will actually look like
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Make sure you are using the *latest* version: run `youtube-dl --version` and ensure your version is *%(version)s*. 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 *%(version)s*. 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 **%(version)s**
|
- [ ] I've **verified** and **I assure** that I'm running youtube-dl **%(version)s**
|
||||||
|
|
||||||
### Before submitting an *issue* make sure you have:
|
### Before submitting an *issue* make sure you have:
|
||||||
- [ ] At least skimmed through [README](https://github.com/rg3/youtube-dl/blob/master/README.md) and **most notably** [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
|
||||||
- [ ] [Searched](https://github.com/rg3/youtube-dl/search?type=Issues) the bugtracker for similar issues including closed ones
|
- [ ] [Searched](https://github.com/rg3/youtube-dl/search?type=Issues) the bugtracker for similar issues including closed ones
|
||||||
|
|
||||||
### What is the purpose of your *issue*?
|
### What is the purpose of your *issue*?
|
||||||
@ -28,9 +28,9 @@
|
|||||||
|
|
||||||
### If the purpose of this *issue* is a *bug report*, *site support request* or you are not completely sure provide the full verbose output as follows:
|
### If the purpose of this *issue* is a *bug report*, *site support request* or you are not completely sure provide the full verbose output as follows:
|
||||||
|
|
||||||
Add `-v` flag to **your command line** you run youtube-dl with, copy the **whole** output and insert it here. It should look similar to one below (replace it with **your** log inserted between triple ```):
|
Add the `-v` flag to **your command line** you run youtube-dl with (`youtube-dl -v <your command line>`), copy the **whole** output and insert it here. It should look similar to one below (replace it with **your** log inserted between triple ```):
|
||||||
|
|
||||||
```
|
```
|
||||||
$ youtube-dl -v <your command line>
|
|
||||||
[debug] System config: []
|
[debug] System config: []
|
||||||
[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']
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
version <unreleased>
|
||||||
|
|
||||||
|
Core
|
||||||
|
* [options] Correctly hide login info from debug outputs (#13696)
|
||||||
|
|
||||||
|
|
||||||
version 2017.07.23
|
version 2017.07.23
|
||||||
|
|
||||||
Core
|
Core
|
||||||
|
26
test/test_options.py
Normal file
26
test/test_options.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
# Allow direct execution
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import unittest
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
|
|
||||||
|
from youtube_dl.options import _hide_login_info
|
||||||
|
|
||||||
|
|
||||||
|
class TestOptions(unittest.TestCase):
|
||||||
|
def test_hide_login_info(self):
|
||||||
|
self.assertEqual(_hide_login_info(['-u', 'foo', '-p', 'bar']),
|
||||||
|
['-u', 'PRIVATE', '-p', 'PRIVATE'])
|
||||||
|
self.assertEqual(_hide_login_info(['-u']), ['-u'])
|
||||||
|
self.assertEqual(_hide_login_info(['-u', 'foo', '-u', 'bar']),
|
||||||
|
['-u', 'PRIVATE', '-u', 'PRIVATE'])
|
||||||
|
self.assertEqual(_hide_login_info(['--username=foo']),
|
||||||
|
['--username=PRIVATE'])
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
@ -3,9 +3,10 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
from .theplatform import ThePlatformIE
|
from .theplatform import ThePlatformIE
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
update_url_query,
|
|
||||||
parse_age_limit,
|
|
||||||
int_or_none,
|
int_or_none,
|
||||||
|
parse_age_limit,
|
||||||
|
try_get,
|
||||||
|
update_url_query,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -68,7 +69,8 @@ class AMCNetworksIE(ThePlatformIE):
|
|||||||
info = self._parse_theplatform_metadata(theplatform_metadata)
|
info = self._parse_theplatform_metadata(theplatform_metadata)
|
||||||
video_id = theplatform_metadata['pid']
|
video_id = theplatform_metadata['pid']
|
||||||
title = theplatform_metadata['title']
|
title = theplatform_metadata['title']
|
||||||
rating = theplatform_metadata['ratings'][0]['rating']
|
rating = try_get(
|
||||||
|
theplatform_metadata, lambda x: x['ratings'][0]['rating'])
|
||||||
auth_required = self._search_regex(
|
auth_required = self._search_regex(
|
||||||
r'window\.authRequired\s*=\s*(true|false);',
|
r'window\.authRequired\s*=\s*(true|false);',
|
||||||
webpage, 'auth required')
|
webpage, 'auth required')
|
||||||
|
@ -30,7 +30,11 @@ class CloudyIE(InfoExtractor):
|
|||||||
video_id = self._match_id(url)
|
video_id = self._match_id(url)
|
||||||
|
|
||||||
webpage = self._download_webpage(
|
webpage = self._download_webpage(
|
||||||
'http://www.cloudy.ec/embed.php?id=%s' % video_id, video_id)
|
'https://www.cloudy.ec/embed.php', video_id, query={
|
||||||
|
'id': video_id,
|
||||||
|
'playerPage': 1,
|
||||||
|
'autoplay': 1,
|
||||||
|
})
|
||||||
|
|
||||||
info = self._parse_html5_media_entries(url, webpage, video_id)[0]
|
info = self._parse_html5_media_entries(url, webpage, video_id)[0]
|
||||||
|
|
||||||
|
@ -673,6 +673,7 @@ from .nick import (
|
|||||||
NickIE,
|
NickIE,
|
||||||
NickDeIE,
|
NickDeIE,
|
||||||
NickNightIE,
|
NickNightIE,
|
||||||
|
NickRuIE,
|
||||||
)
|
)
|
||||||
from .niconico import NiconicoIE, NiconicoPlaylistIE
|
from .niconico import NiconicoIE, NiconicoPlaylistIE
|
||||||
from .ninecninemedia import (
|
from .ninecninemedia import (
|
||||||
|
@ -50,8 +50,7 @@ class MTVServicesInfoExtractor(InfoExtractor):
|
|||||||
thumb_node = itemdoc.find(search_path)
|
thumb_node = itemdoc.find(search_path)
|
||||||
if thumb_node is None:
|
if thumb_node is None:
|
||||||
return None
|
return None
|
||||||
else:
|
return thumb_node.get('url') or thumb_node.text or None
|
||||||
return thumb_node.attrib['url']
|
|
||||||
|
|
||||||
def _extract_mobile_video_formats(self, mtvn_id):
|
def _extract_mobile_video_formats(self, mtvn_id):
|
||||||
webpage_url = self._MOBILE_TEMPLATE % mtvn_id
|
webpage_url = self._MOBILE_TEMPLATE % mtvn_id
|
||||||
|
@ -12,6 +12,7 @@ class NickIE(MTVServicesInfoExtractor):
|
|||||||
IE_NAME = 'nick.com'
|
IE_NAME = 'nick.com'
|
||||||
_VALID_URL = r'https?://(?:(?:www|beta)\.)?nick(?:jr)?\.com/(?:[^/]+/)?(?:videos/clip|[^/]+/videos)/(?P<id>[^/?#.]+)'
|
_VALID_URL = r'https?://(?:(?:www|beta)\.)?nick(?:jr)?\.com/(?:[^/]+/)?(?:videos/clip|[^/]+/videos)/(?P<id>[^/?#.]+)'
|
||||||
_FEED_URL = 'http://udat.mtvnservices.com/service1/dispatch.htm'
|
_FEED_URL = 'http://udat.mtvnservices.com/service1/dispatch.htm'
|
||||||
|
_GEO_COUNTRIES = ['US']
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'http://www.nick.com/videos/clip/alvinnn-and-the-chipmunks-112-full-episode.html',
|
'url': 'http://www.nick.com/videos/clip/alvinnn-and-the-chipmunks-112-full-episode.html',
|
||||||
'playlist': [
|
'playlist': [
|
||||||
@ -124,3 +125,21 @@ class NickNightIE(NickDeIE):
|
|||||||
return self._search_regex(
|
return self._search_regex(
|
||||||
r'mrss\s*:\s*(["\'])(?P<url>http.+?)\1', webpage,
|
r'mrss\s*:\s*(["\'])(?P<url>http.+?)\1', webpage,
|
||||||
'mrss url', group='url')
|
'mrss url', group='url')
|
||||||
|
|
||||||
|
|
||||||
|
class NickRuIE(MTVServicesInfoExtractor):
|
||||||
|
IE_NAME = 'nickelodeonru'
|
||||||
|
_VALID_URL = r'https?://(?:www\.)nickelodeon\.ru/(?:playlist|shows|videos)/(?:[^/]+/)*(?P<id>[^/?#&]+)'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'http://www.nickelodeon.ru/shows/henrydanger/videos/episodes/3-sezon-15-seriya-licenziya-na-polyot/pmomfb#playlist/7airc6',
|
||||||
|
'only_matching': True,
|
||||||
|
}, {
|
||||||
|
'url': 'http://www.nickelodeon.ru/videos/smotri-na-nickelodeon-v-iyule/g9hvh7',
|
||||||
|
'only_matching': True,
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
video_id = self._match_id(url)
|
||||||
|
webpage = self._download_webpage(url, video_id)
|
||||||
|
mgid = self._extract_mgid(webpage)
|
||||||
|
return self.url_result('http://media.mtvnservices.com/embed/%s' % mgid)
|
||||||
|
@ -147,6 +147,9 @@ class NiconicoIE(InfoExtractor):
|
|||||||
elif 'closed' in flv_info:
|
elif 'closed' in flv_info:
|
||||||
raise ExtractorError('Niconico videos now require logging in',
|
raise ExtractorError('Niconico videos now require logging in',
|
||||||
expected=True)
|
expected=True)
|
||||||
|
elif 'error' in flv_info:
|
||||||
|
raise ExtractorError('%s reports error: %s' % (
|
||||||
|
self.IE_NAME, flv_info['error'][0]), expected=True)
|
||||||
else:
|
else:
|
||||||
raise ExtractorError('Unable to find video URL')
|
raise ExtractorError('Unable to find video URL')
|
||||||
|
|
||||||
|
@ -20,6 +20,24 @@ from .utils import (
|
|||||||
from .version import __version__
|
from .version import __version__
|
||||||
|
|
||||||
|
|
||||||
|
def _hide_login_info(opts):
|
||||||
|
PRIVATE_OPTS = set(['-p', '--password', '-u', '--username', '--video-password', '--ap-password', '--ap-username'])
|
||||||
|
eqre = re.compile('^(?P<key>' + ('|'.join(re.escape(po) for po in PRIVATE_OPTS)) + ')=.+$')
|
||||||
|
|
||||||
|
def _scrub_eq(o):
|
||||||
|
m = eqre.match(o)
|
||||||
|
if m:
|
||||||
|
return m.group('key') + '=PRIVATE'
|
||||||
|
else:
|
||||||
|
return o
|
||||||
|
|
||||||
|
opts = list(map(_scrub_eq, opts))
|
||||||
|
for idx, opt in enumerate(opts):
|
||||||
|
if opt in PRIVATE_OPTS and idx + 1 < len(opts):
|
||||||
|
opts[idx + 1] = 'PRIVATE'
|
||||||
|
return opts
|
||||||
|
|
||||||
|
|
||||||
def parseOpts(overrideArguments=None):
|
def parseOpts(overrideArguments=None):
|
||||||
def _readOptions(filename_bytes, default=[]):
|
def _readOptions(filename_bytes, default=[]):
|
||||||
try:
|
try:
|
||||||
@ -93,26 +111,6 @@ def parseOpts(overrideArguments=None):
|
|||||||
def _comma_separated_values_options_callback(option, opt_str, value, parser):
|
def _comma_separated_values_options_callback(option, opt_str, value, parser):
|
||||||
setattr(parser.values, option.dest, value.split(','))
|
setattr(parser.values, option.dest, value.split(','))
|
||||||
|
|
||||||
def _hide_login_info(opts):
|
|
||||||
PRIVATE_OPTS = ['-p', '--password', '-u', '--username', '--video-password', '--ap-password', '--ap-username']
|
|
||||||
eqre = re.compile('^(?P<key>' + ('|'.join(re.escape(po) for po in PRIVATE_OPTS)) + ')=.+$')
|
|
||||||
|
|
||||||
def _scrub_eq(o):
|
|
||||||
m = eqre.match(o)
|
|
||||||
if m:
|
|
||||||
return m.group('key') + '=PRIVATE'
|
|
||||||
else:
|
|
||||||
return o
|
|
||||||
|
|
||||||
opts = list(map(_scrub_eq, opts))
|
|
||||||
for private_opt in PRIVATE_OPTS:
|
|
||||||
try:
|
|
||||||
i = opts.index(private_opt)
|
|
||||||
opts[i + 1] = 'PRIVATE'
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
return opts
|
|
||||||
|
|
||||||
# No need to wrap help messages if we're on a wide console
|
# No need to wrap help messages if we're on a wide console
|
||||||
columns = compat_get_terminal_size().columns
|
columns = compat_get_terminal_size().columns
|
||||||
max_width = columns if columns else 80
|
max_width = columns if columns else 80
|
||||||
|
Loading…
x
Reference in New Issue
Block a user