Skip to content

Todo para WordPress, el desarrollo web — y mucho más

📹 YouTube Data API v3: obteniendo datos de video con PHP (2026)

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

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

Los parámetros se pasan como cadena de consulta:

Parámetro

Obligatorio

Descripción

part

Lista de campos separados por comas: snippet, contentDetails, statistics, status, topicDetails, etc.

id

ID del video de YouTube (11 caracteres, p. ej., 1ejTKov_Sm4)

key

Su clave API

hl

No

Idioma para los campos de texto (p. ej., ru para títulos en ruso)

maxResults

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 */
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 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
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}

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();
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}

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:

1composer require madcoda/php-youtube-api

Uso:

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

Código PHP en primer plano de un monitor

⁉️🤔 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 /videos cuesta 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=true con un token OAuth. Para canales con nombres de usuario personalizados, el método /channels?part=id&forUsername=NAME solo 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 viewCount y likeCount para 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.title y snippet.description como 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