Comment puis-je obtenir une miniature de vidéo YouTube à partir de l'API YouTube?

2400

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

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

Réponses:

4614

Chaque vidéo YouTube contient quatre images générées. 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

La première de la liste est une image en taille réelle et d'autres sont des images miniatures. L'image de la vignette par défaut ( par exemple, l' un des 1.jpg, 2.jpg, 3.jpg) est la suivante :

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 au 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. En outre, le nom d'hôte légèrement plus court i3.ytimg.comfonctionne à la place des img.youtube.comURL d'exemple ci-dessus.

Vous pouvez également utiliser l' API YouTube Data (v3) pour obtenir des images miniatures.

Asaph
la source
27
Juste au cas où quelqu'un d'autre commet cette erreur stupide - vous ne pouvez pas l'utiliser http://www.img.youtube.com, seulementhttp://img.youtube.com
Ciaran Phillips
36
@NickG a mqdefault16: 9
tomtastico
57
est-ce quelque part officiellement documenté?
bjunix
14
Les miniatures de résolution supérieure ne sont pas garanties d'exister.
Salman A
63
@ clami219 qui est faux aussi - fonctionne évidemment (2015-04): i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp , la vérité: sddefaultet maxresdefaultNE SONT PAS TOUJOURS DISPONIBLES, certaines vidéos les ont cependant ....
jave.web
398

Vous pouvez utiliser l' API YouTube Data pour récupérer les vignettes vidéo, la légende, la description, la note, les statistiques et plus encore. L'API version 3 nécessite une clé *. Obtenez la clé et créez une vidéo: demande de liste :

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

Production

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 demandes d'API que vous prévoyez de faire. Cependant, quelques millions de demandes par jour sont gratuites.

Article d'origine .

Salman A
la source
6
Pour info: je n'ai pas changé le code pour l'adapter à la nouvelle structure JSON. Le code de votre getJSON est incorrect. Vous avez utilisé à la jsoncplace de jsongetJSON. Il échoue en raison de votre mauvaise structure JSON.
mauris
5
Seul le premier exemple peut être utilisé jsonc. Les exemples jQuery et PHP DOIVENT utiliser json. Et j'ai mis à jour le code pour le rendre conforme à la nouvelle structure JSON. J'utilise le code en ce moment et cela fonctionne EN DIRECT. alors ne dites pas que cela ne fonctionne pas sans lire les modifications. Merci!
mauris
7
Les exemples jQuery et PHP DOIVENT utiliser json ... pouvez-vous fournir une référence? En outre, la demande d'un numéro de version d'API spécifique ( v=2) prend en charge les modifications d'API.
Salman A
4
L'appel gdata ne renvoie pas si maxresdefault.jpg est disponible pour les vidéos où il est disponible, uniquement mq / hq / sd.
Aaron
2
L'API v3 est TRÈS mal documentée. Ils vous donnent un exemple de code mais la section "référence" est très courte. Certaines choses qui devraient être relativement "évidentes" semblent nécessiter des solutions de contournement extrêmes.
CashCow
256

Ce qu'Asaph a dit est juste. Cependant, toutes les vidéos YouTube ne contiennent pas les neuf miniatures. De plus, la taille des images des vignettes dépend de la vidéo (les nombres ci-dessous sont basés sur une seule).

Il existe sept miniatures 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 miniatures peuvent ou non exister. Leur présence est probablement basée sur 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 miniatures et d'autres informations YouTube dans:

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

AGMG
la source
5
Vous pouvez également obtenir le même résultat avec le lien officiel youtube img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg où mJ8tq8AnNis est l'identifiant vidéo
Ragaisis
4
Parfois, certains n'existent pas - i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg est faux, bien que i1.ytimg.com/vi/r5R8gSgedh4/0.jpg soit correct par exemple.
NoBugs
Merci d'avoir posté ça. Avez-vous une source pour ces données? C'est correct, mais j'aimerais un lien vers quelque chose de Youtube / Google à ce sujet et je n'en trouve pas.
Jonathan Vanasco
@JonathanVanasco, désolé. Si vous voulez dire une ressource officielle pour le contenu exact, je n'en connais pas. Et je ne pense pas qu'il y ait un but de publier quelque chose comme ça de leur point de vue.
AGMG
4
L'outil "YouTube Video Information Generator" ne fonctionne pas actuellement. Pensez à modifier la réponse.
giovannipds
74

Dans YouTube API V3, nous pouvons également utiliser ces URL pour obtenir des miniatures ... 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 avantage de ces URL par rapport aux URL de la première réponse est que ces URL ne sont pas bloquées par les pare-feu.

Naren
la source
3
Ces images sont-elles supposées être placées dans une balise img et devraient simplement fonctionner parce que j'essaie d'inclure le lien avec le bon identifiant vidéo youtube et de les mettre dans la balise img mais je reçois toujours un 404
Lion789
5
@ Lion789 Ces URL fonctionnent correctement lorsqu'elles sont placées dans une balise img .. Le problème peut être un mauvais identifiant vidéo ou la résolution demandée peut ne pas être disponible mais vous n'obtiendrez pas le 404 avec ces erreurs. Veuillez vérifier l'url de la balise img.
Naren
2
Est-il confirmé que les URL continueront de fonctionner après l'arrêt de l'API v2?
Daniele B
1
@DanieleB Ces URL fonctionnent toujours. Savez-vous comment vérifier si ces URL fonctionneront après l'API v2?
Naren
53

Si vous voulez la plus grande image de YouTube pour un ID de vidéo spécifique, l'URL devrait ressembler à ceci:

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

En utilisant 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);
Pauvre garçon
la source
2
J'ai trouvé un exemple où 0.jpg a une résolution de 480x360, tandis que maxresdefault.jpg a 1280x720
Nico Haase
45

Si vous voulez vous débarrasser des "barres noires" et le faire comme YouTube le fait, vous pouvez utiliser:

https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp

Et si vous ne pouvez pas utiliser l' .webpextension de fichier, vous pouvez le faire comme ceci:

https://i.ytimg.com/vi/<video id>/mqdefault.jpg

De plus, si vous avez besoin de la version non mise à l'échelle, utilisez maxresdefaultplutôt que mqdefault.

Remarque: je ne suis pas sûr du rapport hauteur / largeur si vous prévoyez d'utiliser maxresdefault.

LuTz
la source
2
Ce n'est pas disponible pour de nombreuses vidéos. Par exemple: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp
NickG
2
@NickG: Cela fonctionne si vous supprimez _webpet remplacez l'extension par .jpg. Exemple de travail: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , je ne suis pas sûr du rapport d'aspect.
LuTz
34

J'ai créé une fonction pour récupérer 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;
}
Henrik Albrechtsson
la source
32

Dans YouTube Data API v3 , vous pouvez obtenir les vignettes des vidéos avec la fonction vidéos-> liste . À partir de snippet.thumbnails. (Clé) , vous pouvez choisir la vignette par défaut, moyenne ou haute résolution, et obtenir sa largeur, sa hauteur et son URL.

Vous pouvez également mettre à jour les miniatures avec la fonctionnalité miniatures-> définir .

Pour des exemples, vous pouvez consulter le projet d' exemples d'API YouTube . ( PHP ).

Ibrahim Ulukaya
la source
1
Je suppose que c'est la bonne façon de le faire, car cela vient d'un membre des relations Google Dev pour l'API YouTube
Adonis K. Kakoulidis
31

Vous pouvez obtenir l' entrée vidéo qui contient l'URL de la miniature de la vidéo. Il y a un exemple de code dans le lien. Ou, si vous souhaitez analyser XML, il y a des informations ici . Le XML renvoyé contient un media:thumbnailélément, qui contient l'URL de la miniature.

keyboardP
la source
2
Je ne parviens pas à le sortir en utilisant simpleXML. C'est assez dur!
Aditya MP
25
// 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;
Mahendra Tyagi
la source
2
c'est une mauvaise solution! pourquoi ne pas utiliser Youtube api v3?
mpgn
19

YouTube appartient à Google et Google aime avoir un nombre raisonnable d'images pour différentes tailles d'écran, donc ses images sont stockées dans différentes tailles. Voici un exemple de la forme de votre miniature:

Vignette de faible 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
évasion de la vie
la source
16

La version 3 de l'API YouTube est opérationnelle en 2 minutes

Si tout ce que vous voulez faire, c'est rechercher sur YouTube et obtenir les propriétés associées:

  1. Obtenez une API publique - Ce lien donne une bonne direction

  2. Utilisez la chaîne de requête ci-dessous. La requête de recherche (notée q = ) dans la chaîne URL est stackoverflow à titre d'exemple. YouTube vous enverra alors une réponse JSON où vous pourrez ensuite analyser la vignette, l'extrait de code, l'auteur, etc.

    https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&maxResults=50&q=stackoverflow&key=YOUR_API_KEY_HERE

Chris
la source
16

Une autre bonne alternative serait d'utiliser l' API oEmbed qui est prise en charge par YouTube.

Vous ajoutez simplement votre URL YouTube à l'URL oEmbed et vous recevrez un JSON comprenant une vignette et le code HTML pour l'intégration.

Exemple:

http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DxUeJdWYdMmQ

Vous donnerait:

{
  "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"
}

Lisez la documentation pour plus d' informations .

Andresch Serj
la source
15

Utilisation:

https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100&regionCode=us&key=**Your YouTube ID**

Ci-dessus est le lien. En utilisant cela, vous pouvez trouver les caractéristiques YouTube des vidéos. Après avoir trouvé les caractéristiques, vous pouvez obtenir des vidéos de la catégorie sélectionnée. Après cela, vous pouvez trouver des images vidéo sélectionnées en utilisant la réponse d'Asaph .

Essayez l'approche ci-dessus et vous pouvez tout analyser à partir de l' API YouTube .

Nikh1414
la source
14

J'ai utilisé les miniatures 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 depuis leur serveur.

blacksunshineCoding
la source
13

Juste pour ajouter / développer les solutions données, je pense qu'il est nécessaire de noter que, comme j'ai eu ce problème moi-même, on peut réellement saisir plusieurs contenus de vidéos YouTube, dans ce cas, des miniatures, avec une demande HTTP:

En utilisant un client de repos, 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);

?>
Hlawuleka MAS
la source
13

API de données YouTube

YouTube nous fournit les quatre images générées pour chaque vidéo via l'API Data (v3), par exemple,

  1. https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg

  2. https://i.ytimg.com/vi/V_zwalcR8DU/sddefault.jpg

  3. https://i.ytimg.com/vi/V_zwalcR8DU/hqdefault.jpg

  4. https://i.ytimg.com/vi/V_zwalcR8DU/mqdefault.jpg

Accéder aux images via l'API

  1. Obtenez d'abord votre clé API publique sur la console API Google .
  2. Selon la référence des miniatures de YouTube dans la documentation de l' API , vous devez accéder aux ressources sur snippet.thumbnails.
  3. Selon cela, vous devez formuler votre URL comme ceci -

    www.googleapis.com/youtube/v3/videos?part=snippet&id=`yourVideoId`&key=`yourApiKey`

Maintenant, changez votre ID vidéo et votre clé API en votre ID vidéo et clé api respectifs et sa réponse sera une sortie JSON vous fournissant les quatre liens dans les vignettes de la variable d'extrait (si tous sont disponibles).

Daksh Miglani
la source
13

Vous pouvez obtenir l'ID vidéo à partir de l'URL de la vidéo YouTube en utilisant parse_url , parse_str , puis 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/$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";

Vous pouvez utiliser cet outil pour générer des miniatures YouTube

https://tools.tutsplanet.com/index.php/get-youtube-video-thumbnails

Rinto George
la source
11

Une simple fonction PHP que j'ai créée pour la vignette YouTube et les types sont

  • défaut
  • hqdefault
  • mqdefault
  • sddefault
  • maxresdefault

 

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;}
Arun Yokesh
la source
10

Si vous utilisez l'API publique, la meilleure façon de le faire est d'utiliser des ifinstructions.

Si la vidéo est publique ou non répertoriée, vous définissez la miniature à l'aide de la méthode URL. Si la vidéo est privée, vous utilisez l'API pour obtenir la miniature.

<?php
    if($video_status == 'unlisted'){
        $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
        $video_status = '<i class="fa fa-lock"></i>&nbsp;Unlisted';
    }
    elseif($video_status == 'public'){
        $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
        $video_status = '<i class="fa fa-eye"></i>&nbsp;Public';
    }
    elseif($video_status == 'private'){
        $video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url'];
        $video_status = '<i class="fa fa-lock"></i>&nbsp;Private';
    }
Harvey Connor
la source
8

Je pense que ce sont de nombreuses réponses pour les vignettes, mais je veux ajouter d'autres URL pour obtenir la vignette YouTube très facilement. Je prends juste un texte de la réponse d'Asaph. Voici quelques URL pour obtenir des miniatures 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 à la 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
Kumar
la source
6
    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');
Nimesh Vagadiya
la source
5

Voici la meilleure réponse optimisée pour une utilisation manuelle. Le jeton d'identification vidéo sans séparateurs permet de sélectionner avec un double clic.

Chaque vidéo YouTube contient quatre images générées. 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

La première de la liste est une image en taille réelle et d'autres sont des images miniatures. (. -À- dire une de l'image de la vignette par défaut 1.jpg, 2.jpg, 3.jpg) est la suivante :

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 au 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.comfonctionne à la place deimg.youtube.comURL d'exemple ci-dessus.

Vous pouvez également utiliser l' API YouTube Data (v3) pour obtenir des images miniatures.


la source
4

Méthode 1:

Vous pouvez trouver toutes les informations pour une vidéo YouTube avec une page JSON qui a même "thumbnail_url", http://www.youtube.com/oembed?format=json&url= {l'URL de votre vidéo va ici}

Comme l'URL finale + le code de test 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);

Production

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 Comment obtenir une miniature de vidéo YouTube en utilisant id ou https://www.youtube.com/watch?v=mXde7q59BI8 tutoriel vidéo 1

Méthode 2:

En utilisant le lien d'image YouTube, https://img.youtube.com/vi/ "insert-youtube-video-id-here" /default.jpg

Méthode 3:

Utilisation du code source du navigateur pour obtenir la miniature à l'aide du lien URL vidéo - accédez au code source de la vidéo et recherchez thumbnailurl. Vous pouvez maintenant 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 voir Comment obtenir une miniature de vidéo YouTube en utilisant id ou https://www.youtube.com/watch?v=9f6E8MeM6PI tutoriel vidéo 2

Hassan Saeed
la source
Liens https://www.youtube.com/watch?v=mXde7q59BI8et https://www.youtube.com/watch?v=9f6E8MeM6PIsont (effectivement) rompus.
Peter Mortensen
youtube a interdit cette vidéo en raison de ses politiques j'espère que cet article vous aidera www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/
Hassan Saeed
3

Utilisation img.youtube.com/vi/YouTubeID/ImageFormat.jpg

Ici, les formats d'image sont différents comme default, hqdefault, maxresdefault.

shpwebhost
la source
2

Ceci est ma solution côté client uniquement sans clé API.

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
    },
    {})
}
catamphétamine
la source
1

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;
}
Sodruldeen Mustapha
la source
Cela ne fonctionne que lorsque l'URL n'a pas d'autres paramètres de requête.
Ma Kobi
oui, toutes les vidéos youtube suivent le format en regardant, vous pouvez copier le lien depuis le navigateur
Sodruldeen Mustapha
Et si vous avez un autre paramètre comme &t=227s?
Ma Kobi
1
je comprends votre point, mais les vidéos youtube standard sont livrées sans autres paramètres mais lorsque le besoin s'en fait sentir, vous pouvez filtrer le lien avant la première ligne de la fonction. Avez-vous besoin d'aide pour filtrer le lien pour vous assurer qu'il ignore toutes les autres choses, sauf celles nécessaires?
Sodruldeen Mustapha
1

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.

Ali
la source
-2
public const string tubeThumb = "http://i.ytimg.com/vi/[id]/hqdefault.jpg";
vid.Thumbnail = tubeThumb.Replace("[id]", vid.VideoID);
Rajat Jain
la source