Merge remote-tracking branch 'lenaten/8tracks'
authorPhilipp Hagemeister <phihag@phihag.de>
Sat, 10 Jan 2015 04:47:05 +0000 (05:47 +0100)
committerPhilipp Hagemeister <phihag@phihag.de>
Sat, 10 Jan 2015 04:47:05 +0000 (05:47 +0100)
1  2 
youtube_dl/extractor/eighttracks.py

index a30a1f3305ad9d2ba61552571accf23ec2625bff,f093592a85da872ca0b206d222e025c08f124dff..9df2141c3166be943c80718ddd5e40b4b2ee0b24
@@@ -4,10 -4,12 +4,12 @@@ from __future__ import unicode_literal
  import json
  import random
  import re
+ import time
  
  from .common import InfoExtractor
 -from ..utils import (
 +from ..compat import (
      compat_str,
+     ExtractorError,
  )
  
  
@@@ -112,25 -114,42 +114,42 @@@ 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 = self._download_webpage(
-                 next_url, playlist_id,
-                 note='Downloading song information %d/%d' % (i + 1, track_count),
-                 errnote='Failed to download song information')
+             
+             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 += 1
+                         time.sleep(avg_song_duration)
              api_data = json.loads(api_json)
              track_data = api_data['set']['track']
              info = {
                  'id': compat_str(track_data['id']),
                  'url': track_data['track_file_stream_url'],
 -                'title': track_data['performer'] + u' - ' + track_data['name'],
 +                'title': track_data['performer'] + ' - ' + track_data['name'],
                  'raw_title': track_data['name'],
                  'uploader_id': data['user']['login'],
                  '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 {