diff --git a/app.py b/app.py index 42e95a3..f1a9432 100644 --- a/app.py +++ b/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) diff --git a/templates/barters.html b/templates/barters.html new file mode 100644 index 0000000..35e5c86 --- /dev/null +++ b/templates/barters.html @@ -0,0 +1,398 @@ + + +
+Enter flea market prices for required items to see the total rouble cost of any barter.
+ +diff --git a/templates/index.html b/templates/index.html index 9ec8296..24aa36e 100644 --- a/templates/index.html +++ b/templates/index.html @@ -176,6 +176,8 @@ Loadout Planner | Injectors + | + Barters