Stop the CI from re-fetching crests, cache their URLs instead
All checks were successful
Build TV app / build (push) Successful in 2m49s
All checks were successful
Build TV app / build (push) Successful in 2m49s
Fetching 56 images on every run earned nothing but rate limits, and the CI artefact is a test build that does not need the badges — the shield fallback covers it. The resolved image URLs are cached in tools/crest-sources.json, which is plain text and safe to commit, so a local run needs one request per club instead of two and can resume after a rate limit. The artwork itself stays out of the repository. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -14,11 +14,16 @@ import urllib.parse
|
||||
import urllib.request
|
||||
|
||||
OUT = sys.argv[1] if len(sys.argv) > 1 else "app/src/main/assets/crests"
|
||||
URLS = "tools/crest-sources.json"
|
||||
SRC = "app/src/main/java/dev/castarr/tv/data/TeamFilters.kt"
|
||||
SUMMARY = "https://de.wikipedia.org/api/rest_v1/page/summary/"
|
||||
UA = {"User-Agent": "Castarr build script (private use)"}
|
||||
|
||||
os.makedirs(OUT, exist_ok=True)
|
||||
# Image URLs are plain text and safe to commit; the artwork itself is not.
|
||||
sources = {}
|
||||
if os.path.exists(URLS):
|
||||
sources = json.load(open(URLS, encoding="utf-8"))
|
||||
kotlin = open(SRC, encoding="utf-8").read()
|
||||
entries = re.findall(r'club\((.*?)\)\s*,\s*(?://.*)?$', kotlin, re.M | re.S)
|
||||
clubs = []
|
||||
@@ -35,11 +40,15 @@ for key, full_name in clubs:
|
||||
skipped += 1
|
||||
continue
|
||||
try:
|
||||
url = SUMMARY + urllib.parse.quote(full_name)
|
||||
with urllib.request.urlopen(urllib.request.Request(url, headers=UA), timeout=20) as r:
|
||||
thumb = json.load(r).get("thumbnail", {}).get("source")
|
||||
thumb = sources.get(key)
|
||||
if not thumb:
|
||||
raise ValueError("no thumbnail")
|
||||
url = SUMMARY + urllib.parse.quote(full_name)
|
||||
with urllib.request.urlopen(urllib.request.Request(url, headers=UA), timeout=20) as r:
|
||||
thumb = json.load(r).get("thumbnail", {}).get("source")
|
||||
if not thumb:
|
||||
raise ValueError("no thumbnail")
|
||||
sources[key] = thumb.split("?")[0]
|
||||
thumb = sources[key]
|
||||
with urllib.request.urlopen(urllib.request.Request(thumb, headers=UA), timeout=20) as r:
|
||||
data = r.read()
|
||||
with open(target, "wb") as f:
|
||||
@@ -51,4 +60,8 @@ for key, full_name in clubs:
|
||||
# Wikipedia rate-limits bursts; this runs rarely and caches.
|
||||
time.sleep(1.2)
|
||||
|
||||
with open(URLS, "w", encoding="utf-8") as f:
|
||||
json.dump(dict(sorted(sources.items())), f, indent=2, ensure_ascii=False)
|
||||
f.write("\n")
|
||||
|
||||
print(f"crests: {fetched} geladen, {skipped} vorhanden, {failed} fehlgeschlagen")
|
||||
|
||||
Reference in New Issue
Block a user