Skip to content

Tout pour WordPress, le développement web — et plus encore

📹 YouTube Data API v3 : récupérer les données vidéo avec PHP (2026)

📹 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 /videos et 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:

1GET https://www.googleapis.com/youtube/v3/videos

Les paramètres sont passés en chaîne de requête:

Paramètre

Obligatoire

Description

part

Oui

Liste de champs séparés par des virgules: snippet, contentDetails, statistics, status, topicDetails, etc.

id

Oui

ID de la vidéo YouTube (11 caractères, par exemple 1ejTKov_Sm4)

key

Oui

Votre clé API

hl

Non

Langue pour les champs textuels (par exemple ru pour les titres en russe)

maxResults

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 */
8function 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);
36echo $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
7if (!$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
27if ($response === false) {
28 die('Network request failed. Check your connection or use cURL.');
29}
30
31$data = json_decode($response);
32
33if (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
38if (isset($data->error)) {
39 die('API Error: ' . $data->error->message);
40}
41
42if (empty($data->items)) {
43 die('No video found with this ID.');
44}
45
46$video = $data->items[0];
47
48echo 'Title: ' . $video->snippet->title . PHP_EOL;
49echo 'Channel: ' . $video->snippet->channelTitle . PHP_EOL;
50echo 'Published: ' . $video->snippet->publishedAt . PHP_EOL;
51echo 'Duration: ' . $video->contentDetails->duration . PHP_EOL;
52echo 'Views: ' . number_format($video->statistics->viewCount ?? 0) . PHP_EOL;
53echo 'Likes: ' . number_format($video->statistics->likeCount ?? 0) . PHP_EOL;
54echo 'Comments: ' . number_format($video->statistics->commentCount ?? 0) . PHP_EOL;
55
56// Max resolution thumbnail URL
57if (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();
2curl_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);
10curl_close($ch);
11
12if ($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:

1composer require madcoda/php-youtube-api

Utilisation:

1$youtube = new Madcoda\Youtube(['key' => 'YOUR_KEY']);
2$video = $youtube->getVideoInfo('1ejTKov_Sm4');
3
4echo $video->snippet->title;
5echo $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.

Code PHP sur un écran d'ordinateur en gros plan

⁉️🤔 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 /videos coû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=true avec un jeton OAuth. Pour les chaînes avec des noms d'utilisateur personnalisés, la méthode /channels?part=id&forUsername=NAME ne 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 viewCount et likeCount pour 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.title et snippet.description comme é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