Fix #2310. Play by the 8tracks rules

This commit is contained in:
net 2014-10-15 06:46:47 +03:00
parent 31d06400ec
commit 7b61ac3ddf

View file

@ -4,10 +4,12 @@ from __future__ import unicode_literals
import json import json
import random import random
import re import re
import time
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..utils import (
compat_str, compat_str,
ExtractorError,
) )
@ -112,14 +114,30 @@ class EightTracksIE(InfoExtractor):
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
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 @@ class EightTracksIE(InfoExtractor):
'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 {