You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Switch to On3 rankings page for headshots (one request per year)
The per-player search approach was broken because On3's search page
returns featured/popular players regardless of the query — actual
results require client-side JavaScript.
New approach: fetch /rivals/rankings/player/football/{year}/ once.
This page is fully server-rendered, contains 150+ players with both
profile hrefs (/rivals/{slug}-{id}/) and on3static.com image URLs
in the same HTML. One HTTP request per year, cached 24 hours.
buildOn3ImageMap() fetches the rankings page.
parseOn3Rankings() extracts a nameSlug → imageUrl map by finding
the on3static image closest (≤5000 chars) to each profile href.
enrichWithPhotos() looks up each CFBD recruit by normalised name slug.
Also removes all Guzzle Pool / concurrent per-player scraping code —
no longer needed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>