AFrozenPerson
AFrozenPerson

Reputation: 1

TypeError: string indices must be integers when making rest api request

When I try to parse a rest api data, it raises TypeError.

This is my code:

def get_contracts():

    response_object = requests.get(
        "https://testnet-api.phemex.com/md/orderbook?symbol=BTCUSD"
    )
    print(response_object.status_code)

    for contract in response_object.json()["result"]["book"]:
        print(contract["asks"])


get_contracts()

Any tip or solution will be very welcomed. Thanks in advance.

Edit/Update:

For some reason I am not able to select a specific key in the format above, its only possible if I do it like this:

data = response_object.json()['result']['book']['asks']

  print(data)

I will try to work my code around that. Thanks for everyone who helped.

Upvotes: 0

Views: 124

Answers (3)

SimonT
SimonT

Reputation: 1019

You need to iterate through asks, not book.
You have a nested dictionary where asks is a nested list.
If you simply click on the link you get getting, or print out your response_object.json() you would see the structure.

for foo in response_object.json()['result']['book']['asks']:
    print(foo)

Although generally it's better to assign your response_object to a variable.

data = response_object.json()

for foo in data['result']['book']['asks']:  
    print(foo)

Upvotes: 1

Miguel Prz
Miguel Prz

Reputation: 13792

This code review may help you:

import requests

url = "https://testnet-api.phemex.com/md/orderbook?symbol=BTCUSD"
response_object = requests.get(url)

data = response_object.json()
# Printing your data helps to inspect the structure
# print(data)

# This is the list you are looking for:
asks = data['result']['book']['asks']

for ask in asks:
    print(ask)

Upvotes: 1

Alejandro A
Alejandro A

Reputation: 1190

It looks like you are trying to access something that is not there, hence the KeyError.

I would debug, a simple print, the JSON object you are getting as answer and make sure that the keys you are trying to access are there.

Upvotes: 0

Related Questions