【问题标题】:How do I properly request information from this API?如何正确地从此 API 请求信息?
【发布时间】:2020-03-30 05:42:01
【问题描述】:

正如标题所说,我在从 API 访问信息时遇到问题。这是我在运行函数时收到的消息:

{'message': 'no Route matched with those values'}

这是完整代码:API 密钥被屏蔽只是因为。

import tkinter as tk
import requests

# API Key : xxxxxx-xxxx-xxxxx-xxxx-xxxxxxx
# Player Stats Request: https://api.fortnitetracker.com/v1/profile/{platform}/{epic-nickname}


squad = {}
platforms = ['xb1', 'psn', 'pc']


def get_player(player):
    headers = {'TRN-Api-Key': 'xxxxxx-xxxx-xxxxx-xxxx-xxxxxxx'}
    url = 'https://api.fortnitetracker.com/v1/profile'
    params = {'platform': 'pc', 'epic-nickname': player}
    response = requests.get(url, params=params, headers=headers)
    print(response.json())


# setting up the screen
root = tk.Tk()
root.geometry("800x600")
root.maxsize(800, 600)
root.title("Fortnite Squad Leaderboard")
root.iconphoto(True, tk.PhotoImage(file="bigpot.png"))

# background image
background_img = tk.PhotoImage(file='fortnitebg.png')
background_label = tk.Label(root, image=background_img)
background_label.place(relwidth=1, relheight=1)

top_frame = tk.Frame(root, bg="lightblue")
top_frame.place(relx=0, rely=0, relwidth=0.4, relheight=0.06)

player_search_button = tk.Button(top_frame, text="Player Search", command=lambda: 
get_player(player_search.get()))
player_search_button.place(relx=0.7, rely=0.2, relwidth=0.28, relheight=0.6)

player_search = tk.Entry(top_frame)
player_search.place(relx=0.05, rely=0.2, relwidth=0.63, relheight=0.6)


root.mainloop()

【问题讨论】:

  • 可能您应该将platformepic-nickname 值合并到url 本身中,而不是将它们作为params 提交。

标签: json python-3.x api


【解决方案1】:

URL https://api.fortnitetracker.com/v1/profile/{platform}/{epic-nickname} 接受参数 platformepic-nickname 作为 URL 参数 而不是 查询参数

查询参数是您在 URL 末尾添加的参数,例如 ?k=v&k1=v1,而 URL 参数是 URL 的一部分。

所以 URL 应该看起来像

https://api.fortnitetracker.com/v1/profile/pc/player

所以不要这样做

url = 'https://api.fortnitetracker.com/v1/profile'
params = {'platform': 'pc', 'epic-nickname': player}
response = requests.get(url, params=params, headers=headers)

你应该这样做

url = f'https://api.fortnitetracker.com/v1/profile/pc/{player}'
response = requests.get(url, headers=headers)

这一定适合你。

【讨论】:

  • 感谢克里斯这工作!你真棒。您介意在 URL 之前解释 f 的作用吗?我理解它允许将播放器变量调用到 url 中,但我以前从未见过这种情况。我一周前才开始编程。
  • 它是 .format() 函数的替代品。你可以在这里阅读它docs.python.org/3/reference/lexical_analysis.html#f-strings
猜你喜欢
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
相关资源
最近更新 更多