Merge remote-tracking branch 'lenaten/8tracks'

This commit is contained in:
Philipp Hagemeister 2015-01-10 05:47:05 +01:00
commit c24dfef63c

View file

@ -4,10 +4,12 @@
import json import json
import random import random
import re import re
import time
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import ( from ..compat import (
compat_str, compat_str,
ExtractorError,
) )
@ -112,14 +114,30 @@ def _real_extract(self, url):
session = str(random.randint(0, 1000000000)) session = str(random.randint(0, 1000000000))
mix_id = data['id'] mix_id = data['id']
track_count = data['tracks_count'] track_count = data['tracks_count']
duration = data['duration']
avg_song_duration = duration / track_count
first_url = 'http://8tracks.com/sets/%s/play?player=sm&mix_id=%s&format=jsonh' % (session, mix_id) first_url = 'http://8tracks.com/sets/%s/play?player=sm&mix_id=%s&format=jsonh' % (session, mix_id)
next_url = first_url next_url = first_url
entries = [] entries = []
for i in range(track_count): for i in range(track_count):
api_json = self._download_webpage(
next_url, playlist_id, api_json = None
note='Downloading song information %d/%d' % (i + 1, track_count), download_tries = 0
errnote='Failed to download song information')
while api_json is None:
try:
api_json = self._download_webpage(
next_url, playlist_id,
note='Downloading song information %d/%d' % (i + 1, track_count),
errnote='Failed to download song information')
except ExtractorError:
if download_tries > 3:
raise
else:
download_tries += 1
time.sleep(avg_song_duration)
api_data = json.loads(api_json) api_data = json.loads(api_json)
track_data = api_data['set']['track'] track_data = api_data['set']['track']
info = { info = {
@ -131,6 +149,7 @@ def _real_extract(self, url):
'ext': 'm4a', 'ext': 'm4a',
} }
entries.append(info) entries.append(info)
next_url = 'http://8tracks.com/sets/%s/next?player=sm&mix_id=%s&format=jsonh&track_id=%s' % ( next_url = 'http://8tracks.com/sets/%s/next?player=sm&mix_id=%s&format=jsonh&track_id=%s' % (
session, mix_id, track_data['id']) session, mix_id, track_data['id'])
return { return {