示例#1
0
    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
示例#2
0
    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
示例#3
0
 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
示例#4
0
    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
示例#5
0
    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
示例#6
0
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)
示例#7
0
    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
示例#8
0
    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