]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/eighttracks.py
cced0681171a3dbc818e62ee2551da1958eacae2
6 from .common
import InfoExtractor
12 class EightTracksIE(InfoExtractor
):
14 _VALID_URL
= r
'https?://8tracks.com/(?P<user>[^/]+)/(?P<id>[^/#]+)(?:#.*)?$'
16 u
"name": u
"EightTracks",
17 u
"url": u
"http://8tracks.com/ytdl/youtube-dl-test-tracks-a",
20 u
"file": u
"11885610.m4a",
21 u
"md5": u
"96ce57f24389fc8734ce47f4c1abcc55",
23 u
"title": u
"youtue-dl project<>\"' - youtube-dl test track 1 \"'/\\\u00e4\u21ad",
24 u
"uploader_id": u
"ytdl"
28 u
"file": u
"11885608.m4a",
29 u
"md5": u
"4ab26f05c1f7291ea460a3920be8021f",
31 u
"title": u
"youtube-dl project - youtube-dl test track 2 \"'/\\\u00e4\u21ad",
32 u
"uploader_id": u
"ytdl"
36 u
"file": u
"11885679.m4a",
37 u
"md5": u
"d30b5b5f74217410f4689605c35d1fd7",
39 u
"title": u
"youtube-dl project as well - youtube-dl test track 3 \"'/\\\u00e4\u21ad",
40 u
"uploader_id": u
"ytdl"
44 u
"file": u
"11885680.m4a",
45 u
"md5": u
"4eb0a669317cd725f6bbd336a29f923a",
47 u
"title": u
"youtube-dl project as well - youtube-dl test track 4 \"'/\\\u00e4\u21ad",
48 u
"uploader_id": u
"ytdl"
52 u
"file": u
"11885682.m4a",
53 u
"md5": u
"1893e872e263a2705558d1d319ad19e8",
55 u
"title": u
"PH - youtube-dl test track 5 \"'/\\\u00e4\u21ad",
56 u
"uploader_id": u
"ytdl"
60 u
"file": u
"11885683.m4a",
61 u
"md5": u
"b673c46f47a216ab1741ae8836af5899",
63 u
"title": u
"PH - youtube-dl test track 6 \"'/\\\u00e4\u21ad",
64 u
"uploader_id": u
"ytdl"
68 u
"file": u
"11885684.m4a",
69 u
"md5": u
"1d74534e95df54986da7f5abf7d842b7",
71 u
"title": u
"phihag - youtube-dl test track 7 \"'/\\\u00e4\u21ad",
72 u
"uploader_id": u
"ytdl"
76 u
"file": u
"11885685.m4a",
77 u
"md5": u
"f081f47af8f6ae782ed131d38b9cd1c0",
79 u
"title": u
"phihag - youtube-dl test track 8 \"'/\\\u00e4\u21ad",
80 u
"uploader_id": u
"ytdl"
87 def _real_extract(self
, url
):
88 mobj
= re
.match(self
._VALID
_URL
, url
)
90 raise ExtractorError(u
'Invalid URL: %s' % url
)
91 playlist_id
= mobj
.group('id')
93 webpage
= self
._download
_webpage
(url
, playlist_id
)
95 json_like
= self
._search
_regex
(r
"PAGE.mix = (.*?);\n", webpage
, u
'trax information', flags
=re
.DOTALL
)
96 data
= json
.loads(json_like
)
98 session
= str(random
.randint(0, 1000000000))
100 track_count
= data
['tracks_count']
101 first_url
= 'http://8tracks.com/sets/%s/play?player=sm&mix_id=%s&format=jsonh' % (session
, mix_id
)
104 for i
in itertools
.count():
105 api_json
= self
._download
_webpage
(next_url
, playlist_id
,
106 note
=u
'Downloading song information %s/%s' % (str(i
+1), track_count
),
107 errnote
=u
'Failed to download song information')
108 api_data
= json
.loads(api_json
)
109 track_data
= api_data
[u
'set']['track']
111 'id': track_data
['id'],
112 'url': track_data
['track_file_stream_url'],
113 'title': track_data
['performer'] + u
' - ' + track_data
['name'],
114 'raw_title': track_data
['name'],
115 'uploader_id': data
['user']['login'],
119 if api_data
['set']['at_last_track']:
121 next_url
= 'http://8tracks.com/sets/%s/next?player=sm&mix_id=%s&format=jsonh&track_id=%s' % (session
, mix_id
, track_data
['id'])