|
|
@ -4,6 +4,7 @@ import re
|
|
|
|
from .common import InfoExtractor
|
|
|
|
from .common import InfoExtractor
|
|
|
|
from ..utils import (
|
|
|
|
from ..utils import (
|
|
|
|
compat_str,
|
|
|
|
compat_str,
|
|
|
|
|
|
|
|
compat_urlparse,
|
|
|
|
|
|
|
|
|
|
|
|
ExtractorError,
|
|
|
|
ExtractorError,
|
|
|
|
unified_strdate,
|
|
|
|
unified_strdate,
|
|
|
@ -22,6 +23,7 @@ class SoundcloudIE(InfoExtractor):
|
|
|
|
_VALID_URL = r'''^(?:https?://)?
|
|
|
|
_VALID_URL = r'''^(?:https?://)?
|
|
|
|
(?:(?:(?:www\.)?soundcloud\.com/([\w\d-]+)/([\w\d-]+)/?(?:[?].*)?$)
|
|
|
|
(?:(?:(?:www\.)?soundcloud\.com/([\w\d-]+)/([\w\d-]+)/?(?:[?].*)?$)
|
|
|
|
|(?:api\.soundcloud\.com/tracks/(?P<track_id>\d+))
|
|
|
|
|(?:api\.soundcloud\.com/tracks/(?P<track_id>\d+))
|
|
|
|
|
|
|
|
|(?P<widget>w.soundcloud.com/player/?.*?url=.*)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
'''
|
|
|
|
'''
|
|
|
|
IE_NAME = u'soundcloud'
|
|
|
|
IE_NAME = u'soundcloud'
|
|
|
@ -79,6 +81,9 @@ class SoundcloudIE(InfoExtractor):
|
|
|
|
if track_id is not None:
|
|
|
|
if track_id is not None:
|
|
|
|
info_json_url = 'http://api.soundcloud.com/tracks/' + track_id + '.json?client_id=' + self._CLIENT_ID
|
|
|
|
info_json_url = 'http://api.soundcloud.com/tracks/' + track_id + '.json?client_id=' + self._CLIENT_ID
|
|
|
|
full_title = track_id
|
|
|
|
full_title = track_id
|
|
|
|
|
|
|
|
elif mobj.group('widget'):
|
|
|
|
|
|
|
|
query = compat_urlparse.parse_qs(compat_urlparse.urlparse(url).query)
|
|
|
|
|
|
|
|
return self.url_result(query['url'][0], ie='Soundcloud')
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
# extract uploader (which is in the url)
|
|
|
|
# extract uploader (which is in the url)
|
|
|
|
uploader = mobj.group(1)
|
|
|
|
uploader = mobj.group(1)
|
|
|
|