
📹 YouTube Data API v3 : récupérer les données vidéo avec PHP (2026)
Pourquoi analyser les données vidéo via l'API quand on peut simplement ouvrir la page?
Collecter manuellement les informations de dizaines de vidéos prend des heures. Titre, durée, nombre de vues, date de publication: copier tout cela à la main depuis YouTube, c'est la garantie d'accumuler les erreurs et de finir en burn-out.
L'API YouTube Data v3 résout le problème de manière programmatique. Une seule requête HTTP, et vous obtenez un JSON structuré avec snippet, contentDetails et statistics. Pas de parsing HTML, pas de captchas.
Dans ce tutoriel: des instructions pas à pas, de la création d'une clé API jusqu'à un script PHP prêt à l'emploi qui extrait les informations de n'importe quelle vidéo YouTube à partir de son URL. Le code est réel, testé, avec des explications pour chaque ligne.
💡 Aperçu rapide:
- Créer une clé API dans Google Cloud Console et activer YouTube Data API v3
- Décomposer la structure de l'endpoint
/videoset ses paramètres part, id et key - Écrire une fonction PHP pour extraire l'ID vidéo de n'importe quel lien YouTube
- Effectuer une requête via
file_get_contents()et parser la réponse JSON - Gérer les erreurs: clé invalide, mauvais ID, quota dépassé
- Examiner une alternative: la bibliothèque prête à l'emploi
madcoda/php-youtube-api
Étape 1: Obtenir une clé API YouTube Data
Pour travailler avec l'API, vous avez besoin d'une clé. Voici le chemin le plus court:
- Ouvrez Google Cloud Console et créez un nouveau projet (ou sélectionnez-en un existant).
- Allez dans APIs & Services → Bibliothèque, trouvez «YouTube Data API v3» et cliquez sur Activer.
- Allez dans Identifiants → Créer des identifiants → Clé API.
- (Recommandé) Restreignez la clé: dans la section Restrictions d'API, sélectionnez YouTube Data API v3 afin que la clé ne fonctionne pas avec d'autres services Google.
La clé se présente sous la forme d'une chaîne comme AIzaSyD-... de 39 caractères. Sans elle, l'API renvoie une erreur 403.
Le quota quotidien est de 10 000 unités. Une requête vers /videos coûte 1 unité. Pour des tests et de petits projets, c'est largement suffisant. Si vous prévoyez une charge de niveau production, demandez une augmentation de quota dans la même section de la Console.
Étape 2: L'endpoint API et ses paramètres
URL pour obtenir les informations d'une vidéo:
1 GET https://www.googleapis.com/youtube/v3/videos
Les paramètres sont passés en chaîne de requête:
Paramètre | Obligatoire | Description |
|---|---|---|
| Oui | Liste de champs séparés par des virgules: snippet, contentDetails, statistics, status, topicDetails, etc. |
| Oui | ID de la vidéo YouTube (11 caractères, par exemple |
| Oui | Votre clé API |
| Non | Langue pour les champs textuels (par exemple |
| Non | Nombre de résultats (1-50, la valeur par défaut est 5) |
Trois valeurs principales de part qui couvrent la plupart des scénarios:
- snippet: informations de base: titre, description, channelId, channelTitle, publishedAt, thumbnails (ensemble d'URLs de miniatures à différentes résolutions), tags, categoryId.
- contentDetails: caractéristiques: durée (au format ISO 8601, par exemple
PT4M13S), dimension (2d/3d), definition (sd/hd), caption (indique si des sous-titres existent). - statistics: chiffres: viewCount, likeCount, commentCount.
Remarque importante: le champ dislikeCount dans statistics est désactivé depuis décembre 2021, l'API renvoie toujours 0. Le champ favoriteCount est également obsolète (toujours 0 depuis août 2015). Ne comptez pas dessus dans votre code.
Étape 3: Extraire l'ID vidéo de l'URL
Avant d'appeler l'API, vous devez extraire l'ID de la vidéo du lien. YouTube a plusieurs formats d'URL:
- Standard:
https://www.youtube.com/watch?v=1ejTKov_Sm4 - Court:
https://youtu.be/1ejTKov_Sm4 - Intégration:
https://www.youtube.com/embed/1ejTKov_Sm4 - Avec paramètres:
https://www.youtube.com/watch?v=1ejTKov_Sm4&t=120
Une simple fonction PHP gère toutes ces variantes:
1 /** 2 * Extracts video ID from YouTube URL. 3 * Supports formats: watch?v=, youtu.be/, /embed/ 4 * 5 * @param string $url YouTube video URL 6 * @return string|null Video ID (11 characters) or null on error 7 */ 8 function getYouTubeVideoId(string $url): ?string 9 { 10 $parsed = parse_url($url); 11 12 // Short link youtu.be/VIDEO_ID 13 if (isset($parsed['host']) && str_contains($parsed['host'], 'youtu.be')) { 14 return ltrim($parsed['path'], '/') ?: null; 15 } 16 17 // Standard link watch?v=VIDEO_ID 18 if (isset($parsed['query'])) { 19 parse_str($parsed['query'], $params); 20 if (!empty($params['v'])) { 21 return $params['v']; 22 } 23 } 24 25 // Embed link /embed/VIDEO_ID 26 if (isset($parsed['path']) && str_starts_with($parsed['path'], '/embed/')) { 27 return substr($parsed['path'], 7); 28 } 29 30 return null; 31 } 32 33 // Usage example 34 $videoUrl = 'https://www.youtube.com/watch?v=1ejTKov_Sm4'; 35 $videoId = getYouTubeVideoId($videoUrl); 36 echo $videoId; // 1ejTKov_Sm4
La fonction utilise uniquement les capacités natives de PHP: parse_url() décompose l'URL en composants, parse_str() analyse la chaîne de requête en tableau. Aucune dépendance externe.
Étape 4: Requête API et parsing de la réponse
Mettons tout cela ensemble. Nous construisons l'URL en substituant l'ID et la clé, effectuons une requête GET et décodons le JSON:
1 <?php 2 3 $apiKey = 'AIzaSyD-YOUR_KEY'; 4 $videoUrl = 'https://www.youtube.com/watch?v=1ejTKov_Sm4'; 5 $videoId = getYouTubeVideoId($videoUrl); 6 7 if (!$videoId) { 8 die('Failed to extract video ID from URL.'); 9 } 10 11 $endpoint = sprintf( 12 'https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id=%s&key=%s', 13 $videoId, 14 $apiKey 15 ); 16 17 // Option with file_get_contents (requires allow_url_fopen = On in php.ini) 18 $context = stream_context_create([ 19 'http' => [ 20 'timeout' => 10, 21 'ignore_errors' => true, // do not crash on HTTP errors 22 ], 23 ]); 24 25 $response = @file_get_contents($endpoint, false, $context); 26 27 if ($response === false) { 28 die('Network request failed. Check your connection or use cURL.'); 29 } 30 31 $data = json_decode($response); 32 33 if (json_last_error() !== JSON_ERROR_NONE) { 34 die('API response is not JSON. The key might be invalid.'); 35 } 36 37 // API returns error in error field, not HTTP status 38 if (isset($data->error)) { 39 die('API Error: ' . $data->error->message); 40 } 41 42 if (empty($data->items)) { 43 die('No video found with this ID.'); 44 } 45 46 $video = $data->items[0]; 47 48 echo 'Title: ' . $video->snippet->title . PHP_EOL; 49 echo 'Channel: ' . $video->snippet->channelTitle . PHP_EOL; 50 echo 'Published: ' . $video->snippet->publishedAt . PHP_EOL; 51 echo 'Duration: ' . $video->contentDetails->duration . PHP_EOL; 52 echo 'Views: ' . number_format($video->statistics->viewCount ?? 0) . PHP_EOL; 53 echo 'Likes: ' . number_format($video->statistics->likeCount ?? 0) . PHP_EOL; 54 echo 'Comments: ' . number_format($video->statistics->commentCount ?? 0) . PHP_EOL; 55 56 // Max resolution thumbnail URL 57 if (isset($video->snippet->thumbnails->maxres)) { 58 echo 'Thumbnail: ' . $video->snippet->thumbnails->maxres->url . PHP_EOL; 59 }
Le code est nettement plus robuste qu'un simple file_get_contents() issu d'une version brouillon. Ajouts: vérification de l'extraction de l'ID, gestion des erreurs réseau, validation JSON, réponse à l'erreur de l'API Google (le champ error), vérification de réponse vide et opérateur de repli ?? pour les champs statistiques optionnels.
CURL comme alternative
Si la directive allow_url_fopen est désactivée sur votre hébergement, file_get_contents() ne fonctionnera pas. Dans ce cas, utilisez cURL:
1 $ch = curl_init(); 2 curl_setopt_array($ch, [ 3 CURLOPT_URL => $endpoint, 4 CURLOPT_RETURNTRANSFER => true, 5 CURLOPT_TIMEOUT => 10, 6 CURLOPT_FOLLOWLOCATION => true, 7 ]); 8 $response = curl_exec($ch); 9 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 10 curl_close($ch); 11 12 if ($httpCode !== 200 || $response === false) { 13 die('Request failed. HTTP code: ' . $httpCode); 14 }
Bibliothèque prête à l'emploi: madcoda/php-youtube-api
Écrire un wrapper manuellement pour la production est un travail supplémentaire. Pour les projets qui nécessitent une interaction régulière avec l'API plutôt qu'une récupération ponctuelle, il existe madcoda/php-youtube-api, un wrapper PHP léger sans dépendances externes. Installation:
1 composer require madcoda/php-youtube-api
Utilisation:
1 $youtube = new Madcoda\Youtube(['key' => 'YOUR_KEY']); 2 $video = $youtube->getVideoInfo('1ejTKov_Sm4'); 3 4 echo $video->snippet->title; 5 echo $video->statistics->viewCount;
La bibliothèque gère les tâches routinières: pagination, nouvelles tentatives de requêtes, formatage de la durée depuis ISO 8601 vers un format lisible. Pour des scripts ponctuels, c'est superflu; pour un service opérationnel, c'est justifié.
Le guide vidéo ci-dessus montre clairement l'ensemble du processus: de l'activation de l'API dans la console à la première requête réussie. Nous vous recommandons de le regarder avant d'écrire du code: 15 minutes de vidéo vous feront gagner une heure de lecture de documentation.

⁉️🤔 Foire aux questions
Combien coûte l'utilisation de YouTube Data API?
L'API elle-même est gratuite. Vous payez uniquement en quota: 10 000 unités par jour pour chaque projet. Une requête vers
/videoscoûte 1 unité, vous pouvez donc obtenir les données d'environ 10 000 vidéos par jour sans dépenser un centime. Pour les projets commerciaux avec une charge supérieure au seuil, Google propose un formulaire de demande d'augmentation de quota; ils l'accordent avec une justification adéquate. YouTube Data API n'a pas de niveaux payants distincts.
En quoi YouTube Data API v3 diffère-t-elle du parsing de page HTML?
L'API renvoie un JSON structuré avec un schéma documenté. Lorsque les champs changent, Google publie un avis de dépréciation plusieurs mois à l'avance. Le parsing HTML se casse à chaque refonte de la page, nécessite une émulation de navigateur et est explicitement interdit par la section 3.2 des conditions d'utilisation de YouTube.
Puis-je obtenir les données d'une vidéo privée?
Avec une clé API, uniquement les vidéos publiques. Pour accéder aux vidéos privées, non répertoriées et restreintes, OAuth 2.0 avec l'autorisation du propriétaire est nécessaire. Techniquement, c'est le même endpoint /videos, mais avec un jeton d'accès au lieu d'une clé.
Comment obtenir l'ID de ma chaîne YouTube?
La méthode la plus fiable: YouTube Studio → Paramètres → Chaîne → Paramètres avancés. Là, l'ID de la chaîne YouTube est affiché tel quel, sans aucune requête API. Alternative: appelez
/channels?part=id&mine=trueavec un jeton OAuth. Pour les chaînes avec des noms d'utilisateur personnalisés, la méthode/channels?part=id&forUsername=NAMEne fonctionne que pour celles créées avant 2014.
Que faire lorsque je reçois une erreur «quotaExceeded»?
Le quota quotidien se réinitialise à 00h00, heure du Pacifique (UTC-8). Solution temporaire: mettez en cache les réponses de votre côté (fichier, Redis). Pour une augmentation permanente: Google Cloud Console → IAM et administration → Quotas → YouTube Data API v3 → requêtes par jour → Modifier le quota.
Où appliquer YouTube Data API: résumé final
Nous avons couvert le cycle complet: clé API, décomposition des paramètres de l'endpoint, extraction de l'ID vidéo de l'URL, requête GET et parsing de la réponse JSON. Le résultat est un script PHP fonctionnel qui récupère le titre, les statistiques, la durée et les miniatures de n'importe quelle vidéo publique en une seconde.
Où aller ensuite:
- Fiches vidéo sur un site web. Intégrez le script dans un backend WordPress (hook
save_post) ou Laravel, et lors de l'ajout d'un lien YouTube, les informations de la vidéo sont automatiquement récupérées. - Veille concurrentielle. Une fois par jour, collectez
viewCountetlikeCountpour une liste de chaînes, et votre tableau de dynamiques est prêt. - Importation automatique. Si vous gérez un blog vidéo sur votre propre site, récupérez
snippet.titleetsnippet.descriptioncomme ébauche de description textuelle pour l'intégration.
YouTube Data API v3 est un outil mature, stable et gratuit. En maîtrisant l'appel de base de ce tutoriel, vous ouvrez la porte à des dizaines d'autres méthodes: recherche, playlists, commentaires, abonnements. 🔗 Documentation officielle YouTube Data API v3



