def next_track(self): if self.buffer == None: if self.title != None and self.uri == None: self.uri = self._get_uri_from_artist_title( self.artist, self.title) self.buffer = [] if self.uri: _, _, id = self.uri.split(':') try: results = _get_spotify().album_tracks(id) except spotipy.SpotifyException as e: raise engine.PBLException(self, e.msg) for track in results['items']: self.buffer.append(track['id']) _add_track(self.name, track) else: raise engine.PBLException(self, "Can't find that album") if len(self.buffer) > 0: return self.buffer.pop(0) else: return None
def next_track(self): if self.buffer == None: self.buffer = [] if self.uri == None: self.uri = _find_artist_by_name(_get_spotify(), self.artist_name) if self.uri != None: _, _, id = self.uri.split(':') try: results = _get_spotify().artist_top_tracks(id) except spotipy.SpotifyException as e: raise engine.PBLException(self, e.msg) for track in results['tracks']: if track and 'id' in track: self.buffer.append(track['id']) _add_track(self.name, track) else: raise engine.PBLException(self, "Can't find that artist") if len(self.buffer) > 0: return self.buffer.pop(0) else: return None
def next_track(self): if self.uri == None: try: track = _find_track_by_name(_get_spotify(), self.title) if track and 'id' in track: _add_track(self.name, track) self.uri = track['id'] return self.uri else: raise engine.PBLException(self, "Can't find that track") except spotipy.SpotifyException as e: raise engine.PBLException(self, e.msg) else: return None
def next_track(self): if self.buffer == None: self.buffer = [] try: results = _get_spotify().tracks(self.uris) except spotipy.SpotifyException as e: raise engine.PBLException(self, e.msg) for track in results['tracks']: if track and 'id' in track: self.buffer.append(track['id']) _add_track(self.name, track) else: raise engine.PBLException(self, 'bad track') if len(self.buffer) > 0: return self.buffer.pop(0) else: return None
def _get_more_tracks(self): _, _, user, _, playlist_id = self.uri.split(':') try: results = _get_spotify().user_playlist_tracks( user, playlist_id, limit=self.limit, offset=self.next_offset) except spotipy.SpotifyException as e: raise engine.PBLException(self, e.msg) self.total = results['total'] for item in results['items']: track = item['track'] self.tracks.append(track['id']) _add_track(self.name, track) self.next_offset += self.limit
def _annotate_tracks_with_audio_features(tids): otids = tlib.annotate_tracks_from_cache('audio', tids) if len(otids) > 0: stids = set(otids) try: results = _get_spotify().audio_features(otids) for track in results: if track and 'id' in track: # print 'audio', json.dumps(track, indent=4) tlib.annotate_track(track['id'], 'audio', track) except spotipy.SpotifyException as e: # we may get a 404 if we request features for a single # track and the track is missing. In this case we can # ignore the error if e.http_status >= 400 and e.http_status < 500: pass else: raise engine.PBLException(self, e.msg)
def _get_more_tracks(self): fields = self.uri.split(':') if len(fields) == 5: _, _, user, _, playlist_id = fields else: _, _, playlist_id = fields try: results = _get_spotify().playlist_tracks(playlist_id, limit=self.limit, offset=self.next_offset) except spotipy.SpotifyException as e: raise engine.PBLException(self, e.msg) self.total = results['total'] for item in results['items']: track = item['track'] if track and 'id' in track: self.tracks.append(track['id']) _add_track(self.name, track) self.next_offset += self.limit
def next_track(self): if self.uri == None: if self.user: self.uri = self._get_uri_from_name_and_user( self.name, self.user) else: self.uri = self._get_uri_from_name(self.name) if not self.uri: msg = "Can't find playlist named " + self.name if self.user: msg += ' for user ' + self.user raise engine.PBLException(self, msg) if self.uri and self.cur_index >= len(self.tracks) \ and len(self.tracks) < self.total: self._get_more_tracks() if self.cur_index < len(self.tracks): track = self.tracks[self.cur_index] self.cur_index += 1 return track else: return None