Вызов API Python с выводом в Flask forloop - PullRequest
0 голосов
/ 02 октября 2019

Я пишу что-то на веб-питоне с использованием фляги, я в основном отображаю все свои записи из базы данных в виде списка через шаблон фляги в цикле for.

Теперь я хочу вызвать Spotify API и отобразить изображение обложки из Spotify API рядом с каждым из списков воспроизведения, но я не могу понять, как сопоставить идентификатор и сделать вызов все в цикле for

Могу ли я сделать вызов API из Flask или, возможно, вызвать функцию с вызовом в этом цикле? Я также пробовал это с вызовом jQuery AJAX, но отображаемое изображение было одинаковым для всех элементов из последнего элемента из базы данных

import os
import requests
import json
from dotenv import load_dotenv
from datetime import datetime
##loading credenditls from seperate file
from credentials import auth_data, auth_string
from flask import Flask, redirect, render_template, request, session, url_for
from flask_pymongo import PyMongo
from bson.objectid import ObjectId
#enviorement virables loading
load_dotenv()
DBNAME = os.getenv("DBNAME")
DATABASEURI = os.getenv("URI")
#calling api for spotify token
token_response = requests.post('https://accounts.spotify.com/api/token',
                    data = auth_data,
                    headers = auth_string,)  
token_response_data = token_response.json()
##token
the_token = token_response_data['access_token']

app = Flask(__name__)

#Connecting to database
app.config["MONGO_DBNANE"] = DBNAME
app.config["MONGO_URI"] = DATABASEURI

mongo = PyMongo(app)

def get_playlist_image(id):
    image_response = requests.get('https://api.spotify.com/v1/playlists/' + id + '/images',
                           headers={'Authorization':'Bearer '+ the_token})
    image_response_data = image_response.json()
    image_url = image_response_data[0]['url']
    return image_url

@app.route('/')
@app.route('/home')
def display():
    the_playlists = mongo.db.playlists.find()
    for list in the_playlists:
        spotifyid = list['spotify_id']
        the_image_url = get_playlist_image(spotifyid)
    return render_template("home.html", playlists=mongo.db.playlists.find(), image_url=the_image_url, spotifyid = list['spotify_id']
    )

1 Ответ

0 голосов
/ 02 октября 2019

Хорошо, я должен был быть немного глупым, я нашел способ. Вы можете вызвать функцию с переменной в шаблоне колбы

Функция Python:

    @app.route('/')
@app.route('/home')
def display():
    def get_playlist_image(id):
        image_response = requests.get('https://api.spotify.com/v1/playlists/' + id + '/images',
                           headers={'Authorization':'Bearer '+ the_token})
        image_response_data = image_response.json()
        image_url = image_response_data[0]['url']
        return image_url
    return render_template("home.html", playlists=mongo.db.playlists.find(), get_playlist_image=get_playlist_image)

HTML-шаблон:

 <div id="api">
                    <img src="{{get_playlist_image(p.spotify_id)}}"/>
                </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...