mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2025-12-08 15:12:43 +01:00
Compare commits
9 Commits
2015.02.09
...
2015.02.10
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8829650513 | ||
|
|
c73fae1e2e | ||
|
|
834bf069d2 | ||
|
|
c06a9fa34f | ||
|
|
753fad4adc | ||
|
|
34814eb66e | ||
|
|
3a5bcd0326 | ||
|
|
99c2398bc6 | ||
|
|
28f1272870 |
@@ -74,7 +74,7 @@ from .collegehumor import CollegeHumorIE
|
|||||||
from .collegerama import CollegeRamaIE
|
from .collegerama import CollegeRamaIE
|
||||||
from .comedycentral import ComedyCentralIE, ComedyCentralShowsIE
|
from .comedycentral import ComedyCentralIE, ComedyCentralShowsIE
|
||||||
from .comcarcoff import ComCarCoffIE
|
from .comcarcoff import ComCarCoffIE
|
||||||
from .commonmistakes import CommonMistakesIE
|
from .commonmistakes import CommonMistakesIE, UnicodeBOMIE
|
||||||
from .condenast import CondeNastIE
|
from .condenast import CondeNastIE
|
||||||
from .cracked import CrackedIE
|
from .cracked import CrackedIE
|
||||||
from .criterion import CriterionIE
|
from .criterion import CriterionIE
|
||||||
|
|||||||
@@ -72,26 +72,29 @@ class BandcampIE(InfoExtractor):
|
|||||||
|
|
||||||
download_link = m_download.group(1)
|
download_link = m_download.group(1)
|
||||||
video_id = self._search_regex(
|
video_id = self._search_regex(
|
||||||
r'var TralbumData = {.*?id: (?P<id>\d+),?$',
|
r'(?ms)var TralbumData = {.*?id: (?P<id>\d+),?$',
|
||||||
webpage, 'video id', flags=re.MULTILINE | re.DOTALL)
|
webpage, 'video id')
|
||||||
|
|
||||||
download_webpage = self._download_webpage(download_link, video_id, 'Downloading free downloads page')
|
download_webpage = self._download_webpage(download_link, video_id, 'Downloading free downloads page')
|
||||||
# We get the dictionary of the track from some javascript code
|
# We get the dictionary of the track from some javascript code
|
||||||
info = re.search(r'items: (.*?),$', download_webpage, re.MULTILINE).group(1)
|
all_info = self._parse_json(self._search_regex(
|
||||||
info = json.loads(info)[0]
|
r'(?sm)items: (.*?),$', download_webpage, 'items'), video_id)
|
||||||
|
info = all_info[0]
|
||||||
# We pick mp3-320 for now, until format selection can be easily implemented.
|
# We pick mp3-320 for now, until format selection can be easily implemented.
|
||||||
mp3_info = info['downloads']['mp3-320']
|
mp3_info = info['downloads']['mp3-320']
|
||||||
# If we try to use this url it says the link has expired
|
# If we try to use this url it says the link has expired
|
||||||
initial_url = mp3_info['url']
|
initial_url = mp3_info['url']
|
||||||
re_url = r'(?P<server>http://(.*?)\.bandcamp\.com)/download/track\?enc=mp3-320&fsig=(?P<fsig>.*?)&id=(?P<id>.*?)&ts=(?P<ts>.*)$'
|
m_url = re.match(
|
||||||
m_url = re.match(re_url, initial_url)
|
r'(?P<server>http://(.*?)\.bandcamp\.com)/download/track\?enc=mp3-320&fsig=(?P<fsig>.*?)&id=(?P<id>.*?)&ts=(?P<ts>.*)$',
|
||||||
|
initial_url)
|
||||||
# We build the url we will use to get the final track url
|
# We build the url we will use to get the final track url
|
||||||
# This url is build in Bandcamp in the script download_bunde_*.js
|
# This url is build in Bandcamp in the script download_bunde_*.js
|
||||||
request_url = '%s/statdownload/track?enc=mp3-320&fsig=%s&id=%s&ts=%s&.rand=665028774616&.vrs=1' % (m_url.group('server'), m_url.group('fsig'), video_id, m_url.group('ts'))
|
request_url = '%s/statdownload/track?enc=mp3-320&fsig=%s&id=%s&ts=%s&.rand=665028774616&.vrs=1' % (m_url.group('server'), m_url.group('fsig'), video_id, m_url.group('ts'))
|
||||||
final_url_webpage = self._download_webpage(request_url, video_id, 'Requesting download url')
|
final_url_webpage = self._download_webpage(request_url, video_id, 'Requesting download url')
|
||||||
# If we could correctly generate the .rand field the url would be
|
# If we could correctly generate the .rand field the url would be
|
||||||
# in the "download_url" key
|
# in the "download_url" key
|
||||||
final_url = re.search(r'"retry_url":"(.*?)"', final_url_webpage).group(1)
|
final_url = self._search_regex(
|
||||||
|
r'"retry_url":"(.*?)"', final_url_webpage, 'final video URL')
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
|
|||||||
@@ -264,8 +264,15 @@ class InfoExtractor(object):
|
|||||||
|
|
||||||
def extract(self, url):
|
def extract(self, url):
|
||||||
"""Extracts URL information and returns it in list of dicts."""
|
"""Extracts URL information and returns it in list of dicts."""
|
||||||
self.initialize()
|
try:
|
||||||
return self._real_extract(url)
|
self.initialize()
|
||||||
|
return self._real_extract(url)
|
||||||
|
except ExtractorError:
|
||||||
|
raise
|
||||||
|
except compat_http_client.IncompleteRead as e:
|
||||||
|
raise ExtractorError('A network error has occured.', cause=e, expected=True)
|
||||||
|
except (KeyError,) as e:
|
||||||
|
raise ExtractorError('An extractor error has occured.', cause=e)
|
||||||
|
|
||||||
def set_downloader(self, downloader):
|
def set_downloader(self, downloader):
|
||||||
"""Sets the downloader for this IE."""
|
"""Sets the downloader for this IE."""
|
||||||
|
|||||||
@@ -24,6 +24,23 @@ class CommonMistakesIE(InfoExtractor):
|
|||||||
'That doesn\'t make any sense. '
|
'That doesn\'t make any sense. '
|
||||||
'Simply remove the parameter in your command or configuration.'
|
'Simply remove the parameter in your command or configuration.'
|
||||||
) % url
|
) % url
|
||||||
if self._downloader.params.get('verbose'):
|
if not self._downloader.params.get('verbose'):
|
||||||
msg += ' Add -v to the command line to see what arguments and configuration youtube-dl got.'
|
msg += ' Add -v to the command line to see what arguments and configuration youtube-dl got.'
|
||||||
raise ExtractorError(msg, expected=True)
|
raise ExtractorError(msg, expected=True)
|
||||||
|
|
||||||
|
|
||||||
|
class UnicodeBOMIE(InfoExtractor):
|
||||||
|
IE_DESC = False
|
||||||
|
_VALID_URL = r'(?P<bom>\ufeff)(?P<id>.*)$'
|
||||||
|
|
||||||
|
_TESTS = [{
|
||||||
|
'url': '\ufeffhttp://www.youtube.com/watch?v=BaW_jenozKc',
|
||||||
|
'only_matching': True,
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
real_url = self._match_id(url)
|
||||||
|
self.report_warning(
|
||||||
|
'Your URL starts with a Byte Order Mark (BOM). '
|
||||||
|
'Removing the BOM and looking for "%s" ...' % real_url)
|
||||||
|
return self.url_result(real_url)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# coding: utf-8
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
@@ -10,13 +11,13 @@ class SVTPlayIE(InfoExtractor):
|
|||||||
_VALID_URL = r'https?://(?:www\.)?svtplay\.se/video/(?P<id>[0-9]+)'
|
_VALID_URL = r'https?://(?:www\.)?svtplay\.se/video/(?P<id>[0-9]+)'
|
||||||
_TEST = {
|
_TEST = {
|
||||||
'url': 'http://www.svtplay.se/video/2609989/sm-veckan/sm-veckan-rally-final-sasong-1-sm-veckan-rally-final',
|
'url': 'http://www.svtplay.se/video/2609989/sm-veckan/sm-veckan-rally-final-sasong-1-sm-veckan-rally-final',
|
||||||
'md5': '2521cd644e862936cf2e698206e47385',
|
'md5': 'f4a184968bc9c802a9b41316657aaa80',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '3966754',
|
'id': '2609989',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'FIFA 14 - E3 2013 Trailer',
|
'title': 'SM veckan vinter, Örebro - Rally, final',
|
||||||
'duration': 4500,
|
'duration': 4500,
|
||||||
'thumbnail': 're:^https?://.*\.jpg$',
|
'thumbnail': 're:^https?://.*[\.-]jpg$',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -734,22 +734,22 @@ def parseOpts(overrideArguments=None):
|
|||||||
if opts.verbose:
|
if opts.verbose:
|
||||||
write_string('[debug] Override config: ' + repr(overrideArguments) + '\n')
|
write_string('[debug] Override config: ' + repr(overrideArguments) + '\n')
|
||||||
else:
|
else:
|
||||||
commandLineConf = sys.argv[1:]
|
command_line_conf = sys.argv[1:]
|
||||||
if '--ignore-config' in commandLineConf:
|
if '--ignore-config' in command_line_conf:
|
||||||
systemConf = []
|
system_conf = []
|
||||||
userConf = []
|
user_conf = []
|
||||||
else:
|
else:
|
||||||
systemConf = _readOptions('/etc/youtube-dl.conf')
|
system_conf = _readOptions('/etc/youtube-dl.conf')
|
||||||
if '--ignore-config' in systemConf:
|
if '--ignore-config' in system_conf:
|
||||||
userConf = []
|
user_conf = []
|
||||||
else:
|
else:
|
||||||
userConf = _readUserConf()
|
user_conf = _readUserConf()
|
||||||
argv = systemConf + userConf + commandLineConf
|
argv = system_conf + user_conf + command_line_conf
|
||||||
|
|
||||||
opts, args = parser.parse_args(argv)
|
opts, args = parser.parse_args(argv)
|
||||||
if opts.verbose:
|
if opts.verbose:
|
||||||
write_string('[debug] System config: ' + repr(_hide_login_info(systemConf)) + '\n')
|
write_string('[debug] System config: ' + repr(_hide_login_info(system_conf)) + '\n')
|
||||||
write_string('[debug] User config: ' + repr(_hide_login_info(userConf)) + '\n')
|
write_string('[debug] User config: ' + repr(_hide_login_info(user_conf)) + '\n')
|
||||||
write_string('[debug] Command-line args: ' + repr(_hide_login_info(commandLineConf)) + '\n')
|
write_string('[debug] Command-line args: ' + repr(_hide_login_info(command_line_conf)) + '\n')
|
||||||
|
|
||||||
return parser, opts, args
|
return parser, opts, args
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
__version__ = '2015.02.09.3'
|
__version__ = '2015.02.10.1'
|
||||||
|
|||||||
Reference in New Issue
Block a user