[英]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)”来添加,但它只添加了一个产品价格,我想拥有每个产品的价格。
它最终应该是这样的:
当然,我不需要所有代码,只需要一点帮助来了解如何从 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.