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
1 changed files with 23 additions and 4 deletions

View File

@ -4,10 +4,12 @@ from __future__ import unicode_literals
import json
import random
import re
import time
from .common import InfoExtractor
from ..utils import (
compat_str,
ExtractorError,
)
@ -112,14 +114,30 @@ class EightTracksIE(InfoExtractor):
session = str(random.randint(0, 1000000000))
mix_id = data['id']
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)
next_url = first_url
entries = []
for i in range(track_count):
api_json = None
download_tries = 0
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)
track_data = api_data['set']['track']
info = {
@ -131,6 +149,7 @@ class EightTracksIE(InfoExtractor):
'ext': 'm4a',
}
entries.append(info)
next_url = 'http://8tracks.com/sets/%s/next?player=sm&mix_id=%s&format=jsonh&track_id=%s' % (
session, mix_id, track_data['id'])
return {