J'essaie de créer une fonction JavaScript qui créera le lien d'intégration approprié pour une liste de lecture utilisateur spécifiée dans Spotify.

À partir de maintenant, j'ai une variable de session dans le titre de mon application Flask 'playlist_id' qui contient l'ID de playlist Spotify que je veux et une fonction JavaScript qui devrait mettre à jour l'attribut src dans l'élément iframe pour les listes de lecture Spotify intégrées.

@app.route("/playlist/build", methods=['GET', 'POST'])
def build():

    if request.method == 'GET':
        print(request.method)
        return render_template("loading.html")

    elif request.method == 'POST':
        print(request.method)
        # Twython
        OAUTH_TOKEN = session.get('auth_oauth_token')
        OAUTH_TOKEN_SECRET = session.get('auth_token_secret')
        OAUTH_VERIFIER = session.get('oauth_verifier')

        auth_client = Twython(consumer_key, consumer_secret, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
        auth_creds = auth_client.get_authorized_tokens(OAUTH_VERIFIER)

        twitter = Twython(consumer_key, consumer_secret, auth_creds['oauth_token'], auth_creds['oauth_token_secret']) # Authenticated Twython instance (used to access user Twitter account information)

        # Spotipy
        access_token = session.get("spotify_access_token")
        sp = spotipy.Spotify(auth=access_token) # Authenticated Spotipy instance (used to access user Spotify account information)

        # Collecting and filtering posted statuses from user's Twitter account for Spotify links
        t_screename = twitter.get_account_settings()['screen_name']
        statuses = get_user_statuses(t_screename, twitter)
        spotify_urls = filter_statuses(statuses)

        # Using found Spotify tracks to build a tracklist
        s_screename = sp.current_user()['display_name']
        tracks = build_track_uri_list(convert_url_to_track(sp, spotify_urls))

        # Creating playlist and adding found tracks (Note: Only adds most recent 100 songs ~ issues with limits on the Spotify API)
        playlist_id = create_spotify_playlist(sp, s_screename)
        add_tracks(sp, s_screename, playlist_id, tracks)

        session['playlist_id'] = playlist_id

        return 'done'
<iframe id="playlist-embed" src="getPlaylistLink()" width="300" height="380" frameborder="0" allowtransparency="true" allow="encrypted-media"></iframe>

    <script>
     function getPlaylistLink() {
         var playlist_id = {{ session['playlist_id'] }};
         var pid_string = playlist_id.toString();

         var embedUrlPrefix = "https://open.spotify.com/embed/playlist/";

         var src = embedUrlPrefix.concat(pid_string);
         // var src = 'https://open.spotify.com/embed/playlist/' + String(playlist_id);
         console.log(src);
         return src
      }
      document.onload = function() {
      document.getElementById('playlist-embed').src=getPlaylistLink();
      };
    </script>

Je reçois toujours une erreur 404 pour l'URL renvoyée par cette fonction même si elle semble être correcte lorsque je la poste dans mon navigateur. La console semble également attraper la chaîne, donc je ne comprends vraiment pas pourquoi la fonction ne fonctionne pas correctement.

Un exemple de la console lors de l'exécution de cette application:

<script>
     function getPlaylistLink() {
         var playlist_id = 3n6Sa0lMIl4Dr293oUYspr;
         var pid_string = playlist_id.toString();

         var embedUrlPrefix = "https://open.spotify.com/embed/playlist/";

         var src = embedUrlPrefix.concat(pid_string);
         // var src = 'https://open.spotify.com/embed/playlist/' + String(playlist_id);
         console.log(src);
         return src
      }
      document.onload = function() {
      document.getElementById('playlist-embed').src=getPlaylistLink();
      };
</script>
0
Mikal Hayden-Gates 3 nov. 2019 à 22:06

1 réponse

@ThiefMaster a raison. Vous n'avez pas besoin d'utiliser javascript pour ce type de requêtes "personnalisées". Sauf si vous souhaitez effectuer des mises à jour du lien sans recharger la page (pour cela il bouclera sur une requête GET).

Plus: La valeur de la variable javascript "playlist_id" est une chaîne, elle doit donc être déclarée avec var playlist_id = "{{ session['playlist_id'] }}";, donc "pid_string" n'est pas nécessaire.

0
Jeremy-F 3 nov. 2019 à 19:21