Si j'ai une URL de vidéo YouTube, est-il possible d'utiliser PHP et cURL pour obtenir la vignette associée à partir de l'API YouTube?
Chaque vidéo YouTube a quatre images générées. De manière prévisible, ils sont formatés comme suit:
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
Le premier de la liste est une image en taille réelle et les autres sont des images miniatures. La vignette par défaut (c’est-à-dire l’un des 1.jpg
, 2.jpg
, 3.jpg
) est:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg
Pour la version haute qualité de la vignette, utilisez une URL similaire à celle-ci:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg
Il existe également une version de qualité moyenne de la vignette, utilisant une URL similaire à celle du siège:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg
Pour la version en définition standard de la vignette, utilisez une URL similaire à celle-ci:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg
Pour la version à résolution maximale de la vignette, utilisez une URL similaire à celle-ci:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
Toutes les URL ci-dessus sont également disponibles via HTTP. De plus, le nom d'hôte légèrement plus court i3.ytimg.com
remplace la valeur de img.youtube.com
dans les exemples d'URL ci-dessus.
Vous pouvez également utiliser API de données YouTube (v3) pour obtenir des images miniatures.
Vous pouvez utiliser l'API de données YouTube pour récupérer des vignettes vidéo, une légende, une description, un classement, des statistiques, etc. L'API version 3 nécessite une clé *. Obtenez la clé et créez une vidéos: liste demande:
https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID
Exemple PHP Code
$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);
Sortie
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)
}
}
* Non seulement vous avez besoin d'une clé, mais des informations de facturation peuvent vous être demandées, en fonction du nombre de demandes d'API que vous envisagez de faire. Cependant, quelques millions de demandes par jour sont gratuites.
Ce que Asaph a dit est juste. Cependant, toutes les vidéos YouTube ne contiennent pas les neuf vignettes. De plus, la taille des images des vignettes dépend de la vidéo (les chiffres ci-dessous sont basés sur une).
Il existe sept vignettes garanties:
| 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 |
En outre, les deux autres vignettes peuvent ou non exister. Leur présence dépend probablement de la qualité de la vidéo.
| 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 |
Vous pouvez trouver des scripts JavaScript et PHP pour récupérer des vignettes et d'autres informations YouTube dans:
Vous pouvez également utiliser l'outil Générateur d'informations vidéo YouTube pour obtenir toutes les informations sur une vidéo YouTube en soumettant une URL ou un identifiant de vidéo.
Dans YouTube API V3, nous pouvons également utiliser ces URL pour obtenir des vignettes ... Elles sont classées en fonction de leur qualité.
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
Et pour la résolution maximale ..
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg
Un des avantages de ces URL par rapport aux URL de la première réponse est que ces URL ne sont pas bloquées par des pare-feu.
Si vous voulez la plus grande image de YouTube pour un identifiant vidéo spécifique, l'URL devrait ressembler à ceci:
http://i3.ytimg.com/vi/SomeVideoIDHere/0.jpg
À l'aide de l'API, vous pouvez récupérer une image miniature par défaut. Le code simple devrait ressembler à ceci:
//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 vous souhaitez vous débarrasser des "barres noires" et le faire comme le fait YouTube, vous pouvez utiliser:
https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp
Et si vous ne pouvez pas utiliser l'extension de fichier .webp
, vous pouvez le faire comme suit:
https://i.ytimg.com/vi/<video id>/mqdefault.jpg
De plus, si vous avez besoin de la version non mise à l'échelle, utilisez maxresdefault
au lieu de mqdefault
.
Remarque: je ne suis pas sûr du rapport hauteur/largeur si vous prévoyez d'utiliser maxresdefault
.
J'ai créé une fonction pour extraire uniquement les images existantes 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;
}
Dans YouTube Data API v , vous pouvez obtenir les vignettes de la vidéo avec la fonction videos-> list . A partir de snippet.thumbnails. (Key) , vous pouvez choisir la miniature par défaut, de résolution moyenne ou élevée, et obtenir sa largeur, sa hauteur et son URL.
Vous pouvez également mettre à jour les vignettes avec la fonctionnalité vignettes-> définir .
Pour des exemples, vous pouvez consulter le projet exemples d’API YouTube . ( ceux en PHP .)
Vous pouvez obtenir le Entrée vidéo qui contient l'URL de la vignette de la vidéo. Il y a un exemple de code dans le lien. Ou, si vous voulez analyser XML, il y a des informations ici . Le code XML renvoyé contient un élément media:thumbnail
, qui contient l'URL de la vignette.
// 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 appartient à Google et Google aime disposer d’un nombre raisonnable d’images pour différentes tailles d’écran. Par conséquent, ses images sont stockées dans différentes tailles. Voici un exemple de la façon dont votre vignette ressemblera à ceci:
Vignette de basse qualité:
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg
Vignette de qualité moyenne:
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg
Vignette de haute qualité:
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg
Vignette de qualité maximale:
http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg
Si vous souhaitez simplement rechercher sur YouTube et obtenir les propriétés associées:
Obtenir une API publique - Ce lien vous indique la bonne direction
Utilisez la chaîne de requête ci-dessous. La requête de recherche (indiquée par q = ) dans la chaîne d'URL est stackoverflow à des fins d'exemple. YouTube vous enverra ensuite une réponse JSON dans laquelle vous pourrez ensuite analyser Thumbnail, Snippet, Author, etc.
Utilisation:
https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100®ionCode=us&key=**Your YouTube ID**
Ci-dessus est le lien. Grâce à cela, vous pouvez trouver les caractéristiques des vidéos sur YouTube. Après avoir trouvé les caractéristiques, vous pouvez obtenir des vidéos de la catégorie sélectionnée. Ensuite, vous pourrez trouver les images vidéo sélectionnées avec réponse d'Asaph.
Essayez l'approche ci-dessus et vous pouvez tout analyser à partir de YouTube API .
J'ai utilisé les vignettes YouTube de cette manière:
$url = 'http://img.youtube.com/vi/' . $youtubeId . '/0.jpg';
$img = dirname(__FILE__) . '/youtubeThumbnail_' . $youtubeId . '.jpg';
file_put_contents($img, file_get_contents($url));
N'oubliez pas que YouTube empêche d'inclure des images directement à partir de leur serveur.
Une autre alternative intéressante consiste à utiliser l'API oEmbed qui est prise en charge par YouTube.
Vous ajoutez simplement votre URL YouTube à l'URL oEmbed et vous recevez un JSON comprenant une vignette et le code HTML à incorporer.
Exemple:
http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DDLzxrzFCyOs
Vous donnerait:
{
thumbnail_url: "https://i.ytimg.com/vi/DLzxrzFCyOs/hqdefault.jpg",
width: 459,
author_name: "AllKindsOfStuff",
version: "1.0",
author_url: "https://www.youtube.com/channel/UCLNd5EtH77IyN1frExzwPRQ",
thumbnail_width: 480,
type: "video",
provider_url: "https://www.youtube.com/",
html: "<iframe width="459" height="344" src="https://www.youtube.com/embed/DLzxrzFCyOs?feature=oembed" frameborder="0" allowfullscreen></iframe>",
title: "Some title bla bla foo bar",
thumbnail_height: 360,
provider_name: "YouTube",
height: 344
}
Lisez la documentation pour plus information .
Juste pour ajouter/développer les solutions proposées, j’estime nécessaire de noter que, comme j’ai eu ce problème moi-même, on peut récupérer plusieurs contenus de vidéos YouTube, dans ce cas, des vignettes, avec une requête HTTP:
En utilisant un client rest, dans ce cas, HTTPFUL, vous pouvez faire quelque chose comme ceci:
<?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);
?>
J'ai trouvé cet outil astucieux qui vous permet de créer l'image avec le bouton de lecture YouTube placé sur l'image:
Une simple fonction PHP que j'ai créée pour la vignette YouTube et les types sont
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 vous utilisez l'API publique, le meilleur moyen de le faire consiste à utiliser les instructions if
.
Si la vidéo est publique ou non répertoriée, vous définissez la vignette à l'aide de la méthode URL. Si la vidéo est privée, vous utilisez l'API pour obtenir la vignette.
<?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';
}
YouTube nous fournit les quatre images générées pour chaque vidéo via l’API de données (v3), par exemple:
Selon cela, vous devez énoncer votre URL de la manière suivante:
www.googleapis.com/youtube/v3/videos?part=snippet&id=`yourVideoId`&key=`yourApiKey`
Modifiez maintenant votre identifiant vidéo et votre clé API en identifiant vos identifiants vidéo et api-clés respectifs. Sa réponse sera une sortie JSON vous fournissant les quatre liens dans les vignettes de la variable snippet (si toutes sont disponibles).
Vous pouvez obtenir l'ID de la vidéo à partir de l'URL de la vidéo YouTube à l'aide de parse_url , parse_str , puis l'insérer dans les URL prédictives des images. Merci à YouTube pour les URL prédictives
$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/<?php print $ytID?>/maxresdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/mqdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/hqdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/sddefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/default.jpg";
Vous pouvez utiliser cet outil pour générer des vignettes YouTube.
https://tools.tutsplanet.com/index.php/get-youtube-video-thumbnails
Je pense qu’il ya beaucoup de réponses pour les vignettes, mais je souhaite ajouter d’autres URL pour obtenir très facilement les vignettes de YouTube. Je prends juste un texte de la réponse d'Asaph. Voici quelques URL pour obtenir des vignettes YouTube:
https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/default.jpg
Pour la version haute qualité de la vignette, utilisez une URL similaire à celle-ci:
https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg
Il existe également une version de qualité moyenne de la vignette, utilisant une URL similaire à celle de haute qualité:
https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg
Pour la version en définition standard de la vignette, utilisez une URL similaire à celle-ci:
https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/sddefault.jpg
Pour la version à résolution maximale de la vignette, utilisez une URL similaire à celle-ci:
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');
La réponse du haut est optimisé pour une utilisation manuelle. Le jeton d'identification vidéo sans séparateur permet une sélection en double-clic.
Chaque vidéo YouTube a quatre images générées. De manière prévisible, ils sont formatés comme suit:
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
Le premier de la liste est une image en taille réelle et les autres sont des images miniatures. La vignette par défaut (c.-à-d. L'un des 1.jpg
, 2.jpg
, 3.jpg
) est:
https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg
Pour la version haute qualité de la vignette, utilisez une URL similaire à celle-ci:
https://img.youtube.com/vi/YOUTUBEVIDEOID/hqdefault.jpg
Il existe également une version de qualité moyenne de la vignette, utilisant une URL similaire à celle du siège:
https://img.youtube.com/vi/YOUTUBEVIDEOID/mqdefault.jpg
Pour la version en définition standard de la vignette, utilisez une URL similaire à celle-ci:
https://img.youtube.com/vi/YOUTUBEVIDEOID/sddefault.jpg
Pour la version à résolution maximale de la vignette, utilisez une URL similaire à celle-ci:
https://img.youtube.com/vi/YOUTUBEVIDEOID/maxresdefault.jpg
Toutes les URL ci-dessus sont également disponibles via HTTP. De plus, le nom d'hôte légèrement plus court i3.ytimg.com
remplace la valeur de img.youtube.com
dans les exemples d'URL ci-dessus.
Vous pouvez également utiliser API de données YouTube (v3) pour obtenir des images miniatures.
Méthode 1:
Vous pouvez trouver toutes les informations pour une vidéo YouTube avec une page JSON comportant même "thumbnail_url", http://www.youtube.com/oembed?format=json&url= {l'URL de votre vidéo va ici}
Comme l'URL finale, look + PHP code de test
$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
Pour plus de détails, vous pouvez également voir https://www.youtube.com/watch?v=mXde7q59BI8 tutoriel vidéo 1
Méthode 2:
Utilisation du lien d’image YouTube, https://img.youtube.com/vi/ "insérer-youtube-video-id-here" /default.jpg
Méthode 3:
Utilisation du code source du navigateur pour obtenir une vignette à l'aide d'un lien URL vidéo - Allez au code source vidéo et recherchez thumbnailurl. Maintenant, vous pouvez utiliser cette URL dans votre code source:
{img src="https://img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg"}
Pour plus de détails, vous pouvez également consulter Comment obtenir une vignette de la vidéo YouTube à l'aide de l'id ou https://www.youtube.com/watch ? v = 9f6E8MeM6PI tutoriel vidéo 2
Utilisez img.youtube.com/vi/YouTubeID/ImageFormat.jpg
Ici, les formats d'image sont différents comme default, hqdefault, maxresdefault.
Enregistrez ce code dans un fichier .php vide et testez-le.
<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';
}
Merci.
Voici une fonction simple que j'ai créée pour obtenir les vignettes. Il est facile à comprendre et à utiliser.
$ link est le lien YouTube copié exactement tel qu'il est dans le navigateur, par exemple, 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;
}
Ceci est ma solution côté client uniquement sans API-clé requise.
YouTube.parse('https://www.youtube.com/watch?v=P3DGwyl0mJQ').then(_ => console.log(_))
Le code:
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`
Utilitaire 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
})
}
Utilitaire 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
},
{})
}