feat: add barter calculator page

This commit is contained in:
serversdwn
2026-03-26 05:04:13 +00:00
parent 7650633af4
commit 90f2601c1d
9 changed files with 484 additions and 1 deletions

71
app.py
View File

@@ -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)