Fetch YouTube highest thumbnail resolution

谁都会走 提交于 2021-02-05 20:11:39

问题


I want to get youtube highest thumbnail "maxresdefault.jpg"

Like this one

http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg

I'm using this simple php code

<?php

$youtub_id = "Cj6ho1-G6tw";
echo "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";

?>

The problem with the code above is there is videos like this one http://youtu.be/VGazSZUYyf4 NOT HD

And the result is gray small 404 image of youtube

http://i.ytimg.com/vi/VGazSZUYyf4/maxresdefault.jpg

So how to get the highest youtube thumbnail so if "maxresdefault" not available get the next big thumbnail "hqdefault", if not get the next "mqdefault" etc ...

I tried to use gdata youtube but either way the video hd or not "maxresdefault" not showing.


回答1:


The reason is because the resolution on Making the Most of Maps is not at least 720p.

Looking at the api for this specific video, you can see that there is no maxresdefault.

Only videos that are 720p or higher in resolution have maxresdefault. This is not listed in the API in videos that are higher. So in order to get the highest resolution, you should also check if the maxresdefault works as well.

<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/default.jpg' height='90' width='120' time='00:15:12.500' yt:name='default'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/mqdefault.jpg' height='180' width='320' yt:name='mqdefault'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg' height='360' width='480' yt:name='hqdefault'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/1.jpg' height='90' width='120' time='00:07:36.250' yt:name='start'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/2.jpg' height='90' width='120' time='00:15:12.500' yt:name='middle'/>
<media:thumbnail url='http://i1.ytimg.com/vi/VGazSZUYyf4/3.jpg' height='90' width='120' time='00:22:48.750' yt:name='end'/>

Your best bet for the highest quality thumbnail is to use the API and get the image with the largest yt:name attribute.

The order is:

default
mqdefault
hqdefault
sddefault

Example code of this in action:

<?php

$youtub_id = "VGazSZUYyf4";

$images = json_decode(file_get_contents("http://gdata.youtube.com/feeds/api/videos/".$youtub_id."?v=2&alt=json"), true);
$images = $images['entry']['media$group']['media$thumbnail'];
$image  = $images[count($images)-4]['url'];

$maxurl = "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";
$max    = get_headers($maxurl);

if (substr($max[0], 9, 3) !== '404') {
    $image = $maxurl;   
}

echo '<img src="'.$image.'">';

This works both on $youtub_id = "Cj6ho1-G6tw"; and $youtub_id = "VGazSZUYyf4";.




回答2:


You can use getimagesize() and check if the image exists (there's file_exists() too, but it may not work very well, in this case).

You can use this function to fetch the greatest resolution screenshot of a particular video.

Code:

function fetch_highest_res ($videoid) {
    $resolutions = array('maxresdefault', 'hqdefault', 'mqdefault');     
    foreach($resolutions as $res) {
        $imgUrl = "http://i.ytimg.com/vi/$videoid/$res.jpg";
        if(@getimagesize(($imgUrl))) 
            return $imgUrl;
    }
}

Usage:

echo fetch_highest_res('Cj6ho1-G6tw').'<br>';
echo fetch_highest_res('VGazSZUYyf4');

Output:

http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
http://i.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg

Note: This may not be the best solution, and it's a work-around if you don't want to use the API.




回答3:


All the other answers that are dependent on static url scraping are not supported. They can get changed and you may need to change your application at everytime.

For this you should use Data API v3. You should go with a videos->list request with id=videoId and part=snippet. In the response you will check snippet.thumbnails.['high'].url




回答4:


Thanks to Ibrahim Ulukaya's answer I was able to understand why David Chen's previously correct answer no longer works; Google has deprecated that prior working API. (Wicked, bad, naughty, evil, Google.)

The following URL will return a list of thumbnail objects using the Data API v3:

https://www.googleapis.com/youtube/v3/videos?id={VIDEO_ID}&key={API_KEY}&part=snippet&fields=items/snippet/thumbnails

The {VIDEO_ID} can be found as part of any YouTube video URL and the {API_KEY} requires you to:

  • First Create a Project
  • Then Enable YouTube's Data API v3 and
  • Finally Create an API key.

Once you have the URL with your VIDEO_ID and API_KEY substituted for the placeholders you should get back JSON that looks something like this:

{
 "items": [
  {
   "snippet": {
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/default.jpg",
      "width": 120,
      "height": 90
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/mqdefault.jpg",
      "width": 320,
      "height": 180
     },
     "high": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/hqdefault.jpg",
      "width": 480,
      "height": 360
     },
     "standard": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/sddefault.jpg",
      "width": 640,
      "height": 480
     },
     "maxres": {
      "url": "https://i.ytimg.com/vi/7Ey-Xkwn1s0/maxresdefault.jpg",
      "width": 1280,
      "height": 720
     }
    }
   }
  }
 ]
}

From there I am guessing you'll know what to do...?

Hope this helps.



来源:https://stackoverflow.com/questions/18029550/fetch-youtube-highest-thumbnail-resolution

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!