繁体   English   中英

Python Flask - 从 API 中获取值并将其打印到 Z4C4AD5FCA2E7A1AA48DBB1CED003

[英]Python Flask - Get values from an API and print it to HTML

我今天早些时候确实提出了一个问题,但几个小时前我意识到我正在尝试制作一个新的 API。 现在的问题是我需要在我的网站上获取每个产品名称、销售价格和购买价格以及更多内容。 到目前为止,我已经做到了:

import requests
from flask import Flask, render_template

full_list = list()

app = Flask(__name__)

f = requests.get(
    "https://api.hypixel.net/skyblock/bazaar?key=[key is supposed to be secret]").json()

for x in product:
    buyPrice = f["products"][x]["buy_summary"][0]["pricePerUnit"]

    @app.route('/')
    def price():
        return render_template("index.html", product=product, buyprice=buyPrice)

    if __name__ == "__main__":
        app.run(debug=True)

产品 API 看起来有点像这样,我不能全部贴出来,因为它很大:

{
    "products": {
        "product_id": "BROWN_MUSHROOM",
        "sell_summary": [
            "amount": 3865,
            "pricerPerUnit": 14.8,
            "orders": 2
        ],
        "buy_summary": [
            "amount": 704,
            "pricerPerUnit": 15.8,
            "orders": 1
        ],
        "quick_status": {
            "productId": "BROWN_MUSHROOM",
            "sellPrice": 14.527416975007378,
            "sellVolume": 915286,
            "sellMovingWeek": 23745501,
            "sellOrders": 40,
            "buyPrice": 15.898423574723452,
            "buyVolume": 673646,
            "buyMovingWeek": 8011243,
            "buyOrders": 54
    }
}

现在我想要的是“product_id”,它可以从一开始或者从“quick_status”中获取,我还想要来自 buy/sell_summary 的 pricePerUnit、Amount 和 Orders。

我该怎么做呢? 我试图将所有值存储在一个名为“price”的单独数组中,并使用“price.append(buyPrice)”来添加,但它只添加了一个产品价格,我想拥有每个产品的价格。

它最终应该是这样的:

  1. PRODUCT_ID
  2. 购买价格:XXX
  3. 售价:XXX
  4. 买单:X 数量为 X
  5. 买单:X 数量为 X
  6. 购买量:XXX
  7. 卖出量:XXX

当然,我不需要所有代码,只需要一点帮助来了解如何从 API 中提取这些值,并将其放入我的 HTML 代码中。

目前我的 HTML 看起来像这样:

{% for item in product %}
    <h1>{{ item }}</h1>
    {% endfor %}

我是 flask 的新手,这是我的第一个项目:)

看起来此信息应显示在表格中。 您还可以使用 javascript 库数据表来快速将分页和排序等内容添加到表中。

我已经回答了您可能希望阅读的两个问题,第一个是关于如何处理这样的数据,另一个是关于将硬编码的表格标题保留在模板之外

我想出了实现此功能的 repo search-generic-tables (链接在第一个答案中)。 它还与您的数据兼容,只需对 API 的 JSON 响应进行一些最小处理。

对于您的数据,您想要显示的所有内容似乎都在每个产品的quick_status object 中。

所以考虑到你有f : JSON,由于requests转换为字典,你可以这样做:

original_items = [] # Create an empty list
for _, data in f['products'].items():
     original_items.append(data['quick_status'])

out现在是一个列表,其中每个项目是quick_status JSON object 作为 python 字典:

>>> print(out[0]) # To obtain the first dictionary:
{'buyMovingWeek': 8018735,
 'buyOrders': 70,
 'buyPrice': 15.848714783373357,
 'buyVolume': 624894,
 'productId': 'BROWN_MUSHROOM',
 'sellMovingWeek': 23716981,
 'sellOrders': 22,
 'sellPrice': 12.7,
 'sellVolume': 396395}

当然,编写该代码的更快方法是使用有据可查的列表理解,因此值得一读:

original_items = [data['quick_status'] for _, data in f['products'].items()]

现在可以在链接代码中使用它,以在前端得到以下结果:

桌子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM