Je veux obtenir la plus haute vignette youtube "maxresdefault.jpg"
Comme celui-ci
http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
J'utilise ce code php simple
<?php
$youtub_id = "Cj6ho1-G6tw";
echo "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";
?>
Le problème avec le code ci-dessus est qu'il existe des vidéos comme celle-ci http://youtu.be/VGazSZUYyf4NOT HD
Et le résultat est gris petit 404 image de youtube
http://i.ytimg.com/vi/VGazSZUYyf4/maxresdefault.jpg
Alors, comment obtenir la plus haute vignette YouTube, donc si "maxresdefault" n'est pas disponible, obtenez la prochaine grande vignette "hqdefault", sinon, obtenez le prochain "mqdefault" etc ...
J'ai essayé d'utiliser gdata youtube mais de toute façon la vidéo hd ou non "maxresdefault" ne s'affiche pas.
La raison en est que la résolution sur Tirer le meilleur parti des cartes n’est pas d’au moins 720p.
En regardant le api pour cette vidéo spécifique , vous pouvez voir qu’il n’ya pas de maxresdefault
.
Seules les vidéos dont la résolution est 720p ou supérieure ont maxresdefault
. Ceci n'est pas répertorié dans l'API dans les vidéos supérieures. Donc, afin d’obtenir la résolution la plus élevée possible, vous devriez également vérifier si la variable maxresdefault
fonctionne également.
<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'/>
Votre meilleure option pour une vignette de la plus haute qualité est d’utiliser l’API et d’obtenir l’image avec le plus grand attribut yt:name
.
La commande est:
default
mqdefault
hqdefault
sddefault
Exemple de code de cela en 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.'">';
Cela fonctionne à la fois sur $youtub_id = "Cj6ho1-G6tw";
et $youtub_id = "VGazSZUYyf4";
.
Vous pouvez utiliser getimagesize()
et vérifier si l'image existe (il y a aussi file_exists()
, mais cela pourrait ne pas fonctionner très bien dans ce cas).
Vous pouvez utiliser cette fonction pour récupérer la capture d'écran de la résolution la plus élevée d'une vidéo particulière.
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;
}
}
Utilisation:
echo fetch_highest_res('Cj6ho1-G6tw').'<br>';
echo fetch_highest_res('VGazSZUYyf4');
Sortie:
http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
http://i.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg
Remarque: Cette solution n'est peut-être pas la meilleure et constitue un contournement si vous ne souhaitez pas utiliser l'API.
Toutes les autres réponses qui dépendent du nettoyage d'URL statique ne sont pas prises en charge. Ils peuvent être modifiés et vous devrez peut-être modifier votre application à tout moment.
Pour cela, vous devez utiliser Data API v3 . Vous devriez aller avec une requête videos-> list avec id = videoId et part = snippet. Dans la réponse, vous allez vérifier snippet.thumbnails. ['High']. Url
Grâce à la réponse d'Ibrahim Ulukaya, j'ai pu comprendre pourquoi la réponse correcte de David Chen ne fonctionnait plus; Google a déconseillé d'utiliser cette API. (Méchant, méchant, méchant, méchant, Google .)
L'URL suivante renverra une liste d'objets miniatures à l'aide de Data API v3 :
https://www.googleapis.com/youtube/v3/videos?id={VIDEO_ID}&key={API_KEY}&part=snippet&fields=items/snippet/thumbnails
Le {VIDEO_ID}
peut être trouvé dans toute URL de vidéo YouTube et le {API_KEY}
vous oblige à:
Une fois que vous avez l'URL avec vos VIDEO_ID
et API_KEY
substitués aux espaces réservés, vous devriez récupérer un JSON qui ressemble à ceci:
{
"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
}
}
}
}
]
}
À partir de là, je suppose que vous saurez quoi faire ...?
J'espère que cela t'aides.