
📹 YouTube Data API v3: obteniendo datos de video con PHP (2026)
Por qué analizar datos de video mediante API cuando puede simplemente abrir la página
Recopilar manualmente información sobre decenas de videos lleva horas. Título, duración, recuento de vistas, fecha de publicación: copiar todo esto a mano desde YouTube es un camino garantizado hacia los errores y el agotamiento.
YouTube Data API v3 resuelve el problema de forma programática. Una solicitud HTTP y obtiene JSON estructurado con snippet, contentDetails y statistics. Sin análisis de HTML, sin captchas.
En este tutorial: instrucciones paso a paso desde la creación de una clave API hasta un script PHP listo para usar que extrae información sobre cualquier video de YouTube por su URL. El código es real, probado, con explicaciones para cada línea.
💡 Resumen rápido:
- Crear una clave API en Google Cloud Console y habilitar YouTube Data API v3
- Desglosar la estructura del endpoint
/videosy sus parámetros part, id y key - Escribir una función PHP para extraer el ID del video de cualquier enlace de YouTube
- Realizar una solicitud mediante
file_get_contents()y analizar la respuesta JSON - Manejar errores: clave no válida, ID incorrecto, cuota excedida
- Examinar una alternativa: la librería lista para usar
madcoda/php-youtube-api
Paso 1: Obtener una clave de YouTube Data API
Para trabajar con la API, necesita una clave. Esta es la ruta más corta:
- Abra Google Cloud Console y cree un proyecto nuevo (o seleccione uno existente).
- Vaya a APIs & Services → Library, busque "YouTube Data API v3" y haga clic en Enable.
- Vaya a Credentials → Create Credentials → API Key.
- (Recomendado) Restrinja la clave: en la sección API restrictions, seleccione YouTube Data API v3 para que la clave no funcione con otros servicios de Google.
La clave tiene el aspecto de una cadena como AIzaSyD-... con 39 caracteres. Sin ella, la API devuelve un error 403.
La cuota diaria es de 10 000 unidades. Una solicitud a /videos cuesta 1 unidad. Para pruebas y proyectos pequeños, esto es más que suficiente. Si planea una carga de nivel de producción, solicite un aumento de cuota en la misma sección de la consola.
Paso 2: Endpoint de la API y sus parámetros
URL para obtener información del video:
1 GET https://www.googleapis.com/youtube/v3/videos
Los parámetros se pasan como cadena de consulta:
Parámetro | Obligatorio | Descripción |
|---|---|---|
| Sí | Lista de campos separados por comas: snippet, contentDetails, statistics, status, topicDetails, etc. |
| Sí | ID del video de YouTube (11 caracteres, p. ej., |
| Sí | Su clave API |
| No | Idioma para los campos de texto (p. ej., |
| No | Número de resultados (1-50, el valor predeterminado es 5) |
Tres valores principales de part que cubren la mayoría de los escenarios:
- snippet: información básica: título, descripción, channelId, channelTitle, publishedAt, thumbnails (conjunto de URLs de miniaturas en diferentes resoluciones), tags, categoryId.
- contentDetails: características: duración (en formato ISO 8601, p. ej.,
PT4M13S), dimension (2d/3d), definition (sd/hd), caption (si existen subtítulos). - statistics: números: viewCount, likeCount, commentCount.
Nota importante: el campo dislikeCount en statistics ha estado deshabilitado desde diciembre de 2021, la API siempre devuelve 0. El campo favoriteCount también está obsoleto (siempre 0 desde agosto de 2015). No dependa de ellos en su código.
Paso 3: Extraer el ID del video de la URL
Antes de llamar a la API, necesita extraer el ID del video del enlace. YouTube tiene varios formatos de URL:
- Estándar:
https://www.youtube.com/watch?v=1ejTKov_Sm4 - Corta:
https://youtu.be/1ejTKov_Sm4 - Embebida:
https://www.youtube.com/embed/1ejTKov_Sm4 - Con parámetros:
https://www.youtube.com/watch?v=1ejTKov_Sm4&t=120
Una función PHP simple maneja todas estas 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 función utiliza solo capacidades integradas de PHP: parse_url() descompone la URL en componentes, parse_str() analiza la cadena de consulta en un array. Sin dependencias externas.
Paso 4: Solicitud a la API y análisis de la respuesta
Reuniéndolo todo. Construimos la URL sustituyendo el ID y la clave, realizamos una solicitud GET y decodificamos el 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 }
El código es notablemente más robusto que un simple file_get_contents() de una versión preliminar. Se añadió: verificación de extracción de ID, manejo de errores de red, validación de JSON, respuesta al error de la API de Google (el campo error), verificación de respuesta vacía y el operador de respaldo ?? para campos de estadísticas opcionales.
CURL como alternativa
Si la directiva allow_url_fopen está deshabilitada en su hosting, file_get_contents() no funcionará. En ese caso, use 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 }
Librería lista para usar: madcoda/php-youtube-api
Escribir un envoltorio manualmente para producción es trabajo extra. Para proyectos que necesitan interacción regular con la API en lugar de una obtención puntual, existe madcoda/php-youtube-api, un envoltorio PHP ligero sin dependencias externas. Instalación:
1 composer require madcoda/php-youtube-api
Uso:
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 librería maneja tareas rutinarias: paginación, reintentos de solicitudes, formateo de duración de ISO 8601 a un formato legible. Para scripts puntuales, es excesivo; para un servicio en funcionamiento, está justificado.
La videoguía anterior muestra claramente todo el proceso: desde habilitar la API en la consola hasta la primera solicitud exitosa. Recomendamos verlo antes de escribir código: 15 minutos de video ahorran una hora de lectura de documentación.

⁉️🤔 Preguntas frecuentes
¿Cuánto cuesta usar YouTube Data API?
La API en sí es gratuita. Solo paga con cuota: 10 000 unidades por día para cada proyecto. Una solicitud a
/videoscuesta 1 unidad, por lo que puede obtener datos sobre 10 000 videos diarios sin gastar un centavo. Para proyectos comerciales con carga por encima del umbral, Google ofrece un formulario de solicitud de aumento de cuota; lo aprueban con una justificación adecuada. YouTube Data API no tiene niveles de pago separados.
¿En qué se diferencia YouTube Data API v3 del análisis de páginas HTML?
La API devuelve JSON estructurado con un esquema documentado. Cuando los campos cambian, Google publica un aviso de desaprobación con varios meses de antelación. El análisis de HTML se rompe con cualquier rediseño de página, requiere emulación de navegador y está explícitamente prohibido por la sección 3.2 de los Términos de Servicio de YouTube.
¿Puedo obtener datos sobre un video privado?
Con una clave API, solo videos públicos. Para acceder a videos privados, no listados y restringidos, se requiere OAuth 2.0 con permiso del propietario. Técnicamente es el mismo endpoint /videos, pero con un token de acceso en lugar de una clave.
¿Cómo obtengo el ID de mi canal de YouTube?
La forma más fiable: YouTube Studio → Configuración → Canal → Configuración avanzada. Allí, el ID del canal de YouTube se muestra tal cual, sin ninguna solicitud a la API. Alternativamente: llame a
/channels?part=id&mine=truecon un token OAuth. Para canales con nombres de usuario personalizados, el método/channels?part=id&forUsername=NAMEsolo funciona para aquellos creados antes de 2014.
¿Qué debo hacer cuando recibo un error "quotaExceeded"?
La cuota diaria se restablece a las 00:00 hora del Pacífico (UTC-8). Solución temporal: almacene en caché las respuestas en su lado (archivo, Redis). Para un aumento permanente: Google Cloud Console → IAM & Admin → Quotas → YouTube Data API v3 → requests per day → Edit Quota.
Dónde aplicar YouTube Data API: resumen final
Hemos cubierto el ciclo completo: clave API, desglose de parámetros del endpoint, extracción de ID de video de la URL, solicitud GET y análisis de la respuesta JSON. El resultado es un script PHP funcional que recupera el título, las estadísticas, la duración y las miniaturas de cualquier video público en un segundo.
Hacia dónde ir a continuación:
- Fichas de video en un sitio web. Integre el script en un backend de WordPress (hook
save_post) o Laravel, y al añadir un enlace de YouTube, la información del video se obtiene automáticamente. - Monitorización de la competencia. Una vez al día, recopile
viewCountylikeCountpara una lista de canales, y su tabla de dinámicas está lista. - Importación automática. Si gestiona un videoblog en su propio sitio, obtenga
snippet.titleysnippet.descriptioncomo borrador de descripción de texto para incrustar.
YouTube Data API v3 es una herramienta madura, estable y gratuita. Habiendo dominado la llamada básica de este tutorial, abre la puerta a docenas de otros métodos: búsqueda, listas de reproducción, comentarios, suscripciones. 🔗 Documentación oficial de YouTube Data API v3



