sync util scripts

This commit is contained in:
linguini
2026-07-31 01:41:46 +02:00
parent 588fa6f62b
commit 21c7fde12d
4 changed files with 580 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
import sqlite3
import requests
import time
DB = "paintingzz.db"
BATCH_SIZE = 50
conn = sqlite3.connect(DB)
cur = conn.cursor()
# Get all QIDs that still need labels
cur.execute("""
SELECT qid
FROM wikidata_entities
WHERE label IS NULL
""")
qids = [row[0] for row in cur.fetchall()]
print(f"{len(qids)} entities to resolve.")
for start in range(0, len(qids), BATCH_SIZE):
batch = qids[start:start + BATCH_SIZE]
print(f"Processing {start + 1} - {start + len(batch)}")
response = requests.get(
"https://www.wikidata.org/w/api.php",
params={
"action": "wbgetentities",
"ids": "|".join(batch),
"props": "labels",
"languages": "en",
"format": "json"
},
headers={
# Wikidata appreciates a descriptive User-Agent
"User-Agent": "WikidataLabelResolver/1.0 (personal script)"
}
)
response.raise_for_status()
entities = response.json()["entities"]
for qid, entity in entities.items():
labels = entity.get("labels", {})
# Prefer English, otherwise use any available label
if "en" in labels:
label = labels["en"]["value"]
elif labels:
label = next(iter(labels.values()))["value"]
else:
label = None
cur.execute(
"""
UPDATE wikidata_entities
SET label = ?
WHERE qid = ?
""",
(label, qid)
)
conn.commit()
# Be polite to Wikidata
time.sleep(6)
conn.close()
print("Done!")