# Collecteur de PDF officiels Ce dossier contient un collecteur local pour repérer, télécharger et ranger les PDF officiels liés aux cycles 3 et 4 depuis des pages sources de l'État français, principalement éduscol. Le script est volontairement prudent : - il ne suit que les domaines listés dans `seeds.json` ; - il limite la profondeur de crawl ; - il fonctionne en `dry-run` par défaut ; - il calcule un SHA256 pour éviter les doublons ; - il range les fichiers par `Cycle 3` / `Cycle 4` puis par matière ; - il met les cas ambigus dans `A_trier`. ## Lancer un test local Depuis `Programme` : ```powershell python .\pdf_collecteur\collect_official_pdfs.py --dry-run ``` Pour limiter le test à peu de pages : ```powershell python .\pdf_collecteur\collect_official_pdfs.py --dry-run --max-depth 1 --limit-pages 20 ``` Pour repartir d'un manifest/log vide pendant les essais : ```powershell python .\pdf_collecteur\collect_official_pdfs.py --dry-run --fresh --max-depth 1 --limit-pages 20 ``` Si Python échoue avec `CERTIFICATE_VERIFY_FAILED` sur Windows, utiliser temporairement : ```powershell python .\pdf_collecteur\collect_official_pdfs.py --dry-run --insecure --max-depth 1 --limit-pages 20 ``` ## Télécharger les nouveaux PDF ```powershell python .\pdf_collecteur\collect_official_pdfs.py --download ``` Sans `--download`, aucun PDF n'est écrit dans les dossiers `Cycle 3` / `Cycle 4`. ## Sorties Le script écrit dans `pdf_collecteur/state/` : - `manifest.csv` : catalogue des PDF vus/téléchargés ; - `crawl_log.jsonl` : journal technique ligne par ligne ; - `downloads_tmp/` : fichiers temporaires pendant le téléchargement. ## Ajouter des sources Modifier `seeds.json` : ```json { "url": "https://eduscol.education.fr/...", "cycle_hint": "Cycle 3", "subject_hint": "Math" } ``` Les hints ne forcent pas le classement, mais ils servent de point d'appui quand le lien PDF est peu explicite. ## Déploiement VPS Le script n'a pas de dépendance externe Python. Sur VPS : ```bash cd /chemin/vers/Programme python3 pdf_collecteur/collect_official_pdfs.py --dry-run --max-depth 2 python3 pdf_collecteur/collect_official_pdfs.py --download --max-depth 2 ``` Pour automatiser, commencer avec un cron en `--dry-run`, relire `manifest.csv`, puis passer en `--download` quand les classements sont satisfaisants. ## Indexer les PDF avec Poppler Après téléchargement, générer les textes et métadonnées dans le format historique : ```powershell python .\pdf_collecteur\index_pdfs.py --fresh ``` Sur Windows avec Poppler installé via WinGet, utiliser plutôt le script PowerShell : ```powershell .\pdf_collecteur\index_pdfs.ps1 -Fresh ``` Le résultat est écrit dans : ```text extractions_pdf_indexed_global/ ``` Format : - `001.txt`, `002.txt`, etc. : texte extrait avec `pdftotext -layout`. - `001.pdfinfo.txt`, `002.pdfinfo.txt`, etc. : métadonnées `pdfinfo`. - `manifest.csv` : correspondance entre ID, chemin PDF source, hash et statut. Pour inclure aussi les PDF placés à la racine de `Programme` : ```powershell python .\pdf_collecteur\index_pdfs.py --fresh --include-root-pdfs ```