我正在学校编程,很快就需要编写我的最后一部分。下面的程序(用python的编程语言编写)作为一个程序我只是为了练习访问API而编写。 我正在尝试基于游戏访问API。该程序的想法是每隔30秒检查一次这个API以检查数据的变化,通过在运行时立即存储到数据集('baseRank'和'basePP'),然后将这些数据与新数据进行比较30秒后 这是我的计划:
import time
apiKey = '###'
rankDifferences = []
ppDifferences = []
const = True
username = '- Legacy'
url = "https://osu.ppy.sh/api/get_user?u={1}&k={0}".format(apiKey,username)
import urllib.request, json
with urllib.request.urlopen(url) as url:
stats = json.loads(url.read().decode())
stats = stats[0]
basePP = stats['pp_raw']
print(basePP)
baseRank = stats['pp_rank']
print(baseRank)
while const == True:
time.sleep(30)
import urllib.request, json
with urllib.request.urlopen(url) as url:
check = json.loads(url.read().decode())
check = check[0]
rankDifference = baseRank + check['pp_rank']
ppDifference = basePP + check['pp_raw']
baseRank = check['pp_raw']
basePP = check['pp_raw']
if rankDifference != 0:
print(rankDifference)
if ppDifference != 0:
print(ppDifference)`
请注意,在我写'apiKey ='###''的地方,我实际上使用的是一个真正的,有效的API密钥,但我隐藏了它,因为该网站要求你不要与你分享你的api密钥其他。 以下是运行后shell的状态:
5206.55
12045
追踪(最近一次呼叫最后一次):
文件“C:/ Users / ethan / Documents / osu API Accessor.py”,第23行,in 使用urllib.request.urlopen(url)作为url: 档案
“C:\ Users \ ethan \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py”,>第223行,在urlopen中 return opener.open(url,data,timeout)
档案
“C:\ Users \ ethan \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ urllib \ request.py”,>第518行,打开 protocol = req.type
AttributeError:'HTTPResponse'对象没有属性'type'
如您所见,它确实打印了'basePP'和'baseRank',证明我可以访问此API。问题似乎是当我第二次尝试访问它时。说实话,我不完全确定这个错误意味着什么..所以如果你不介意花时间解释和/或帮助解决这个错误,我们将不胜感激。
旁注:这是我第一次使用这个论坛,所以如果我做错了什么,我很抱歉!
答案 0 :(得分:1)
问题似乎出现在:
with urllib.request.urlopen(url) as url:
stats = json.loads(url.read().decode())
您对url
变量的使用正在改变它,因此当您稍后尝试使用它时它无法正常工作。
尝试类似:
with urllib.request.urlopen(url) as page:
stats = json.loads(page.read().decode())
它应该没问题。