Initial OnlyScavs: keys, ratings, grid icons
This commit is contained in:
125
import_keys.py
Normal file
125
import_keys.py
Normal file
@@ -0,0 +1,125 @@
|
||||
import requests
|
||||
import sqlite3
|
||||
import sys
|
||||
|
||||
DB_PATH = "tarkov.db"
|
||||
API_URL = "https://api.tarkov.dev/graphql"
|
||||
|
||||
GRAPHQL_QUERY = """
|
||||
query {
|
||||
items(types: [keys]) {
|
||||
id
|
||||
name
|
||||
shortName
|
||||
weight
|
||||
wikiLink
|
||||
gridImageLink
|
||||
properties {
|
||||
... on ItemPropertiesKey {
|
||||
uses
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
def fetch_keys():
|
||||
response = requests.post(
|
||||
API_URL,
|
||||
json={"query": GRAPHQL_QUERY},
|
||||
timeout=30
|
||||
)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
|
||||
if "errors" in data:
|
||||
raise RuntimeError(data["errors"])
|
||||
|
||||
return data["data"]["items"]
|
||||
|
||||
def upsert_keys(conn, keys):
|
||||
inserted = 0
|
||||
updated = 0
|
||||
skipped = 0
|
||||
|
||||
cursor = conn.cursor()
|
||||
|
||||
for k in keys:
|
||||
api_id = k.get("id")
|
||||
name = k.get("name")
|
||||
short_name = k.get("shortName")
|
||||
weight = k.get("weight")
|
||||
wiki_url = k.get("wikiLink")
|
||||
grid_image_url = k.get("gridImageLink")
|
||||
uses = None
|
||||
|
||||
props = k.get("properties")
|
||||
if props and "uses" in props:
|
||||
uses = props["uses"]
|
||||
|
||||
if not api_id or not name:
|
||||
skipped += 1
|
||||
continue
|
||||
|
||||
cursor.execute(
|
||||
"""
|
||||
SELECT id FROM keys WHERE api_id = ?
|
||||
""",
|
||||
(api_id,)
|
||||
)
|
||||
row = cursor.fetchone()
|
||||
|
||||
if row:
|
||||
cursor.execute(
|
||||
"""
|
||||
UPDATE keys
|
||||
SET name = ?, short_name = ?, weight_kg = ?, uses = ?, wiki_url = ?, grid_image_url = ?
|
||||
WHERE api_id = ?
|
||||
""",
|
||||
(name, short_name, weight, uses, wiki_url, grid_image_url, api_id)
|
||||
)
|
||||
updated += 1
|
||||
else:
|
||||
cursor.execute(
|
||||
"""
|
||||
INSERT INTO keys (api_id, name, short_name, weight_kg, uses)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
""",
|
||||
(api_id, name, short_name, weight, uses, icon_url, wiki_url)
|
||||
)
|
||||
inserted += 1
|
||||
|
||||
conn.commit()
|
||||
return inserted, updated, skipped
|
||||
|
||||
def main():
|
||||
print("Fetching keys from Tarkov.dev...")
|
||||
try:
|
||||
keys = fetch_keys()
|
||||
except Exception as e:
|
||||
print("ERROR: Failed to fetch keys")
|
||||
print(e)
|
||||
sys.exit(1)
|
||||
|
||||
print(f"Fetched {len(keys)} keys")
|
||||
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
conn.execute("PRAGMA foreign_keys = ON")
|
||||
|
||||
try:
|
||||
inserted, updated, skipped = upsert_keys(conn, keys)
|
||||
except Exception as e:
|
||||
conn.rollback()
|
||||
print("ERROR: Database operation failed")
|
||||
print(e)
|
||||
sys.exit(1)
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
print("Import complete")
|
||||
print(f"Inserted: {inserted}")
|
||||
print(f"Updated: {updated}")
|
||||
print(f"Skipped: {skipped}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user