Python – Создание плейлиста Spotify повторяет один и тот же трек?

Я пытаюсь создать программу Python для создания списков воспроизведения Spotify в соответствии с настроением пользователя; то есть пользователь выбирает определенное настроение, и программа возвращает список воспроизведения, в котором функции песни (взятые из сохраненных пользователем треков) указывают, что они соответствуют указанному настроению. Однако я столкнулся с проблемой, что плейлист состоит из одной и той же песни, повторяемой 30 раз, а не из 30 разных песен. Я новичок в Python и программировании в целом, так что, возможно, это не очень сложная проблема, но я пытаюсь понять проблему, но не могу.

Вот маршрут в моем основном коде, который относится к этой проблеме (моя полная программа имеет больше маршрутов, и все они пока работают нормально). Все остальные настроения будут определяться другими маршрутами, но по той же логике. Я предоставлю любой дополнительный код, который может понадобиться для лучшего понимания проблемы.

@app.route("/playlist_mood_angry")
def mood_playlist_angry():
    # define mood and create empty track list
    selected_mood = "Angry"
    tracks_uris = [] # we need all the tracks uri to add to the future playlist
    if 'auth_header' in session:
        auth_header = session['auth_header']
        # get user profile and saved tracks
        user_profile_data = spotify.get_users_profile(auth_header)
        user_id = user_profile_data["id"]
        saved_tracks_data = spotify.get_user_saved_tracks(auth_header)
        playlist_name = 'CSMoodlet: Angry'
        playlist_description = "A playlist for when you're just pissed off and want a soundtrack to go with it. Automatically curated by CSMoodlet."

        # go through saved tracks dictionary, get the tracks and for each one check if features average matches selected mood
        for item in saved_tracks_data["items"]:
            track = item["track"]
            features = sp.audio_features(track['id'])
            acousticness = features[0]['acousticness']
            danceability = features[0]['danceability']
            energy = features[0]['energy']
            speechiness = features[0]['speechiness']
            valence = features[0]['valence']
            track_mood = spotify.define_mood(acousticness, danceability, energy, speechiness, valence)

            # if the track's mood is "angry", if the list is not 30 tracks long yet, append it to the list
            if track_mood == "Angry": #if track's mood is not Angry, it will go back to the for loop to check the next one (THIS DOESN'T WORK)
                while len(tracks_uris) < 30:
                    track_uri = "spotify:track:{}".format(track['id'])
                    tracks_uris.append(track_uri)

        # once it has gone through all saved tracks, create the playlist and add the tracks
        new_playlist = spotify.create_playlist(auth_header, user_id, playlist_name, playlist_description)
        new_playlist_id = new_playlist['id']
        added_playlist = spotify.add_tracks_to_playlist(auth_header, new_playlist_id, tracks_uris)
        playlist = spotify.get_playlist(auth_header, new_playlist_id)
        tracks_data = []
        for item in playlist["items"]:
            track_data = item["track"]
            tracks_data.append(track_data)
        return render_template("created_playlist.html", selected_mood = selected_mood, playlist_tracks=tracks_data)

Любая помощь будет глубоко оценена. Извините, если что-то плохо объяснено, я новичок в Stackoverflow, и английский не является моим родным языком.


person loureiro    schedule 09.11.2020    source источник


Ответы (1)


Нашел ошибку! Для тех, у кого есть проблемы с той же проблемой, я обнаружил, что это на самом деле очень просто. просто замените цикл while на цикл if, когда проверяется, что длина списка воспроизведения меньше 30.

person loureiro    schedule 09.11.2020