Попытка получить доступ к элементам из API дает ошибки - PullRequest
0 голосов
/ 28 мая 2020

Итак, я пытаюсь вернуть значение с плавающей запятой из API, оно находится в: products => product_name => sell / buy_summary => pricePerUnit

и может быть найдено в этом API: https://api.hypixel.net/skyblock/bazaar?key=73ac0a44-4c41-4933-a9ee-b4095be2b6d2

Когда я возвращаю его в свой HTML, я получаю сообщение об ошибке «TypeError: индексы списка должны быть целыми или срезами, а не str», я немного погуглил, а также видел другой поток здесь, в Stackoverflow, но не заставил его работать. У меня есть другой способ получить значения, который работает нормально, но проблема в том, что мне НУЖНО сохранить эти значения в переменной, чтобы запустить через нее скрипт для расчета прибыли / маржи.

Вот мой текущий код :

@app.route('/bflipper', methods=['POST', 'GET'])
def bFlipper():
    f = requests.get(
        'https://api.hypixel.net/skyblock/bazaar?key=73ac0a44-4c41-4933-a9ee-b4095be2b6d2').json()
    product_name = []
    product_sellPrice = []
    product_buyPrice = []
    for x in productNames:
        product_name.append(f["products"][x]["product_id"])
        product_buyPrice.append(
            f["products"][x]["buy_summary"]["pricePerUnit"])
        product_sellPrice.append(
            f["products"][x]["sell_summary"]["pricePerUnit"])
    if request.method == 'POST':
        userInput = request.form['coins']
        return render_template("flipper.html", userInput=userInput, product_name=product_name, product_buyPrice=product_buyPrice, product_sellPrice=product_sellPrice)
    else:
        return render_template("flipper.html", product_name=product_name, product_buyPrice=product_buyPrice, product_sellPrice=product_sellPrice)

Этот скрипт работает с массивами, поэтому мне нужно получить все "pricePerUnit" из API, каждый продукт (190+) и сохранить их в массиве, вот почему Я хотел бы иметь возможность сначала сохранить "pricePerUnit" в переменных (sellPrice и buyPrice), а затем добавить его в два разных массива, чтобы я мог запустить свой скрипт через него!

OBS: Я собираюсь нужно 'pricePerUnit' для 'sell_summary' и 'buy_summary' для каждого продукта!

Спасибо

1 Ответ

0 голосов
/ 28 мая 2020

Поскольку buySummary и sellSummary являются массивами, вам нужно использовать индекс массива, чтобы получить цену из первого элемента.

for x in productNames:
    if x in f["products"]:
        product_name.append(f["products"][x]["product_id"])
        if len(f["products"][x]["buy_summary"]) > 0:
            product_buyPrice.append(
                f["products"][x]["buy_summary"][0]["pricePerUnit"])
        if len(f["products"][x]["sell_summary"]) > 0:
            product_sellPrice.append(
                f["products"][x]["sell_summary"][0]["pricePerUnit"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...