wake-up-neo.com

Holen Sie sich die höchste Thumbnail-Auflösung von YouTube

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.

14
Jim

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 maxresdefaultgibt.

Nur Videos mit einer Auflösung von 720p oder mehr haben maxresdefaultname__. 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 maxresdefaultebenfalls 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";.

18
David Chen

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.

7
Amal Murali

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

6
Ibrahim Ulukaya

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.

1
MikeSchinkel