v2 Phase D: capture-first ingestion — FotMob, FIFA, weather, scorer props

Four new feeds, all verified against real tournament matches:
- FotMob (unofficial, works from the VPS again): per-shot xG/xGOT with
  pitch coords, team xG, player ratings, POTM, momentum, attacking
  zones — trimmed payloads (~87KB/match) on a gentle 90s-live/30m-idle
  cadence. Capture-first: this source could lock again any day.
- FIFA official v3: confirmed lineups with player IDs, typed XY event
  timelines (80 events for the opener), attendance + named referees,
  tactics — id-mapped via the calendar, hot while live.
- Open-Meteo: kickoff-hour weather per venue from a build-time geocoded
  venues.json (with elevation — Azteca 2,240m); fetched in the enrich
  loop inside the 48h horizon.
- DraftKings scorer props (first/last/anytime goalscorer per athlete)
  via ESPN's core propBets, insert-if-changed line history, athlete
  names resolved through a 30-day cache.

Also fixes a real resilience gap found along the way: fixture results
now persist in SQLite and restore at boot — previously a restart after
ESPN's scoreboard window moved on would silently forget a match day
(standings, model and scoreboard would all regress).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 09:19:10 +02:00
parent ae984bba7b
commit 517a86233a
9 changed files with 717 additions and 3 deletions
+101
View File
@@ -0,0 +1,101 @@
{
"generatedAt": "2026-06-12T07:16:35.623Z",
"venues": {
"Atlanta": {
"lat": 33.749,
"lon": -84.388,
"elevation": 320,
"tz": "America/New_York"
},
"Boston (Foxborough)": {
"lat": 42.0654,
"lon": -71.2478,
"elevation": 88,
"tz": "America/New_York"
},
"Dallas (Arlington)": {
"lat": 32.7357,
"lon": -97.1081,
"elevation": 184,
"tz": "America/Chicago"
},
"Guadalajara (Zapopan)": {
"lat": 20.7211,
"lon": -103.3874,
"elevation": 1565,
"tz": "America/Mexico_City"
},
"Houston": {
"lat": 29.7633,
"lon": -95.3633,
"elevation": 12,
"tz": "America/Chicago"
},
"Kansas City": {
"lat": 39.0997,
"lon": -94.5786,
"elevation": 274,
"tz": "America/Chicago"
},
"Los Angeles (Inglewood)": {
"lat": 33.9617,
"lon": -118.3531,
"elevation": 40,
"tz": "America/Los_Angeles"
},
"Mexico City": {
"lat": 19.4285,
"lon": -99.1277,
"elevation": 2240,
"tz": "America/Mexico_City"
},
"Miami (Miami Gardens)": {
"lat": 25.942,
"lon": -80.2456,
"elevation": 2,
"tz": "America/New_York"
},
"Monterrey (Guadalupe)": {
"lat": 25.6768,
"lon": -100.2565,
"elevation": 497,
"tz": "America/Monterrey"
},
"New York/New Jersey (East Rutherford)": {
"lat": 40.834,
"lon": -74.0971,
"elevation": 24,
"tz": "America/New_York"
},
"Philadelphia": {
"lat": 39.9524,
"lon": -75.1636,
"elevation": 12,
"tz": "America/New_York"
},
"San Francisco Bay Area (Santa Clara)": {
"lat": 37.3541,
"lon": -121.9552,
"elevation": 23,
"tz": "America/Los_Angeles"
},
"Seattle": {
"lat": 47.6062,
"lon": -122.3321,
"elevation": 56,
"tz": "America/Los_Angeles"
},
"Toronto": {
"lat": 43.7064,
"lon": -79.3986,
"elevation": 161,
"tz": "America/Toronto"
},
"Vancouver": {
"lat": 49.2827,
"lon": -123.1207,
"elevation": 70,
"tz": "America/Vancouver"
}
}
}