feat(scraper): bouton Actualiser les offres + API /scraping/trigger#2
Merged
Conversation
Permet de relancer le scrape depuis la page /scraper.php en 1 clic,
sans attendre le cron 03:00 UTC.
Backend (api/)
- scheduler.trigger_scrape_now() : ajoute un job APScheduler one-shot
(DateTrigger now+2s) avec id manual_<timestamp>. Anti-double-clic :
refuse si un job manuel est déjà en file.
- Nouvelle route POST /scraping/trigger : 200 ok / 409 already_queued
/ 503 scheduler_disabled. Rate-limit global 120/min déjà en place.
- Nouvelle route GET /scraping/status : renvoie les 3 derniers runs
(id, status, offers_found/new/updated, started_at) pour polling UI.
- Blueprint scraping enregistré dans create_app().
Frontend (frontend/)
- /api/trigger_scrape.php : proxy curl vers l'API Flask Docker-network
(api:5001), évite CORS et URL absolue exposée au client.
- /scraper.php : bouton "Actualiser les offres" (cta-red) dans le header
avec Alpine x-data="scrapeTrigger". États loading/running/done avec
spinner + dots animés. Toast feedback succès/erreur.
- Polling automatique /scraping/status toutes les 5s pendant un run.
- Quand le run termine : toast "+N nouvelles offres" + reload auto
pour refléter la nouvelle data partout.
- Cache-busting CSS : href="/assets/css/*.css?v={{ now|date('U') }}"
pour forcer le navigateur à recharger après un rebuild.
Fix (docker-compose.yml)
- environment: ne définit plus FRANCE_TRAVAIL_CLIENT_ID/_SECRET avec
${VAR:-} car ça écrasait la valeur fournie par env_file .env.local
(docker-compose précedence : environment > env_file). Les credentials
viennent maintenant uniquement de .env.local, via env_file.
Test E2E réussi : POST /scraping/trigger → run terminé en 21s →
+48 offres nouvelles en base.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/scraper.phpqui lance un scrape manuel sans attendre le cron 03:00 UTC.POST /scraping/trigger(Flask) qui enfile un job APScheduler one-shot.GET /scraping/statuspour polling UI./api/trigger_scrape.phpqui évite CORS et cache l'URL du container.UX
/scraping/status+N nouvelles offrespuis reload auto pour montrer la nouvelle data partout sur le siteFix bonus
docker-compose.yml: les lignesFRANCE_TRAVAIL_CLIENT_ID: ${…:-}dansenvironment:écrasaient silencieusement la valeur de.env.local(docker précédenceenvironment > env_file). Supprimé. Les credentials viennent maintenant deenv_fileseulement.Test plan
POST /scraping/trigger→ 200 + job_idalready_queued→ 409🤖 Generated with Claude Code