|
|
@ -1,8 +1,8 @@ |
|
|
|
# coding: utf-8 |
|
|
|
from __future__ import unicode_literals |
|
|
|
|
|
|
|
import re |
|
|
|
import itertools |
|
|
|
import re |
|
|
|
|
|
|
|
from .common import ( |
|
|
|
InfoExtractor, |
|
|
@ -17,7 +17,7 @@ from ..utils import ( |
|
|
|
ExtractorError, |
|
|
|
int_or_none, |
|
|
|
unified_strdate, |
|
|
|
) |
|
|
|
update_url_query) |
|
|
|
|
|
|
|
|
|
|
|
class SoundcloudIE(InfoExtractor): |
|
|
@ -160,11 +160,13 @@ class SoundcloudIE(InfoExtractor): |
|
|
|
'license': info.get('license'), |
|
|
|
} |
|
|
|
formats = [] |
|
|
|
query = {'client_id': self._CLIENT_ID} |
|
|
|
if secret_token is not None: |
|
|
|
query['secret_token'] = secret_token |
|
|
|
if info.get('downloadable', False): |
|
|
|
# We can build a direct link to the song |
|
|
|
format_url = ( |
|
|
|
'https://api.soundcloud.com/tracks/{0}/download?client_id={1}'.format( |
|
|
|
track_id, self._CLIENT_ID)) |
|
|
|
format_url = update_url_query( |
|
|
|
'https://api.soundcloud.com/tracks/{0}/download'.format(track_id), query) |
|
|
|
formats.append({ |
|
|
|
'format_id': 'download', |
|
|
|
'ext': info.get('original_format', 'mp3'), |
|
|
@ -176,10 +178,7 @@ class SoundcloudIE(InfoExtractor): |
|
|
|
# We have to retrieve the url |
|
|
|
format_dict = self._download_json( |
|
|
|
'https://api.soundcloud.com/i1/tracks/%s/streams' % track_id, |
|
|
|
track_id, 'Downloading track url', query={ |
|
|
|
'client_id': self._CLIENT_ID, |
|
|
|
'secret_token': secret_token, |
|
|
|
}) |
|
|
|
track_id, 'Downloading track url', query=query) |
|
|
|
|
|
|
|
for key, stream_url in format_dict.items(): |
|
|
|
abr = int_or_none(self._search_regex( |
|
|
@ -216,7 +215,7 @@ class SoundcloudIE(InfoExtractor): |
|
|
|
# cannot be always used, sometimes it can give an HTTP 404 error |
|
|
|
formats.append({ |
|
|
|
'format_id': 'fallback', |
|
|
|
'url': info['stream_url'] + '?client_id=' + self._CLIENT_ID, |
|
|
|
'url': update_url_query(info['stream_url'], query), |
|
|
|
'ext': ext, |
|
|
|
}) |
|
|
|
|
|
|
|