Ich möchte das höchste Thumbnail von YouTube "maxresdefault.jpg" erhalten.
Wie dieser
http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
Ich verwende diesen einfachen PHP-Code
<?php
$youtub_id = "Cj6ho1-G6tw";
echo "http://i.ytimg.com/vi/".$youtub_id."/maxresdefault.jpg";
?>
Das Problem mit dem obigen Code ist, dass es Videos wie diese gibt http://youtu.be/VGazSZUYyf4 NICHT HD
Das Ergebnis ist ein kleines, kleines 404-Bild von Youtube
http://i.ytimg.com/vi/VGazSZUYyf4/maxresdefault.jpg
So bekommen Sie die höchste Youtube-Miniaturansicht. Wenn also "maxresdefault" nicht verfügbar ist, erhalten Sie die nächste große Miniaturansicht "hqdefault". Wenn nicht, rufen Sie die nächste "mqdefault" -Datei auf.
Ich habe versucht, gdata youtube zu verwenden aber entweder das video hd oder nicht "maxresdefault" wird nicht angezeigt.
Der Grund ist, dass die Auflösung von Making of Most of Maps nicht mindestens 720p beträgt.
Wenn Sie die api für dieses bestimmte Video betrachten , sehen Sie, dass es keinen maxresdefault
gibt.
Nur Videos mit einer Auflösung von 720p oder mehr haben maxresdefault
name__. Dies wird nicht in der API in höheren Videos aufgeführt. Um die höchste Auflösung zu erhalten, sollten Sie auch prüfen, ob der maxresdefault
ebenfalls funktioniert.
<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'/>
Die beste Möglichkeit für ein Miniaturbild mit der höchsten Qualität besteht darin, die API zu verwenden und das Bild mit dem größten yt:name
-Attribut abzurufen.
Die Reihenfolge ist:
default
mqdefault
hqdefault
sddefault
Beispielcode dafür in Aktion:
<?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.'">';
Dies funktioniert sowohl für $youtub_id = "Cj6ho1-G6tw";
als auch für $youtub_id = "VGazSZUYyf4";
.
Sie können getimagesize()
verwenden und prüfen, ob das Bild vorhanden ist (es gibt auch file_exists()
, in diesem Fall funktioniert es jedoch möglicherweise nicht sehr gut).
Mit dieser Funktion können Sie den Screenshot mit der höchsten Auflösung eines bestimmten Videos abrufen.
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;
}
}
Verwendungszweck:
echo fetch_highest_res('Cj6ho1-G6tw').'<br>';
echo fetch_highest_res('VGazSZUYyf4');
Ausgabe:
http://i.ytimg.com/vi/Cj6ho1-G6tw/maxresdefault.jpg
http://i.ytimg.com/vi/VGazSZUYyf4/hqdefault.jpg
Hinweis: Dies ist möglicherweise nicht die beste Lösung. Es ist eine Problemumgehung, wenn Sie die API nicht verwenden möchten.
Alle anderen Antworten, die auf das statische URL-Scraping angewiesen sind, werden nicht unterstützt. Sie können geändert werden, und Sie müssen möglicherweise Ihre Anwendung jederzeit ändern.
Verwenden Sie hierfür Data API v3 . Sie sollten mit einer videos -> list request mit id = videoId und part = snippet gehen. In der Antwort überprüfen Sie snippet.thumbnails. ['High']. Url
Dank der Antwort von Ibrahim Ulukaya konnte ich verstehen, warum die zuvor richtige Antwort von David Chen nicht mehr funktioniert. Google hat diese frühere API deaktiviert. ( Wicked, schlecht, frech, böse, Google .)
Die folgende URL gibt eine Liste von Miniaturobjekten mit der Data API v3 zurück:
https://www.googleapis.com/youtube/v3/videos?id={VIDEO_ID}&key={API_KEY}&part=snippet&fields=items/snippet/thumbnails
Der {VIDEO_ID}
kann als Teil einer beliebigen YouTube-Video-URL gefunden werden. Für den {API_KEY}
müssen Sie:
Nachdem Sie die URL mit Ihrem VIDEO_ID
und API_KEY
für die Platzhalter ersetzt haben, sollten Sie JSON zurückholen, das ungefähr so aussieht:
{
"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
}
}
}
}
]
}
Ich schätze mal, dass Sie wissen, was zu tun ist ...?
Hoffe das hilft.