recipe box — import-by-URL recipe manager with a scalable cooking view (bunko.me/recipes)
- Python 43.6%
- HTML 40.2%
- JavaScript 15.7%
- Dockerfile 0.5%
Serious Eats / Simply Recipes / Allrecipes / Food Network sit behind Cloudflare Bot Management, which fingerprints the HTTP client (TLS/HTTP2) and returns a 403 "challenge" regardless of source IP — so neither a User-Agent tweak nor a residential proxy gets through (confirmed: cf-mitigated: challenge on both the datacenter IP and an ms-01-proxied residential IP). Switch scrape.py's fetch to curl_cffi with browser impersonation, trying chrome124 then safari — the latest Chrome fingerprint is itself challenged, while 124 and Safari pass. Unblocks all four publishers for both paste-a-link import and the AI link verifier. - scrape._fetch(): impersonation chain, configurable via RECIPES_IMPERSONATE. - scrape.can_import(): shared verify path; the AI verifier now calls it (concurrently in threads) instead of a separate httpx fetch, so verification matches the real import exactly. Dropped the old "avoid these sites" steering in ai.py — they import fine now, so the model can recommend them again. - curl_cffi==0.15.0 added to requirements. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| app | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||