# Procédure API YouTube (Data API v3) — Re-info.fr

**But** : disposer d'une clé Google officielle pour récupérer les vidéos YouTube (ID + titre + date de publication) sans être bloqué par l'anti-bot. La clé fonctionne depuis n'importe quelle IP (VPS ou mutualisé) et n'est jamais soumise au blocage « Sign in to confirm you're not a bot ».

**Alternative en place** : `yt-collect.php` sur le mutualisé (voir AGENTS.md, section « Secours collecteur distant »). Cette procédure est le plan B si le collecteur mutualisé venait à tomber ou si l'on veut une source 100 % fiable.

---

## 1. Créer un compte Google (si besoin)

- https://accounts.google.com — un compte Google personnel suffit (gratuit, pas besoin d'abonnement).

## 2. Créer un projet Google Cloud

1. https://console.cloud.google.com — se connecter.
2. Sélecteur de projet (en haut à gauche, à côté du logo) → **Nouveau projet**.
3. Nom : `re-info-youtube` (ou autre), organisation vide → **Créer**.
4. Vérifier que le projet est sélectionné.

## 3. Activer l'API YouTube Data v3

1. Menu : **APIs et services** → **Bibliothèque** (ou directement https://console.cloud.google.com/apis/library/youtube.googleapis.com).
2. Rechercher **YouTube Data API v3** → cliquer → **Activer**.

## 4. Créer la clé API

1. Menu : **APIs et services** → **Identifiants** (ou https://console.cloud.google.com/apis/credentials).
2. **+ Créer des identifiants** → **Clé API**.
3. Copier immédiatement la clé (format `AIzaSy...`) — elle n'est plus visible en entier après fermeture de la page.

## 5. Sécuriser la clé (recommandé)

Cliquer sur la clé dans la liste des identifiants :

- **Restrictions d'API** : « Restreindre la clé » → sélectionner uniquement **YouTube Data API v3**.
- **Restriction d'application** (facultatif) : « Adresses IP » → ajouter l'IP du serveur d'hébergement.
- Avantage : si la clé fuit, elle est inutilisable ailleurs et limitée à une seule API.

## 6. Tester la clé (1 commande)

```bash
curl -s "https://www.googleapis.com/youtube/v3/channels?part=snippet&id=UCBIyR71Yvq7rWHSF2p-uH4Q&key=TA_CLE"
```

- Réponse JSON avec `"snippet"` → clé valide.
- `403 apiKeyNotValid` → clé mal copiée.
- `403 ipRefererBlocked` → restriction IP à ajuster.

---

## Quotas (gratuit)

| Élément | Valeur |
|---|---|
| Coût `search.list` | 100 unités / appel |
| Coût `playlistItems.list` | 1 unité / appel |
| Quota quotidien | 10 000 unités |
| Usage envisagé | ~150 pages × 1 appel = **150 unités/nuit** avec `playlistItems.list` (au lieu de 15 000 avec `search.list`) |

**Recommandation : toujours utiliser `playlistItems.list`** (1 unité) plutôt que `search.list` (100 unités).

## Récupérer les dernières vidéos d'une chaîne (méthode recommandée)

Le principe : la playlist « Uploads » d'un canal a un ID = `UU` + ID du canal sans les 2 premiers caractères.

**ID de la playlist** : pour une chaîne `UC_dnLeurUZSE9fMboaVmlew` → playlist `UU_dnLeurUZSE9fMboaVmlew` (retirer `UC` au début, ajouter `UU`).

```bash
curl -s "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=UU_dnLeurUZSE9fMboaVmlew&maxResults=15&key=TA_CLE"
```

Réponse : liste de `videoId`, `title`, `publishedAt` (date ISO 8601) pour les 15 dernières vidéos — exactement les données des cartes (ID, titre, `data-date`).

### Variante si la playlist Uploads est indisponible

```bash
curl -s "https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UC_dnLeurUZSE9fMboaVmlew&order=date&type=video&maxResults=15&key=TA_CLE"
```

**Attention** : `search.list` coûte 100 unités — ne l'utiliser qu'en repli.

## Stockage de la clé (sécurité)

- Ne jamais écrire la clé dans un fichier du site web (`SITE/WEB`, re-info.fr) ni dans un prompt.
- Sur le VPS : fichier séparé `/home/alan/SITE/CRON/.yt-api-key` avec `chmod 600` (comme `.yt-token`).
- Si la clé fuit : la révoquer dans Google Cloud Console (Identifiants → supprimer) et en créer une nouvelle.

---

## Résumé des commandes utiles

| Besoin | Commande |
|---|---|
| Valider la clé | `channels?part=snippet&id=<UC...>` |
| Vidéos récentes d'une chaîne (recommandé) | `playlistItems?part=snippet&playlistId=UU<...>` |
| Repli (coûteux) | `search?part=snippet&channelId=<UC...>&order=date&type=video` |
| Mettre à jour le fichier de test | `bash -n /home/alan/SITE/CRON/yt-secours.sh` (syntaxe) |

*Document généré le 15/08/2026.*
