# Import GTFS depuis data.gouv.fr

Le script `import_gtfs_data_gouv.php` interroge l’API publique **data.gouv.fr** (`/api/1/datasets/`) avec le tag **`gtfs`** (aligné avec le catalogue [transport.data.gouv.fr](https://transport.data.gouv.fr), moissonné sur data.gouv).

## Prérequis

- PHP 8.2+
- Extensions : `zip`, `json`
- **Recommandé** : `curl` (téléchargements et pagination plus fiables)

## Super admin (recommandé)

Dans **Super Admin** → **Transports par ville** (`/city-transports`), section **Import GTFS (data.gouv.fr)** :

1. Saisir les villes (une par ligne, comme le paramètre `?city=` de l’app).
2. Lancer **Rechercher et importer** : l’API Symfony interroge data.gouv, télécharge les ZIP, parse `routes.txt` et enregistre en base (`city_transport_gtfs_import`).
3. Les endpoints publics `/api/transports/modes` et `/api/transports/lines` utilisent ces données **automatiquement** si aucune source API manuelle n’existe pour le même mode (l’API manuelle reste prioritaire).

Pensez à exécuter la migration Doctrine après déploiement : `php bin/console doctrine:migrations:migrate`.

## Commandes CLI (script autonome)

```bash
# Aide
php scripts/import_gtfs_data_gouv.php --help

# Lister les ZIP sans rien télécharger
php scripts/import_gtfs_data_gouv.php --dry-run --max-zips=20

# Petit test : 1 page API, 5 archives
php scripts/import_gtfs_data_gouv.php --max-pages=1 --max-zips=5 --merge

# Import massif (attention : centaines de fichiers, plusieurs Go)
php scripts/import_gtfs_data_gouv.php --max-zips=0 --merge
```

## Sortie

Par défaut : `var/gtfs-import/` (déjà ignoré par `.gitignore` via `/var/`).

| Fichier / dossier | Rôle |
|-------------------|------|
| `downloads/*.zip` | Archives téléchargées |
| `json/*.json` | Une extraction `routes.txt` → lignes normalisées par ressource |
| `manifest.json` | Journal des traitements |
| `unified-lines.json` | Si `--merge` : toutes les lignes avec `_source` |

## Format JSON unifié (ligne)

Chaque entrée est proche du format attendu par `CityTransportLineNormalizer` / le front :

- `id`, `name`, `line`, `type`, `direction`, `color`, `transport_mode`
- `_source` (fichier fusionné uniquement) : `dataset_id`, `resource_id`, `resource_url`

`transport_mode` est dérivé de `route_type` GTFS (bus, metro, tram, train, ferry, other).

## Limites

- Seul **`routes.txt`** est parsé (lignes commerciales). Pas d’horaires, pas de tracés `shapes`.
- Certains ZIP ne sont pas du GTFS valide : le script loggue des avertissements dans le JSON.
- Les ressources **non ZIP** (CSV seuls, API temps réel, etc.) sont ignorées.

Pour affiner la recherche API : `--query=paris` ou changer `--tag=`.
