Fetch YouTube highest thumbnail resolution Fetch YouTube highest thumbnail resolution php php

Fetch YouTube highest thumbnail resolution


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:

defaultmqdefaulthqdefaultsddefault

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";.


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.jpghttp://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.


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