I can't find the wrong part myself, but somehow I get an error.
Please let me know who you are.
By the way, this is using the API of the game Crash Royale.
The error codes are as follows:
Traceback (most recent call last):
File "C:\Users\mto\Desktop\python_lesson\CRL\crl_api.py", line 53, in <module>
print(battle_info()[0]["type"])
TypeError: string indications must be integrers
Actual Code
import json
import requests
access_key=# omitted here
URL='https://api.clashroyale.com/v1'
def battle_info():
target_api=URL+"/players/"
playerTag="%238QRCJQ9Y"
url=target_api+playerTag+"/battlelog"
headers = {
"content-type": "application/json; charset=utf-8",
"cache-control": "max-age=60",
"authorization": "Bearer%s" %access_key}
r=requests.get(url,headers=headers)
data=r.json()
result=json.dumps(data,indent=4)
return result
print(battle_info()[0]["type"])
Also, if you output the following battery_info(), you will see the following
#execution code
print(battle_info())
# result of execution result
[
{
"type": "challenge",
"battleTime": "20190509T081821.000Z"
# Omit the continuation
In your current code, you have decoded the response you have obtained in the API with r.json()
and converted it into Python's List, Dictionary (data
) into a string with dump
.
So it's like doing this.
jsonText='\
[
{
"type": "challenge",
"battleTime": "20190509T081821.000Z"
...
'''
print(jsonText[0]["type"])
jsonText[0]
returns the first single character '['
as a string, so you are trying to reference an index called ["type"]
for that string, so TypeError:string indications must be integers is an error.
You may want to return data
as the return value for battle_info()
.
def battle_info():
target_api=URL+"/players/"
playerTag="%238QRCJQ9Y"
url=target_api+playerTag+"/battlelog"
headers = {
"content-type": "application/json; charset=utf-8",
"cache-control": "max-age=60",
"authorization": "Bearer%s" %access_key}
r=requests.get(url,headers=headers)
data=r.json()
return data
Try it.
© 2024 OneMinuteCode. All rights reserved.