Si tengo una URL de video de YouTube, ¿hay alguna forma de usar PHP y cURL para obtener la miniatura asociada de la API de YouTube?
Si tengo una URL de video de YouTube, ¿hay alguna forma de usar PHP y cURL para obtener la miniatura asociada de la API de YouTube?
Respuestas:
Cada video de YouTube tiene cuatro imágenes generadas. Están predeciblemente formateados de la siguiente manera:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg
La primera en la lista es una imagen a tamaño completo y otras son imágenes en miniatura. La imagen miniatura predeterminada (es decir, uno de 1.jpg
, 2.jpg
, 3.jpg
) es:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg
Para la versión de alta calidad de la miniatura, use una URL similar a esta:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg
También hay una versión de calidad miniatura de la miniatura, usando una URL similar a la HQ:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg
Para la versión de definición estándar de la miniatura, use una URL similar a esta:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg
Para la versión de resolución máxima de la miniatura, use una URL similar a esta:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
Todas las URL anteriores también están disponibles a través de HTTP. Además, el nombre de host ligeramente más corto i3.ytimg.com
funciona en lugar de img.youtube.com
en las URL de ejemplo anteriores.
Alternativamente, puede usar la API de datos de YouTube (v3) para obtener imágenes en miniatura.
http://www.img.youtube.com
solohttp://img.youtube.com
mqdefault
es 16: 9
sddefault
y maxresdefault
NO ESTÁN SIEMPRE DISPONIBLES, algunos videos los tienen ...
Puede usar la API de datos de YouTube para recuperar miniaturas de video, subtítulos, descripción, calificación, estadísticas y más. La versión 3 de la API requiere una clave *. Obtenga la clave y cree una solicitud de videos: lista :
https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID
Ejemplo de código PHP
$data = file_get_contents("https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=T0Jqdjbed40");
$json = json_decode($data);
var_dump($json->items[0]->snippet->thumbnails);
Salida
object(stdClass)#5 (5) {
["default"]=>
object(stdClass)#6 (3) {
["url"]=>
string(46) "https://i.ytimg.com/vi/T0Jqdjbed40/default.jpg"
["width"]=>
int(120)
["height"]=>
int(90)
}
["medium"]=>
object(stdClass)#7 (3) {
["url"]=>
string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/mqdefault.jpg"
["width"]=>
int(320)
["height"]=>
int(180)
}
["high"]=>
object(stdClass)#8 (3) {
["url"]=>
string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/hqdefault.jpg"
["width"]=>
int(480)
["height"]=>
int(360)
}
["standard"]=>
object(stdClass)#9 (3) {
["url"]=>
string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/sddefault.jpg"
["width"]=>
int(640)
["height"]=>
int(480)
}
["maxres"]=>
object(stdClass)#10 (3) {
["url"]=>
string(52) "https://i.ytimg.com/vi/T0Jqdjbed40/maxresdefault.jpg"
["width"]=>
int(1280)
["height"]=>
int(720)
}
}
* No solo que necesita una clave, es posible que se le solicite información de facturación según la cantidad de solicitudes de API que planea hacer. Sin embargo, pocos millones de solicitudes por día son gratuitas.
jsonc
en lugar de json
para getJSON. Está fallando debido a su estructura JSON incorrecta.
jsonc
. Los ejemplos de jQuery y PHP DEBEN usarse json
. Y he actualizado el código para que se ajuste a la nueva estructura JSON. Estoy usando el código en este momento y funciona EN VIVO. así que no digas que no funciona sin leer los cambios. ¡Gracias!
v=2
) se encarga de los cambios de API.
Lo que Asaph dijo es correcto. Sin embargo, no todos los videos de YouTube contienen las nueve miniaturas. Además, el tamaño de las imágenes en miniatura depende del video (los números a continuación se basan en uno).
Hay siete miniaturas garantizadas para existir:
| Thumbnail Name | Size (px) | URL |
|---------------------|-----------|--------------------------------------------------|
| Player Background | 480x360 | https://i1.ytimg.com/vi/<VIDEO ID>/0.jpg |
| Start | 120x90 | https://i1.ytimg.com/vi/<VIDEO ID>/1.jpg |
| Middle | 120x90 | https://i1.ytimg.com/vi/<VIDEO ID>/2.jpg |
| End | 120x90 | https://i1.ytimg.com/vi/<VIDEO ID>/3.jpg |
| High Quality | 480x360 | https://i1.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg |
| Medium Quality | 320x180 | https://i1.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg |
| Normal Quality | 120x90 | https://i1.ytimg.com/vi/<VIDEO ID>/default.jpg |
Además, las otras dos miniaturas pueden o no existir. Su presencia probablemente se base en si el video es de alta calidad.
| Thumbnail Name | Size (px) | URL |
|---------------------|-----------|------------------------------------------------------|
| Standard Definition | 640x480 | https://i1.ytimg.com/vi/<VIDEO ID>/sddefault.jpg |
| Maximum Resolution | 1920x1080 | https://i1.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg |
Puede encontrar scripts JavaScript y PHP para recuperar miniaturas y otra información de YouTube en:
También puede usar la herramienta Generador de información de video de YouTube para obtener toda la información sobre un video de YouTube al enviar una URL o una identificación de video.
En YouTube API V3 también podemos usar estas URL para obtener miniaturas ... Se clasifican según su calidad.
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/default.jpg - default
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg - medium
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg - high
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/sddefault.jpg - standard
Y para la máxima resolución ...
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
Una ventaja de estas URL sobre las URL en la primera respuesta es que estas no son bloqueadas por firewalls.
Si desea la imagen más grande de YouTube para una ID de video específica, la URL debería ser algo como esto:
http://i3.ytimg.com/vi/SomeVideoIDHere/0.jpg
Con la API, puede elegir una imagen en miniatura predeterminada. El código simple debería ser algo como esto:
//Grab the default thumbnail image
$attrs = $media->group->thumbnail[1]->attributes();
$thumbnail = $attrs['url'];
$thumbnail = substr($thumbnail, 0, -5);
$thumb1 = $thumbnail."default.jpg";
// Grab the third thumbnail image
$thumb2 = $thumbnail."2.jpg";
// Grab the fourth thumbnail image.
$thumb3 = $thumbnail."3.jpg";
// Using simple cURL to save it your server.
// You can extend the cURL below if you want it as fancy, just like
// the rest of the folks here.
$ch = curl_init ("$thumb1");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata = curl_exec($ch);
curl_close($ch);
// Using fwrite to save the above
$fp = fopen("SomeLocationInReferenceToYourScript/AnyNameYouWant.jpg", 'w');
// Write the file
fwrite($fp, $rawdata);
// And then close it.
fclose($fp);
Si desea deshacerse de las "barras negras" y hacerlo como lo hace YouTube, puede usar:
https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp
Y si no puede usar la .webp
extensión de archivo, puede hacerlo así:
https://i.ytimg.com/vi/<video id>/mqdefault.jpg
Además, si necesita la versión sin escala, use en maxresdefault
lugar de mqdefault
.
Nota: No estoy seguro acerca de la relación de aspecto si planea usarla maxresdefault
.
_webp
y cambia la extensión a .jpg
. Ejemplo de trabajo: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , no estoy seguro acerca de la relación de aspecto.
Hice una función para recuperar solo las imágenes existentes de YouTube
function youtube_image($id) {
$resolution = array (
'maxresdefault',
'sddefault',
'mqdefault',
'hqdefault',
'default'
);
for ($x = 0; $x < sizeof($resolution); $x++) {
$url = '//img.youtube.com/vi/' . $id . '/' . $resolution[$x] . '.jpg';
if (get_headers($url)[0] == 'HTTP/1.0 200 OK') {
break;
}
}
return $url;
}
En YouTube Data API v3 , puede obtener miniaturas de video con la función videos-> list . Desde snippet.thumbnails. (Clave) , puede elegir la miniatura predeterminada, de resolución media o alta, y obtener su ancho, alto y URL.
También puede actualizar las miniaturas con las miniaturas-> establecer funcionalidad.
Para ver ejemplos, puede consultar el proyecto de ejemplos de API de YouTube . ( PHP ).
Puede obtener la entrada de video que contiene la URL a la miniatura del video. Hay un código de ejemplo en el enlace. O, si desea analizar XML, hay información aquí . El XML devuelto tiene un media:thumbnail
elemento que contiene la URL de la miniatura.
// Get image form video URL
$url = $video['video_url'];
$urls = parse_url($url);
//Expect the URL to be http://youtu.be/abcd, where abcd is the video ID
if ($urls['host'] == 'youtu.be') :
$imgPath = ltrim($urls['path'],'/');
//Expect the URL to be http://www.youtube.com/embed/abcd
elseif (strpos($urls['path'],'embed') == 1) :
$imgPath = end(explode('/',$urls['path']));
//Expect the URL to be abcd only
elseif (strpos($url,'/') === false):
$imgPath = $url;
//Expect the URL to be http://www.youtube.com/watch?v=abcd
else :
parse_str($urls['query']);
$imgPath = $v;
endif;
YouTube es propiedad de Google y a Google le gusta tener un número razonable de imágenes para diferentes tamaños de pantalla, por lo tanto, sus imágenes se almacenan en diferentes tamaños. Aquí hay un ejemplo de cómo será tu miniatura:
Miniatura de baja calidad:
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg
Miniatura de calidad media:
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg
Miniatura de alta calidad:
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg
Miniatura de máxima calidad:
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg
Si todo lo que quieres hacer es buscar en YouTube y obtener propiedades asociadas:
Obtener una API pública : este enlace proporciona una buena dirección
Use la siguiente cadena de consulta. La consulta de búsqueda (indicada por q = ) en la cadena URL es stackoverflow para fines de ejemplo. YouTube luego le enviará una respuesta JSON donde podrá analizar Miniaturas, Fragmentos, Autor, etc.
Otra buena alternativa sería usar el oEmbed API que es compatible con YouTube.
Simplemente agregue su URL de YouTube a la URL de oEmbed y recibirá un JSON que incluye una miniatura y el código HTML para incrustar.
Ejemplo:
http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DxUeJdWYdMmQ
Te daría:
{
"height":270,
"width":480,
"title":"example video for 2020",
"thumbnail_width":480,
"html":"...",
"thumbnail_height":360,
"version":"1.0",
"provider_name":"YouTube",
"author_url":"https:\/\/www.youtube.com\/channel\/UCza6VSQUzCON- AzlsrOLwaA",
"thumbnail_url":"https:\/\/i.ytimg.com\/vi\/xUeJdWYdMmQ\/hqdefault.jpg",
"author_name":"Pokics",
"provider_url":"https:\/\/www.youtube.com\/",
"type":"video"
}
Lea la documentación para más información .
Utilizar:
https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100®ionCode=us&key=**Your YouTube ID**
Arriba está el enlace. Con eso, puedes encontrar las características de YouTube de los videos. Después de encontrar características, puede obtener videos de la categoría seleccionada. Después de eso, puede encontrar imágenes de video seleccionadas usando la respuesta de Asaph .
Pruebe el enfoque anterior y puede analizar todo desde la API de YouTube .
He usado las miniaturas de YouTube de esta manera:
$url = 'http://img.youtube.com/vi/' . $youtubeId . '/0.jpg';
$img = dirname(__FILE__) . '/youtubeThumbnail_' . $youtubeId . '.jpg';
file_put_contents($img, file_get_contents($url));
Recuerde que YouTube evita incluir imágenes directamente desde su servidor.
Encontré esta ingeniosa herramienta que te permite crear la imagen con el botón de reproducción de YouTube colocado sobre la imagen:
Solo para agregar / expandir las soluciones dadas, creo que es necesario tener en cuenta que, como tuve este problema yo mismo, uno puede tomar múltiples contenidos de videos de YouTube, en este caso, miniaturas, con una solicitud HTTP:
Usando un Rest Client, en este caso, HTTPFUL, puede hacer algo como esto:
<?php
header("Content-type", "application/json");
//download the httpfull.phar file from http://phphttpclient.com
include("httpful.phar");
$youtubeVidIds= array("nL-rk4bgJWU", "__kupr7KQos", "UCSynl4WbLQ", "joPjqEGJGqU", "PBwEBjX3D3Q");
$response = \Httpful\Request::get("https://www.googleapis.com/youtube/v3/videos?key=YourAPIKey4&part=snippet&id=".implode (",",$youtubeVidIds)."")
->send();
print ($response);
?>
YouTube nos proporciona las cuatro imágenes generadas para cada video a través de la API de datos (v3), por ejemplo,
Según esto, debe expresar su URL de esta manera:
www.googleapis.com/youtube/v3/videos?part=snippet&id=`yourVideoId`&key=`yourApiKey`
Ahora cambie su ID de video y su clave API a su ID de video y clave de API respectivas y su respuesta será una salida JSON que le proporcionará los cuatro enlaces en las miniaturas de la variable de fragmento (si están disponibles).
Puede obtener la ID de video de la url de video de YouTube usando parse_url , parse_str y luego insertarlo en las urls predictivas para imágenes. Gracias a YouTube por las URL predictivas
$videoUrl = "https://www.youtube.com/watch?v=8zy7wGbQgfw";
parse_str( parse_url( $videoUrl, PHP_URL_QUERY ), $my_array_of_vars );
$ytID = $my_array_of_vars['v']; //gets video ID
print "https://img.youtube.com/vi/$ytID/maxresdefault.jpg";
print "https://img.youtube.com/vi/$ytID/mqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/hqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/sddefault.jpg";
print "https://img.youtube.com/vi/$ytID/default.jpg";
Puedes usar esta herramienta para generar miniaturas de YouTube
https://tools.tutsplanet.com/index.php/get-youtube-video-thumbnails
Una función PHP simple que creé para la miniatura de YouTube y los tipos son
function get_youtube_thumb($link,$type){
$video_id = explode("?v=", $link);
if (empty($video_id[1])){
$video_id = explode("/v/", $link);
$video_id = explode("&", $video_id[1]);
$video_id = $video_id[0];
}
$thumb_link = "";
if($type == 'default' || $type == 'hqdefault' ||
$type == 'mqdefault' || $type == 'sddefault' ||
$type == 'maxresdefault'){
$thumb_link = 'http://img.youtube.com/vi/'.$video_id.'/'.$type.'.jpg';
}elseif($type == "id"){
$thumb_link = $video_id;
}
return $thumb_link;}
Si está utilizando la API pública, la mejor manera de hacerlo es usar if
declaraciones.
Si el video es público o no aparece en la lista, configura la miniatura usando el método URL. Si el video es privado, usa la API para obtener la miniatura.
<?php
if($video_status == 'unlisted'){
$video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
$video_status = '<i class="fa fa-lock"></i> Unlisted';
}
elseif($video_status == 'public'){
$video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
$video_status = '<i class="fa fa-eye"></i> Public';
}
elseif($video_status == 'private'){
$video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url'];
$video_status = '<i class="fa fa-lock"></i> Private';
}
Creo que son muchas respuestas para las miniaturas, pero quiero agregar algunas otras URL para obtener miniaturas de YouTube muy fácilmente. Solo estoy tomando un texto de la respuesta de Asaph. Aquí hay algunas URL para obtener miniaturas de YouTube:
https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/default.jpg
Para la versión de alta calidad de la miniatura, use una URL similar a esta:
https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg
También hay una versión de calidad miniatura de la miniatura, usando una URL similar a la de alta calidad:
https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg
Para la versión de definición estándar de la miniatura, use una URL similar a esta:
https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/sddefault.jpg
Para la versión de resolución máxima de la miniatura, use una URL similar a esta:
https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
function get_video_thumbnail( $src ) {
$url_pieces = explode('/', $src);
if( $url_pieces[2] == 'dai.ly'){
$id = $url_pieces[3];
$hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE);
$thumbnail = $hash['thumbnail_large_url'];
}else if($url_pieces[2] == 'www.dailymotion.com'){
$id = $url_pieces[4];
$hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE);
$thumbnail = $hash['thumbnail_large_url'];
}else if ( $url_pieces[2] == 'vimeo.com' ) { // If Vimeo
$id = $url_pieces[3];
$hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php'));
$thumbnail = $hash[0]['thumbnail_large'];
} elseif ( $url_pieces[2] == 'youtu.be' ) { // If Youtube
$extract_id = explode('?', $url_pieces[3]);
$id = $extract_id[0];
$thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg';
}else if ( $url_pieces[2] == 'player.vimeo.com' ) { // If Vimeo
$id = $url_pieces[4];
$hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php'));
$thumbnail = $hash[0]['thumbnail_large'];
} elseif ( $url_pieces[2] == 'www.youtube.com' ) { // If Youtube
$extract_id = explode('=', $url_pieces[3]);
$id = $extract_id[1];
$thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg';
} else{
$thumbnail = tim_thumb_default_image('video-icon.png', null, 147, 252);
}
return $thumbnail;
}
get_video_thumbnail('https://vimeo.com/154618727');
get_video_thumbnail('https://www.youtube.com/watch?v=SwU0I7_5Cmc');
get_video_thumbnail('https://youtu.be/pbzIfnekjtM');
get_video_thumbnail('http://www.dailymotion.com/video/x5thjyz');
Aquí está la respuesta superior optimizada para uso manual. El token de ID de video sin separadores permite seleccionar con un doble clic.
Cada video de YouTube tiene cuatro imágenes generadas. Están predeciblemente formateados de la siguiente manera:
https://img.youtube.com/vi/YOUTUBEVIDEOID/0.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/1.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/2.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/3.jpg
La primera en la lista es una imagen a tamaño completo y otras son imágenes en miniatura. (. Es decir, uno de la imagen miniatura predeterminada 1.jpg
, 2.jpg
, 3.jpg
) es:
https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg
Para la versión de alta calidad de la miniatura, use una URL similar a esta:
https://img.youtube.com/vi/YOUTUBEVIDEOID/hqdefault.jpg
También hay una versión de calidad miniatura de la miniatura, usando una URL similar a la HQ:
https://img.youtube.com/vi/YOUTUBEVIDEOID/mqdefault.jpg
Para la versión de definición estándar de la miniatura, use una URL similar a esta:
https://img.youtube.com/vi/YOUTUBEVIDEOID/sddefault.jpg
Para la versión de resolución máxima de la miniatura, use una URL similar a esta:
https://img.youtube.com/vi/YOUTUBEVIDEOID/maxresdefault.jpg
Todas las URL anteriores también están disponibles a través de HTTP. Además, el nombre de host ligeramente más corto i3.ytimg.com
funciona en lugar deimg.youtube.com
en las URL de ejemplo anteriores.
Alternativamente, puede usar la API de datos de YouTube (v3) para obtener imágenes en miniatura.
Método 1:
Puede encontrar toda la información para un video de YouTube con una página JSON que incluso tiene "thumbnail_url", http://www.youtube.com/oembed?format=json&url= {la URL de su video va aquí}
Me gusta URL final look + código de prueba PHP
$data = file_get_contents("https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=_7s-6V_0nwA");
$json = json_decode($data);
var_dump($json);
object(stdClass)[1]
public 'width' => int 480
public 'version' => string '1.0' (length=3)
public 'thumbnail_width' => int 480
public 'title' => string 'how to reminder in window as display message' (length=44)
public 'provider_url' => string 'https://www.youtube.com/' (length=24)
public 'thumbnail_url' => string 'https://i.ytimg.com/vi/_7s-6V_0nwA/hqdefault.jpg' (length=48)
public 'author_name' => string 'H2 ZONE' (length=7)
public 'type' => string 'video' (length=5)
public 'author_url' => string 'https://www.youtube.com/channel/UC9M35YwDs8_PCWXd3qkiNzg' (length=56)
public 'provider_name' => string 'YouTube' (length=7)
public 'height' => int 270
public 'html' => string '<iframe width="480" height="270" src="https://www.youtube.com/embed/_7s-6V_0nwA?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>' (length=171)
public 'thumbnail_height' => int 360
Para obtener más información, también puede ver Cómo obtener una miniatura de video de YouTube con id o https://www.youtube.com/watch?v=mXde7q59BI8 video tutorial 1
Método 2:
Usando el enlace de imagen de YouTube, https://img.youtube.com/vi/ "insert-youtube-video-id-here" /default.jpg
Método 3:
Usando el código fuente del navegador para obtener una miniatura usando el enlace URL del video - vaya al código fuente del video y busque thumbnailurl. Ahora puede usar esta URL en su código fuente:
{img src="https://img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg"}
Para obtener más información, también puede ver Cómo obtener una miniatura de video de YouTube con id o https://www.youtube.com/watch?v=9f6E8MeM6PI video tutorial 2
https://www.youtube.com/watch?v=mXde7q59BI8
y https://www.youtube.com/watch?v=9f6E8MeM6PI
están (efectivamente) rotos.
Utilizar img.youtube.com/vi/YouTubeID/ImageFormat.jpg
Aquí los formatos de imagen son diferentes como default, hqdefault, maxresdefault.
Esta es mi solución que no requiere clave de API solo del lado del cliente.
YouTube.parse('https://www.youtube.com/watch?v=P3DGwyl0mJQ').then(_ => console.log(_))
El código:
import { parseURL, parseQueryString } from './url'
import { getImageSize } from './image'
const PICTURE_SIZE_NAMES = [
// 1280 x 720.
// HD aspect ratio.
'maxresdefault',
// 629 x 472.
// non-HD aspect ratio.
'sddefault',
// For really old videos not having `maxresdefault`/`sddefault`.
'hqdefault'
]
// - Supported YouTube URL formats:
// - http://www.youtube.com/watch?v=My2FRPA3Gf8
// - http://youtu.be/My2FRPA3Gf8
export default
{
parse: async function(url)
{
// Get video ID.
let id
const location = parseURL(url)
if (location.hostname === 'www.youtube.com') {
if (location.search) {
const query = parseQueryString(location.search.slice('/'.length))
id = query.v
}
} else if (location.hostname === 'youtu.be') {
id = location.pathname.slice('/'.length)
}
if (id) {
return {
source: {
provider: 'YouTube',
id
},
picture: await this.getPicture(id)
}
}
},
getPicture: async (id) => {
for (const sizeName of PICTURE_SIZE_NAMES) {
try {
const url = getPictureSizeURL(id, sizeName)
return {
type: 'image/jpeg',
sizes: [{
url,
...(await getImageSize(url))
}]
}
} catch (error) {
console.error(error)
}
}
throw new Error(`No picture found for YouTube video ${id}`)
},
getEmbeddedVideoURL(id, options = {}) {
return `https://www.youtube.com/embed/${id}`
}
}
const getPictureSizeURL = (id, sizeName) => `https://img.youtube.com/vi/${id}/${sizeName}.jpg`
Utilidad image.js
:
// Gets image size.
// Returns a `Promise`.
function getImageSize(url)
{
return new Promise((resolve, reject) =>
{
const image = new Image()
image.onload = () => resolve({ width: image.width, height: image.height })
image.onerror = reject
image.src = url
})
}
Utilidad url.js
:
// Only on client side.
export function parseURL(url)
{
const link = document.createElement('a')
link.href = url
return link
}
export function parseQueryString(queryString)
{
return queryString.split('&').reduce((query, part) =>
{
const [key, value] = part.split('=')
query[decodeURIComponent(key)] = decodeURIComponent(value)
return query
},
{})
}
Aquí hay una función simple que creé para obtener las miniaturas. Es fácil de entender y usar.
$ link es el enlace de YouTube copiado exactamente como está en el navegador, por ejemplo, https://www.youtube.com/watch?v=BQ0mxQXmLsk
function get_youtube_thumb($link){
$new = str_replace('https://www.youtube.com/watch?v=', '', $link);
$thumbnail = 'https://img.youtube.com/vi/' . $new . '/0.jpg';
return $thumbnail;
}
&t=227s
?
Guarde este código en un archivo .php vacío y pruébelo.
<img src="<?php echo youtube_img_src('9bZkp7q19f0', 'high');?>" />
<?php
// Get a YOUTUBE video thumb image's source url for IMG tag "src" attribute:
// $ID = YouYube video ID (string)
// $size = string (default, medium, high or standard)
function youtube_img_src ($ID = null, $size = 'default') {
switch ($size) {
case 'medium':
$size = 'mqdefault';
break;
case 'high':
$size = 'hqdefault';
break;
case 'standard':
$size = 'sddefault';
break;
default:
$size = 'default';
break;
}
if ($ID) {
return sprintf('https://img.youtube.com/vi/%s/%s.jpg', $ID, $size);
}
return 'https://img.youtube.com/vi/ERROR/1.jpg';
}
Gracias.
public const string tubeThumb = "http://i.ytimg.com/vi/[id]/hqdefault.jpg";
vid.Thumbnail = tubeThumb.Replace("[id]", vid.VideoID);