|
|
@ -100,7 +100,7 @@ class SoundcloudIE(InfoExtractor):
|
|
|
|
|
|
|
|
|
|
|
|
def report_resolve(self, video_id):
|
|
|
|
def report_resolve(self, video_id):
|
|
|
|
"""Report information extraction."""
|
|
|
|
"""Report information extraction."""
|
|
|
|
self.to_screen(u'%s: Resolving id' % video_id)
|
|
|
|
self.to_screen('%s: Resolving id' % video_id)
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
@classmethod
|
|
|
|
def _resolv_url(cls, url):
|
|
|
|
def _resolv_url(cls, url):
|
|
|
@ -146,14 +146,14 @@ class SoundcloudIE(InfoExtractor):
|
|
|
|
formats = []
|
|
|
|
formats = []
|
|
|
|
format_dict = json.loads(stream_json)
|
|
|
|
format_dict = json.loads(stream_json)
|
|
|
|
for key, stream_url in format_dict.items():
|
|
|
|
for key, stream_url in format_dict.items():
|
|
|
|
if key.startswith(u'http'):
|
|
|
|
if key.startswith('http'):
|
|
|
|
formats.append({
|
|
|
|
formats.append({
|
|
|
|
'format_id': key,
|
|
|
|
'format_id': key,
|
|
|
|
'ext': ext,
|
|
|
|
'ext': ext,
|
|
|
|
'url': stream_url,
|
|
|
|
'url': stream_url,
|
|
|
|
'vcodec': 'none',
|
|
|
|
'vcodec': 'none',
|
|
|
|
})
|
|
|
|
})
|
|
|
|
elif key.startswith(u'rtmp'):
|
|
|
|
elif key.startswith('rtmp'):
|
|
|
|
# The url doesn't have an rtmp app, we have to extract the playpath
|
|
|
|
# The url doesn't have an rtmp app, we have to extract the playpath
|
|
|
|
url, path = stream_url.split('mp3:', 1)
|
|
|
|
url, path = stream_url.split('mp3:', 1)
|
|
|
|
formats.append({
|
|
|
|
formats.append({
|
|
|
@ -188,7 +188,7 @@ class SoundcloudIE(InfoExtractor):
|
|
|
|
def _real_extract(self, url):
|
|
|
|
def _real_extract(self, url):
|
|
|
|
mobj = re.match(self._VALID_URL, url, flags=re.VERBOSE)
|
|
|
|
mobj = re.match(self._VALID_URL, url, flags=re.VERBOSE)
|
|
|
|
if mobj is None:
|
|
|
|
if mobj is None:
|
|
|
|
raise ExtractorError(u'Invalid URL: %s' % url)
|
|
|
|
raise ExtractorError('Invalid URL: %s' % url)
|
|
|
|
|
|
|
|
|
|
|
|
track_id = mobj.group('track_id')
|
|
|
|
track_id = mobj.group('track_id')
|
|
|
|
token = None
|
|
|
|
token = None
|
|
|
@ -226,7 +226,7 @@ class SoundcloudSetIE(SoundcloudIE):
|
|
|
|
def _real_extract(self, url):
|
|
|
|
def _real_extract(self, url):
|
|
|
|
mobj = re.match(self._VALID_URL, url)
|
|
|
|
mobj = re.match(self._VALID_URL, url)
|
|
|
|
if mobj is None:
|
|
|
|
if mobj is None:
|
|
|
|
raise ExtractorError(u'Invalid URL: %s' % url)
|
|
|
|
raise ExtractorError('Invalid URL: %s' % url)
|
|
|
|
|
|
|
|
|
|
|
|
# extract uploader (which is in the url)
|
|
|
|
# extract uploader (which is in the url)
|
|
|
|
uploader = mobj.group(1)
|
|
|
|
uploader = mobj.group(1)
|
|
|
@ -243,7 +243,7 @@ class SoundcloudSetIE(SoundcloudIE):
|
|
|
|
info = json.loads(info_json)
|
|
|
|
info = json.loads(info_json)
|
|
|
|
if 'errors' in info:
|
|
|
|
if 'errors' in info:
|
|
|
|
for err in info['errors']:
|
|
|
|
for err in info['errors']:
|
|
|
|
self._downloader.report_error(u'unable to download video webpage: %s' % compat_str(err['error_message']))
|
|
|
|
self._downloader.report_error('unable to download video webpage: %s' % compat_str(err['error_message']))
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
self.report_extraction(full_title)
|
|
|
|
self.report_extraction(full_title)
|
|
|
|