feat: add barter calculator page
This commit is contained in:
71
app.py
71
app.py
@@ -945,5 +945,76 @@ def meds():
|
||||
situations=situations)
|
||||
|
||||
|
||||
@app.route("/barters")
|
||||
def barters():
|
||||
import requests as _req
|
||||
|
||||
API_URL = "https://api.tarkov.dev/graphql"
|
||||
query = """
|
||||
{
|
||||
barters(lang: en) {
|
||||
id
|
||||
trader { name }
|
||||
level
|
||||
taskUnlock { name }
|
||||
requiredItems {
|
||||
item { id name shortName iconLink wikiLink }
|
||||
count
|
||||
}
|
||||
rewardItems {
|
||||
item { id name shortName iconLink wikiLink }
|
||||
count
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
try:
|
||||
resp = _req.post(API_URL, json={"query": query}, timeout=15)
|
||||
data = resp.json()
|
||||
raw_barters = data.get("data", {}).get("barters", [])
|
||||
except Exception:
|
||||
raw_barters = []
|
||||
|
||||
barter_list = []
|
||||
for b in raw_barters:
|
||||
reward_items = b.get("rewardItems", [])
|
||||
required_items = b.get("requiredItems", [])
|
||||
if not reward_items or not required_items:
|
||||
continue
|
||||
|
||||
# Use first reward item as the "output" item
|
||||
reward = reward_items[0]
|
||||
reward_item = reward.get("item") or {}
|
||||
reward_count = reward.get("count", 1)
|
||||
|
||||
required = []
|
||||
for ri in required_items:
|
||||
item = ri.get("item") or {}
|
||||
required.append({
|
||||
"id": item.get("id", ""),
|
||||
"name": item.get("name", "Unknown"),
|
||||
"short": item.get("shortName", ""),
|
||||
"icon": item.get("iconLink"),
|
||||
"count": ri.get("count", 1),
|
||||
})
|
||||
|
||||
task_unlock = b.get("taskUnlock")
|
||||
barter_list.append({
|
||||
"id": b.get("id", ""),
|
||||
"trader": (b.get("trader") or {}).get("name", "Unknown"),
|
||||
"level": b.get("level", 1),
|
||||
"task_unlock": task_unlock.get("name") if task_unlock else None,
|
||||
"reward_name": reward_item.get("name", "Unknown"),
|
||||
"reward_short": reward_item.get("shortName", ""),
|
||||
"reward_icon": reward_item.get("iconLink"),
|
||||
"reward_wiki": reward_item.get("wikiLink"),
|
||||
"reward_count": reward_count,
|
||||
"required": required,
|
||||
})
|
||||
|
||||
barter_list.sort(key=lambda b: (b["trader"], b["level"], b["reward_name"]))
|
||||
return render_template("barters.html", barters=barter_list)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=5000, debug=True)
|
||||
|
||||
Reference in New Issue
Block a user