如何在Python中使用2个spotify端点,当一个补充另一个端点时?

时间:2017-03-06 11:22:43

标签: python python-2.7 api flask spotify

我正在学习使用Python和Flask的API,我目前正在使用Spotify API,我希望通过此终端获得来自艺术家的热门曲目: https://api.spotify.com/v1/artists/ { id} / Top-tracks ,正如您所看到的,我需要艺术家的ID来获取他们的热门曲目,因为我使用了SEARCH端点 https://api.spotify.com/v1/search?q=name&type=artist ,这给了我一个JSON与艺术家的数据,从那里我得到了id。

我的问题是,现在,我如何使用Top-Tracks端点,以及我从搜索端点获得的ID?我创建了一个名为“ide”的变量来存储艺术家的id并能够在端点的URL中连接它,但是现在我不知道我的代码在Top-Tracks URL中的位置,或者我是否需要创建另一个函数,如何使用存储的id调用我的变量。

这是我的代码:

from flask import Flask, request, render_template, jsonify
import requests

app = Flask(__name__)

@app.route("/api/artist/<artist>")
def api_artist(artist):
    params = get_id(artist)
    return jsonify(params)

@app.route("/api/track/<artist>")
def api_track(artist):
    params = get_track(artist)
    return jsonify(params)

def get_id(artist):
    headers = { 
        "client_id": "xXxXx",
        "client_secret": "XxXxX"
    }

    response = requests.get("https://api.spotify.com/v1/search?q=" + artist +"&type=artist", headers=headers)

    if response.status_code == 200:
        print(response.text)
        list=[]
        response_dict = response.json()
        results = response_dict["artists"]
        items = results ["items"]
        for value in items:
            list.append(value["id"])

    params = {
        "id": list[0]
    }

    return list[0]

这就是我尝试获得顶级曲目的方式,但它不起作用。

def get_track(artist):
    ide = list[0]
    can = requests.get("https://api.spotify.com/v1/artists/"+ ide + "/top-tracks?country=ES", headers=headers)
    return can

1 个答案:

答案 0 :(得分:0)

看起来对learn a bit more about python scoping有帮助。在list[0]get_track未定义的原因是它只能在您定义它的get_id中访问。 get_track中的细微更改可让您访问get_track内的ID:

def get_track(artist):
    # get the ID here so that you have access to it
    ide = get_id(artist)
    can = requests.get("https://api.spotify.com/v1/artists/"+ ide + "/top-tracks?country=ES", headers=headers)
    return can

希望有所帮助!