Python Flask - 从API中获取值并将其打印成HTML。

问题描述 投票:0回答:1

今天早些时候,我确实提出了一个问题,但几个小时前,我意识到有一个新的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 "中抓取,我还想要从buysell_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 %}
python json api flask
1个回答
0
投票

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

看起来这些信息应该显示在一个表格中。 你也可以使用javascript库中的datatables来快速添加分页和排序等功能到表中。

我已经回答了两个问题,你可能希望阅读,第一个是关于 如何处理这样的数据 和另一个关于 将硬编码的表头排除在模板之外。.

我想出了回波 搜索-通用表 (在第一个答案中链接),它实现了这个功能。 它也与你的数据兼容,对你的API的JSON响应进行一些最小的处理。

对于你的数据来说,看起来你想显示的所有内容都在 quick_status 每个产品的对象。

所以考虑到您有 f:JSON格式,由于有了JSON格式的帮助,它被转换为字典。requests你可以做这样的事情。

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

out 现在是一个列表,其中每个项目是... quick_status JSON对象作为一个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()]

这现在可以用在 链接码 最终在前台完成以下操作。

table

© www.soinside.com 2019 - 2024. All rights reserved.