2742 votes

Comment obtenir une vignette d'une vidéo YouTube à partir de l'API YouTube ?

Si j'ai l'URL d'une vidéo YouTube, existe-t-il un moyen d'utiliser PHP et cURL pour obtenir la vignette associée à partir de l'API YouTube ?

1 votes

Voici quelques fonctions PHP que j'ai créées pour obtenir la meilleure vignette disponible à partir de la méthode de l'URL sans faire appel à l'API, en me basant sur les nombreuses bonnes réponses de cette page : gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5

1 votes

5257voto

Asaph Points 56989

Chaque vidéo YouTube comporte quatre images générées. Elles sont, de manière prévisible, formatées 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

La première de la liste est une image en taille réelle et les autres sont des vignettes. L'image miniature par défaut (c.-à-d. l'une des images de type 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 QG :

https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

Pour la version de 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. En outre, le nom d'hôte légèrement plus court i3.ytimg.com fonctionne à la place de img.youtube.com dans les exemples d'URL ci-dessus.

Vous pouvez également utiliser l'option API de données YouTube (v3) pour obtenir des images miniatures.

54 votes

Juste au cas où quelqu'un d'autre ferait cette erreur stupide - vous ne pouvez pas utiliser http://www.img.youtube.com seulement http://img.youtube.com

1 votes

@KeyLimePiePhotonAndroid, je pense que les requêtes concernant les listes de lecture fonctionneraient mieux dans une question séparée.

43 votes

@NickG mqdefault est 16:9

431voto

Salman A Points 60620

Vous pouvez utiliser API de données YouTube pour récupérer les vignettes des vidéos, la légende, la description, le classement, les statistiques et plus encore. La version 3 de l'API nécessite une clé*. Obtenez la clé et créez un vidéos : liste demande :

https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID

Exemple de code 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);

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 il se peut que l'on vous demande des informations de facturation en fonction du nombre de requêtes API que vous prévoyez de faire. Cependant, quelques milliers de requêtes par jour sont gratuites.

Article source .

6 votes

Pour info : je n'ai pas modifié le code pour l'adapter à la nouvelle structure JSON. Le code dans votre getJSON est erroné. Vous avez utilisé jsonc au lieu de json pour getJSON. Il échoue à cause de votre mauvaise structure JSON.

5 votes

Seul le premier exemple peut utiliser jsonc . Les exemples jQuery et PHP MUST utiliser json . Et j'ai mis à jour le code pour qu'il soit conforme à la nouvelle structure JSON. J'utilise le code en ce moment et il fonctionne LIVE. Donc ne dites pas qu'il ne fonctionne pas sans lire les modifications. Merci !

7 votes

Les exemples jQuery et PHP DOIVENT utiliser json. ... pouvez-vous fournir une référence ? De même, la demande d'un numéro de version spécifique de l'API ( v=2 ) s'occupe des changements d'API.

328voto

AGMG Points 378

Ce que dit Asaph 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 nombres ci-dessous sont basés sur une vidéo). Il y a quelques vignettes dont l'existence est garantie :

Width | Height | URL
------|--------|----
120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/1.jpg
120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/2.jpg
120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/3.jpg
120   | 90     | https://i.ytimg.com/vi/<VIDEO ID>/default.jpg
320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq1.jpg
320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq2.jpg
320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mq3.jpg
320   | 180    | https://i.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg
480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/0.jpg
480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq1.jpg
480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq2.jpg
480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hq3.jpg
480   | 360    | https://i.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg

En outre, d'autres vignettes peuvent exister ou non. Leur présence est probablement basée sur la qualité de la vidéo.

Width | Height | URL
------|--------|----
640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sd1.jpg
640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sd2.jpg
640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sd3.jpg
640   | 480    | https://i.ytimg.com/vi/<VIDEO ID>/sddefault.jpg
1280  | 720    | https://i.ytimg.com/vi/<VIDEO ID>/hq720.jpg
1920  | 1080   | https://i.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg

Vous pouvez trouver des scripts JavaScript et PHP pour récupérer les vignettes et d'autres informations sur YouTube :

Vous pouvez également utiliser le Générateur d'informations sur les vidéos YouTube outil pour obtenir tous les les informations sur une vidéo YouTube en soumettant une URL ou un identifiant vidéo.

5 votes

Vous pouvez également obtenir le même résultat avec le lien officiel de youtube. img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg où mJ8tq8AnNis est l'identifiant vidéo

4 votes

Parfois, certains n'existent pas - i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg est faux cependant i1.ytimg.com/vi/r5R8gSgedh4/0.jpg est acceptable par exemple.

0 votes

Merci d'avoir posté ce message. Avez-vous une source pour ces données ? Elles sont correctes, mais je voudrais un lien vers quelque chose de Youtube/Google à ce sujet et je n'en trouve pas.

90voto

Naren Points 862

Dans l'API YouTube V3, nous pouvons également utiliser ces URLs 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

L'un des avantages de ces URL par rapport aux URL de la première réponse est qu'elles ne sont pas bloquées par les pare-feu.

3 votes

Ces images sont-elles censées être placées dans une balise img et devraient-elles fonctionner ? J'essaie d'inclure le lien avec le bon identifiant de vidéo youtube et de les placer dans la balise img, mais j'obtiens toujours un 404.

5 votes

@Lion789 Ces URLs fonctionnent bien lorsqu'elles sont placées dans une balise img. Le problème peut être une mauvaise identification de la vidéo ou la résolution demandée peut ne pas être disponible mais vous n'obtiendrez pas le 404 avec ces erreurs.

2 votes

Est-il confirmé que les urls continueront à fonctionner après l'arrêt de l'API v2 ?

60voto

PoorBoy Points 209

Si vous souhaitez obtenir la plus grande image de YouTube pour un identifiant vidéo spécifique, l'URL doit ressembler à ceci :

http://i3.ytimg.com/vi/SomeVideoIDHere/0.jpg

En utilisant l'API, vous pouvez récupérer l'image de la vignette par défaut. Le code simple devrait être quelque chose comme 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);

6 votes

J'ai trouvé un exemple où 0.jpg a une résolution de 480x360, alors que maxresdefault.jpg a 1280x720

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X