Wie erhalte ich ein YouTube-Video-Miniaturbild von der YouTube-API?


2398

Wenn ich eine YouTube-Video-URL habe, gibt es eine Möglichkeit, PHP und cURL zu verwenden, um das zugehörige Miniaturbild von der YouTube-API abzurufen?


Hier sind einige PHP-Funktionen, die ich erstellt habe, um die beste verfügbare Miniaturansicht der URL-Methode ohne Ping der API zu erhalten, basierend auf den vielen guten Antworten auf dieser Seite: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5
squarecandy

Antworten:


4610

Jedes YouTube-Video enthält vier generierte Bilder. Sie sind vorhersehbar wie folgt formatiert:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg

Das erste Bild in der Liste ist ein Bild in voller Größe, andere sind Miniaturbilder. Die Standarddarstellung des Bildes ( das heißt, einer von 1.jpg, 2.jpg, 3.jpg) ist:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg

Verwenden Sie für die hochwertige Version der Miniaturansicht eine ähnliche URL:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

Es gibt auch eine Version der Miniaturansicht mittlerer Qualität, die eine URL ähnlich dem HQ verwendet:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

Verwenden Sie für die Standarddefinitionsversion der Miniaturansicht eine ähnliche URL:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

Verwenden Sie für die Version des Miniaturbilds mit maximaler Auflösung eine ähnliche URL:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

Alle oben genannten URLs sind auch über HTTP verfügbar. Zusätzlich i3.ytimg.comfunktioniert der etwas kürzere Hostname anstelle der img.youtube.comobigen Beispiel-URLs.

Alternativ können Sie die YouTube-Daten-API (Version 3) verwenden , um Miniaturbilder abzurufen.


27
Für den Fall , jemand anderes dieses dummen Fehler macht - kann man nicht verwenden http://www.img.youtube.com, nurhttp://img.youtube.com
Ciaran Phillips

36
@ NickG mqdefaultist 16: 9
Tomtastico

57
Ist das irgendwo offiziell dokumentiert?
Bjunix

14
Es ist nicht garantiert, dass die Miniaturansichten mit höherer Auflösung vorhanden sind.
Salman A

63
@ clami219 das ist auch falsch - funktioniert offensichtlich (2015-04): i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp , die Wahrheit: sddefaultund sind maxresdefaultnicht immer verfügbar Einige Videos haben sie aber ....
jave.web

398

Mithilfe der YouTube-Daten-API können Sie Miniaturansichten, Beschriftungen, Beschreibungen, Bewertungen, Statistiken und mehr von Videos abrufen. Für API-Version 3 ist ein Schlüssel * erforderlich. Besorgen Sie sich den Schlüssel und erstellen Sie ein Video: Listenanforderung:

https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID

Beispiel PHP Code

$data = file_get_contents("https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=T0Jqdjbed40");
$json = json_decode($data);
var_dump($json->items[0]->snippet->thumbnails);

Ausgabe

object(stdClass)#5 (5) {
  ["default"]=>
  object(stdClass)#6 (3) {
    ["url"]=>
    string(46) "https://i.ytimg.com/vi/T0Jqdjbed40/default.jpg"
    ["width"]=>
    int(120)
    ["height"]=>
    int(90)
  }
  ["medium"]=>
  object(stdClass)#7 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/mqdefault.jpg"
    ["width"]=>
    int(320)
    ["height"]=>
    int(180)
  }
  ["high"]=>
  object(stdClass)#8 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/hqdefault.jpg"
    ["width"]=>
    int(480)
    ["height"]=>
    int(360)
  }
  ["standard"]=>
  object(stdClass)#9 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/sddefault.jpg"
    ["width"]=>
    int(640)
    ["height"]=>
    int(480)
  }
  ["maxres"]=>
  object(stdClass)#10 (3) {
    ["url"]=>
    string(52) "https://i.ytimg.com/vi/T0Jqdjbed40/maxresdefault.jpg"
    ["width"]=>
    int(1280)
    ["height"]=>
    int(720)
  }
}

* Sie benötigen nicht nur einen Schlüssel, sondern werden möglicherweise auch nach Rechnungsinformationen gefragt, abhängig von der Anzahl der API-Anforderungen, die Sie planen. Es sind jedoch nur wenige Millionen Anfragen pro Tag kostenlos.

Quellartikel .


6
Zu Ihrer Information: Ich habe den Code nicht geändert, um ihn an die neue JSON-Struktur anzupassen. Der Code in Ihrem getJSON ist falsch. Sie haben jsoncanstelle von jsongetJSON verwendet. Es schlägt aufgrund Ihrer falschen JSON-Struktur fehl.
Mauris

5
Nur das erste Beispiel kann verwenden jsonc. Die Beispiele jQuery und PHP MÜSSEN verwendet werden json. Und ich habe den Code aktualisiert, um ihn an die neue JSON-Struktur anzupassen. Ich benutze den Code gerade und er funktioniert LIVE. Sagen Sie also nicht, dass es nicht funktioniert, ohne die Änderungen zu lesen. Vielen Dank!
Mauris

7
Die jQuery- und PHP-Beispiele MÜSSEN json verwenden ... können Sie eine Referenz angeben ? Durch das Anfordern einer bestimmten API-Versionsnummer ( v=2) werden auch API-Änderungen berücksichtigt.
Salman A

4
Der Aufruf von gdata gibt nicht zurück, ob maxresdefault.jpg für Videos verfügbar ist, für die es verfügbar ist, sondern nur mq / hq / sd.
Aaron

2
API v3 ist SEHR schlecht dokumentiert. Sie geben Ihnen Beispielcode, aber der Abschnitt "Referenz" ist sehr detailliert. Einige Dinge, die relativ "offensichtlich" sein sollten, scheinen extreme Problemumgehungen zu erfordern.
CashCow

256

Was Asaph gesagt hat, ist richtig. Allerdings enthält nicht jedes YouTube-Video alle neun Miniaturansichten. Die Bildgröße der Miniaturansichten hängt auch vom Video ab (die folgenden Zahlen basieren auf einem).

Es gibt garantiert sieben Miniaturansichten:

| Thumbnail Name      | Size (px) | URL                                              |
|---------------------|-----------|--------------------------------------------------|
| Player Background   | 480x360   | https://i1.ytimg.com/vi/<VIDEO ID>/0.jpg         |
| Start               | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/1.jpg         |
| Middle              | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/2.jpg         |
| End                 | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/3.jpg         |
| High Quality        | 480x360   | https://i1.ytimg.com/vi/<VIDEO ID>/hqdefault.jpg |
| Medium Quality      | 320x180   | https://i1.ytimg.com/vi/<VIDEO ID>/mqdefault.jpg |
| Normal Quality      | 120x90    | https://i1.ytimg.com/vi/<VIDEO ID>/default.jpg   |

Darüber hinaus können die beiden anderen Miniaturansichten vorhanden sein oder nicht. Ihre Anwesenheit hängt wahrscheinlich davon ab, ob das Video von hoher Qualität ist.

| Thumbnail Name      | Size (px) | URL                                                  |
|---------------------|-----------|------------------------------------------------------|
| Standard Definition | 640x480   | https://i1.ytimg.com/vi/<VIDEO ID>/sddefault.jpg     |
| Maximum Resolution  | 1920x1080 | https://i1.ytimg.com/vi/<VIDEO ID>/maxresdefault.jpg |

JavaScript- und PHP-Skripte zum Abrufen von Miniaturansichten und anderen YouTube-Informationen finden Sie unter:

Sie können auch das YouTube Video Information Generator- Tool verwenden, um alle Informationen zu einem YouTube-Video abzurufen, indem Sie eine URL oder eine Video-ID eingeben.


5
Sie können das gleiche Ergebnis auch mit dem offiziellen Youtube-Link img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg erzielen, wobei mJ8tq8AnNis die Video-ID ist
Ragaisis

4
Manchmal existieren bestimmte nicht - i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg ist falsch, obwohl i1.ytimg.com/vi/r5R8gSgedh4/0.jpg zum Beispiel in Ordnung ist.
NoBugs

Vielen Dank für die Veröffentlichung. Haben Sie eine Quelle für diese Daten? Es ist richtig, aber ich möchte einen Link zu etwas von Youtube / Google dazu und kann keinen finden.
Jonathan Vanasco

@ JonathanVanasco, sorry. Wenn Sie eine offizielle Ressource für genaue Inhalte meinen, kenne ich keine. Und ich glaube nicht, dass es aus ihrer Sicht einen Zweck gibt, so etwas zu veröffentlichen.
Hauptversammlung

4
Das Tool "YouTube Video Information Generator" funktioniert derzeit nicht. Überlegen Sie, ob Sie die Antwort bearbeiten möchten.
Giovannipds

74

In YouTube API V3 können wir diese URLs auch zum Abrufen von Miniaturansichten verwenden. Sie werden anhand ihrer Qualität klassifiziert.

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/default.jpg -   default
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg - medium 
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg - high
https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/sddefault.jpg - standard

Und für die maximale Auflösung ..

https://i1.ytimg.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

Ein Vorteil dieser URLs gegenüber den URLs in der ersten Antwort besteht darin, dass diese URLs nicht von Firewalls blockiert werden.


3
Sollen diese Bilder in einem IMG-Tag platziert werden und sollten nur funktionieren, weil ich versuche, den Link mit der richtigen Youtube-Video-ID
einzuschließen

5
@ Lion789 Diese URLs funktionieren einwandfrei, wenn sie in ein img-Tag eingefügt werden. Das Problem ist möglicherweise eine falsche Video-ID oder die angeforderte Auflösung ist möglicherweise nicht verfügbar, aber Sie erhalten den 404 nicht mit diesen Fehlern. Bitte überprüfen Sie die URL des img tag.
Naren

2
Wird bestätigt, dass die URLs nach dem Stoppen von API v2 weiterhin funktionieren?
Daniele B

1
@ DanieleB Diese URLs funktionieren immer noch. Wissen Sie, wie Sie überprüfen können, ob diese URLs nach API v2 funktionieren?
Naren

53

Wenn Sie das größte Bild von YouTube für eine bestimmte Video-ID möchten, sollte die URL ungefähr so ​​lauten:

http://i3.ytimg.com/vi/SomeVideoIDHere/0.jpg

Mithilfe der API können Sie Standard-Miniaturbilder abrufen. Einfacher Code sollte ungefähr so ​​aussehen:

//Grab the default thumbnail image
$attrs = $media->group->thumbnail[1]->attributes();
$thumbnail = $attrs['url'];
$thumbnail = substr($thumbnail, 0, -5);
$thumb1 = $thumbnail."default.jpg";

// Grab the third thumbnail image
$thumb2 = $thumbnail."2.jpg";

// Grab the fourth thumbnail image.
$thumb3 = $thumbnail."3.jpg";

// Using simple cURL to save it your server.
// You can extend the cURL below if you want it as fancy, just like
// the rest of the folks here.

$ch = curl_init ("$thumb1");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata = curl_exec($ch);
curl_close($ch);

// Using fwrite to save the above
$fp = fopen("SomeLocationInReferenceToYourScript/AnyNameYouWant.jpg", 'w');

// Write the file
fwrite($fp, $rawdata);

// And then close it.
fclose($fp);

2
Ich habe ein Beispiel gefunden, in dem 0.jpg eine Auflösung von 480x360 hat, während maxresdefault.jpg 1280x720 hat
Nico Haase

45

Wenn Sie die "schwarzen Balken" entfernen und es wie YouTube tun möchten, können Sie Folgendes verwenden:

https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp

Und wenn Sie die .webpDateierweiterung nicht verwenden können, können Sie dies folgendermaßen tun:

https://i.ytimg.com/vi/<video id>/mqdefault.jpg

Wenn Sie die nicht skalierte Version benötigen, verwenden Sie maxresdefaultstattdessen anstelle von mqdefault.

Hinweis: Ich bin mir über das Seitenverhältnis nicht sicher, ob Sie es verwenden möchten maxresdefault.


2
Dies ist für viele Videos nicht verfügbar. Beispiel: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp
NickG

2
@NickG: Es funktioniert, wenn Sie _webpdie Erweiterung entfernen und in ändern .jpg. Arbeitsbeispiel: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , ich bin mir über das Seitenverhältnis nicht sicher.
LuTz

34

Ich habe eine Funktion erstellt, um nur vorhandene Bilder von YouTube abzurufen

function youtube_image($id) {
    $resolution = array (
        'maxresdefault',
        'sddefault',
        'mqdefault',
        'hqdefault',
        'default'
    );

    for ($x = 0; $x < sizeof($resolution); $x++) {
        $url = '//img.youtube.com/vi/' . $id . '/' . $resolution[$x] . '.jpg';
        if (get_headers($url)[0] == 'HTTP/1.0 200 OK') {
            break;
        }
    }
    return $url;
}

32

In YouTube Data API v3 können Sie die Miniaturansichten von Videos mit der Funktion videos-> list abrufen . Aus snippet.thumbnails. (Schlüssel) können Sie das Standard-Miniaturbild mit mittlerer oder hoher Auflösung auswählen und dessen Breite, Höhe und URL abrufen.

Sie können Thumbnails auch mit den Thumbnails-> set aktualisieren Funktion .

Beispiele finden Sie im YouTube API Samples- Projekt. ( PHP .)


1
Ich denke, dies ist der richtige Weg, da es von einem Google Dev Relations-Mitglied für die YouTube-API kommt
Adonis K. Kakoulidis

31

Sie können die bekommen Video Eintrag , der die URL des Videos Thumbnail enthält. Der Link enthält einen Beispielcode. Wenn Sie XML analysieren möchten, finden Sie hier Informationen . Das zurückgegebene XML enthält ein media:thumbnailElement, das die URL der Miniaturansicht enthält.


2
Ich kann es nicht mit simpleXML herausbringen. Es ist ziemlich schwer!
Aditya MP

25
// Get image form video URL
$url = $video['video_url'];

$urls = parse_url($url);

//Expect the URL to be http://youtu.be/abcd, where abcd is the video ID
if ($urls['host'] == 'youtu.be') :

    $imgPath = ltrim($urls['path'],'/');

//Expect the URL to be http://www.youtube.com/embed/abcd
elseif (strpos($urls['path'],'embed') == 1) :

    $imgPath = end(explode('/',$urls['path']));

//Expect the URL to be abcd only
elseif (strpos($url,'/') === false):

    $imgPath = $url;

//Expect the URL to be http://www.youtube.com/watch?v=abcd
else :

    parse_str($urls['query']);

    $imgPath = $v;

endif;

2
Das ist eine schlechte Lösung! Warum nicht Youtube API v3 verwenden?
mpgn

19

YouTube gehört Google und Google möchte eine angemessene Anzahl von Bildern für unterschiedliche Bildschirmgrößen haben. Daher werden die Bilder in unterschiedlichen Größen gespeichert. Hier ist ein Beispiel dafür, wie Ihr Miniaturbild aussehen wird:

Miniaturbild von geringer Qualität:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/sddefault.jpg

Miniaturbild mittlerer Qualität:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/mqdefault.jpg

Hochwertige Miniaturansicht:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/hqdefault.jpg

Miniaturbild von maximaler Qualität:

http://img.youtube.com/vi/<YouTube_Video_ID_HERE>/maxresdefault.jpg

16

YouTube API Version 3 läuft in 2 Minuten

Wenn Sie nur YouTube durchsuchen und die zugehörigen Eigenschaften abrufen möchten:

  1. Holen Sie sich eine öffentliche API - Dieser Link gibt eine gute Richtung

  2. Verwenden Sie die folgende Abfragezeichenfolge. Die Suchabfrage (bezeichnet mit q = ) in der URL-Zeichenfolge ist beispielsweise ein Stapelüberlauf . YouTube sendet dir dann eine JSON-Antwort zurück, in der du nach Miniaturansichten, Snippets, Autoren usw. suchen kannst.

    https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&maxResults=50&q=stackoverflow&key=YOUR_API_KEY_HERE


16

Eine weitere gute Alternative wäre die Verwendung des oEmbed von YouTube unterstützten API.

Sie fügen einfach Ihre YouTube-URL zur oEmbed-URL hinzu und erhalten einen JSON mit einer Miniaturansicht und dem HTML-Code zum Einbetten.

Beispiel:

http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DxUeJdWYdMmQ

Würde dir geben:

{
  "height":270,
  "width":480,
  "title":"example video for 2020",
  "thumbnail_width":480,
  "html":"...",
  "thumbnail_height":360,
  "version":"1.0",
  "provider_name":"YouTube",
  "author_url":"https:\/\/www.youtube.com\/channel\/UCza6VSQUzCON- AzlsrOLwaA",
  "thumbnail_url":"https:\/\/i.ytimg.com\/vi\/xUeJdWYdMmQ\/hqdefault.jpg",
  "author_name":"Pokics",
  "provider_url":"https:\/\/www.youtube.com\/",
  "type":"video"
}

Weitere Informationen finden Sie in der Dokumentation .


15

Verwenden:

https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100&regionCode=us&key=**Your YouTube ID**

Oben ist der Link. Auf diese Weise können Sie die YouTube-Eigenschaften von Videos ermitteln. Nachdem Sie Merkmale gefunden haben, können Sie Videos der ausgewählten Kategorie abrufen. Danach können Sie ausgewählte Videobilder mit Asaphs Antwort finden .

Wenn Sie den obigen Ansatz ausprobieren, können Sie alles über die YouTube- API analysieren .


14

Ich habe YouTube-Miniaturansichten folgendermaßen verwendet:

$url = 'http://img.youtube.com/vi/' . $youtubeId . '/0.jpg';
$img = dirname(__FILE__) . '/youtubeThumbnail_'  . $youtubeId . '.jpg';
file_put_contents($img, file_get_contents($url));

Denken Sie daran, YouTube verhindert, dass Bilder direkt von ihrem Server aufgenommen werden.



13

Um die angegebenen Lösungen hinzuzufügen / zu erweitern, muss ich beachten, dass man, da ich dieses Problem selbst hatte, tatsächlich mehrere YouTube-Videoinhalte, in diesem Fall Miniaturansichten, mit einer HTTP-Anfrage abrufen kann:

Mit einem Rest-Client, in diesem Fall HTTPFUL, können Sie Folgendes tun:

<?php
header("Content-type", "application/json");

//download the httpfull.phar file from http://phphttpclient.com
include("httpful.phar");

$youtubeVidIds= array("nL-rk4bgJWU", "__kupr7KQos", "UCSynl4WbLQ", "joPjqEGJGqU", "PBwEBjX3D3Q");


$response = \Httpful\Request::get("https://www.googleapis.com/youtube/v3/videos?key=YourAPIKey4&part=snippet&id=".implode (",",$youtubeVidIds)."")

->send();

print ($response);

?>

13

YouTube-Daten-API

YouTube stellt uns die vier generierten Bilder für jedes Video beispielsweise über die Daten-API (v3) zur Verfügung.

  1. https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg

  2. https://i.ytimg.com/vi/V_zwalcR8DU/sddefault.jpg

  3. https://i.ytimg.com/vi/V_zwalcR8DU/hqdefault.jpg

  4. https://i.ytimg.com/vi/V_zwalcR8DU/mqdefault.jpg

Zugriff auf die Bilder über die API erhalten

  1. Holen Sie sich zuerst Ihren öffentlichen API-Schlüssel in der Google API Console .
  2. Gemäß der Miniaturansicht von YouTube in der API-Dokumentation müssen Sie auf die Ressourcen auf snippet.thumbnails zugreifen.
  3. Aus diesem Grund müssen Sie Ihre URL folgendermaßen formulieren:

    www.googleapis.com/youtube/v3/videos?part=snippet&id=`yourVideoId`&key=`yourApiKey`

Ändern Sie nun Ihre Video-ID und Ihren API-Schlüssel in Ihre jeweilige Video-ID und Ihren API-Schlüssel. Die Antwort ist eine JSON-Ausgabe, die Ihnen die vier Links in den Miniaturansichten der Snippet-Variablen enthält (sofern alle verfügbar sind).


13

Sie können die Video-ID mithilfe von parse_url , parse_str von der YouTube-Video-URL abrufen und dann in die Vorhersage-URLs für Bilder einfügen. Vielen Dank an YouTube für die prädiktiven URLs

$videoUrl = "https://www.youtube.com/watch?v=8zy7wGbQgfw";
parse_str( parse_url( $videoUrl, PHP_URL_QUERY ), $my_array_of_vars );
$ytID = $my_array_of_vars['v']; //gets video ID

print "https://img.youtube.com/vi/$ytID/maxresdefault.jpg";
print "https://img.youtube.com/vi/$ytID/mqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/hqdefault.jpg";
print "https://img.youtube.com/vi/$ytID/sddefault.jpg";
print "https://img.youtube.com/vi/$ytID/default.jpg";

Mit diesem Tool können Sie YouTube-Miniaturansichten erstellen

https://tools.tutsplanet.com/index.php/get-youtube-video-thumbnails


11

Eine einfache PHP-Funktion, die ich für das YouTube-Miniaturbild erstellt habe, und die Typen sind

  • Standard
  • hqdefault
  • mqdefault
  • sddefault
  • maxresdefault

 

function get_youtube_thumb($link,$type){

    $video_id = explode("?v=", $link);

    if (empty($video_id[1])){
        $video_id = explode("/v/", $link);
        $video_id = explode("&", $video_id[1]);
        $video_id = $video_id[0];
    }
    $thumb_link = "";

    if($type == 'default'   || $type == 'hqdefault' ||
       $type == 'mqdefault' || $type == 'sddefault' ||
       $type == 'maxresdefault'){

        $thumb_link = 'http://img.youtube.com/vi/'.$video_id.'/'.$type.'.jpg';

    }elseif($type == "id"){
        $thumb_link = $video_id;
    }
    return $thumb_link;}

10

Wenn Sie die öffentliche API verwenden, verwenden Sie am besten ifAnweisungen.

Wenn das Video öffentlich oder nicht aufgeführt ist, legen Sie die Miniaturansicht mithilfe der URL-Methode fest. Wenn das Video privat ist, verwenden Sie die API, um die Miniaturansicht abzurufen.

<?php
    if($video_status == 'unlisted'){
        $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
        $video_status = '<i class="fa fa-lock"></i>&nbsp;Unlisted';
    }
    elseif($video_status == 'public'){
        $video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
        $video_status = '<i class="fa fa-eye"></i>&nbsp;Public';
    }
    elseif($video_status == 'private'){
        $video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url'];
        $video_status = '<i class="fa fa-lock"></i>&nbsp;Private';
    }

8

Ich denke, es gibt viele Antworten auf Miniaturansichten, aber ich möchte einige andere URLs hinzufügen, um YouTube-Miniaturansichten sehr einfach zu erhalten. Ich nehme nur einen Text aus Asaphs Antwort. Hier sind einige URLs, um YouTube-Miniaturansichten zu erhalten:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/default.jpg

Verwenden Sie für die hochwertige Version der Miniaturansicht eine ähnliche URL:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

Es gibt auch eine Version des Miniaturbilds mittlerer Qualität, die eine URL verwendet, die der hohen Qualität ähnelt:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

Verwenden Sie für die Standarddefinitionsversion der Miniaturansicht eine ähnliche URL:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

Verwenden Sie für die Version des Miniaturbilds mit maximaler Auflösung eine ähnliche URL:

https://ytimg.googleusercontent.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

6
    function get_video_thumbnail( $src ) {
            $url_pieces = explode('/', $src);
            if( $url_pieces[2] == 'dai.ly'){
                $id = $url_pieces[3];
                $hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE);
                $thumbnail = $hash['thumbnail_large_url'];
            }else if($url_pieces[2] == 'www.dailymotion.com'){
                $id = $url_pieces[4];
                $hash = json_decode(file_get_contents('https://api.dailymotion.com/video/'.$id.'?fields=thumbnail_large_url'), TRUE);
                $thumbnail = $hash['thumbnail_large_url'];
            }else if ( $url_pieces[2] == 'vimeo.com' ) { // If Vimeo
                $id = $url_pieces[3];
                $hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php'));
                $thumbnail = $hash[0]['thumbnail_large'];
            } elseif ( $url_pieces[2] == 'youtu.be' ) { // If Youtube
                $extract_id = explode('?', $url_pieces[3]);
                $id = $extract_id[0];
                $thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg';
            }else if ( $url_pieces[2] == 'player.vimeo.com' ) { // If Vimeo
                $id = $url_pieces[4];
                $hash = unserialize(file_get_contents('http://vimeo.com/api/v2/video/' . $id . '.php'));
                $thumbnail = $hash[0]['thumbnail_large'];
            } elseif ( $url_pieces[2] == 'www.youtube.com' ) { // If Youtube
                $extract_id = explode('=', $url_pieces[3]);
                $id = $extract_id[1];
                $thumbnail = 'http://img.youtube.com/vi/' . $id . '/mqdefault.jpg';
            } else{
                $thumbnail = tim_thumb_default_image('video-icon.png', null, 147, 252);
            }
            return $thumbnail;
        }

get_video_thumbnail('https://vimeo.com/154618727');
get_video_thumbnail('https://www.youtube.com/watch?v=SwU0I7_5Cmc');
get_video_thumbnail('https://youtu.be/pbzIfnekjtM');
get_video_thumbnail('http://www.dailymotion.com/video/x5thjyz');

5

Hier ist die beste Antwort, die für den manuellen Gebrauch optimiert wurde. Das Video-ID-Token ohne Trennzeichen ermöglicht die Auswahl mit einem Doppelklick.

Jedes YouTube-Video enthält vier generierte Bilder. Sie sind vorhersehbar wie folgt formatiert:

https://img.youtube.com/vi/YOUTUBEVIDEOID/0.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/1.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/2.jpg
https://img.youtube.com/vi/YOUTUBEVIDEOID/3.jpg

Das erste Bild in der Liste ist ein Bild in voller Größe, andere sind Miniaturbilder. (. Also eines der Standard - Miniaturbild 1.jpg, 2.jpg, 3.jpg) ist:

https://img.youtube.com/vi/YOUTUBEVIDEOID/default.jpg

Verwenden Sie für die hochwertige Version der Miniaturansicht eine ähnliche URL:

https://img.youtube.com/vi/YOUTUBEVIDEOID/hqdefault.jpg

Es gibt auch eine Version der Miniaturansicht mittlerer Qualität, die eine URL ähnlich dem HQ verwendet:

https://img.youtube.com/vi/YOUTUBEVIDEOID/mqdefault.jpg

Verwenden Sie für die Standarddefinitionsversion der Miniaturansicht eine ähnliche URL:

https://img.youtube.com/vi/YOUTUBEVIDEOID/sddefault.jpg

Verwenden Sie für die Version des Miniaturbilds mit maximaler Auflösung eine ähnliche URL:

https://img.youtube.com/vi/YOUTUBEVIDEOID/maxresdefault.jpg

Alle oben genannten URLs sind auch über HTTP verfügbar. Zusätzlich i3.ytimg.comfunktioniert der etwas kürzere Hostname anstelle der img.youtube.comobigen Beispiel-URLs.

Alternativ können Sie die YouTube-Daten-API (Version 3) verwenden , um Miniaturbilder abzurufen.


4

Methode 1:

Sie finden alle Informationen für ein YouTube-Video mit einer JSON-Seite, die sogar "thumbnail_url" enthält. Http://www.youtube.com/oembed?format=json&url= {Ihre Video-URL finden Sie hier}

Wie endgültige URL aussehen + PHP-Testcode

$data = file_get_contents("https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=_7s-6V_0nwA");
$json = json_decode($data);
var_dump($json);

Ausgabe

object(stdClass)[1]
  public 'width' => int 480
  public 'version' => string '1.0' (length=3)
  public 'thumbnail_width' => int 480
  public 'title' => string 'how to reminder in window as display message' (length=44)
  public 'provider_url' => string 'https://www.youtube.com/' (length=24)
  public 'thumbnail_url' => string 'https://i.ytimg.com/vi/_7s-6V_0nwA/hqdefault.jpg' (length=48)
  public 'author_name' => string 'H2 ZONE' (length=7)
  public 'type' => string 'video' (length=5)
  public 'author_url' => string 'https://www.youtube.com/channel/UC9M35YwDs8_PCWXd3qkiNzg' (length=56)
  public 'provider_name' => string 'YouTube' (length=7)
  public 'height' => int 270
  public 'html' => string '<iframe width="480" height="270" src="https://www.youtube.com/embed/_7s-6V_0nwA?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>' (length=171)
  public 'thumbnail_height' => int 360

Weitere Informationen finden Sie auch unter So erhalten Sie eine Miniaturansicht eines YouTube-Videos mithilfe der ID oder des https://www.youtube.com/watch?v=mXde7q59BI8 Video-Tutorials 1

Methode 2:

Über den YouTube-Bildlink https://img.youtube.com/vi/ "insert-youtube-video-id-here" /default.jpg

Methode 3:

Verwenden des Browser-Quellcodes zum Abrufen von Miniaturansichten mithilfe des Video-URL-Links - Gehen Sie zum Video-Quellcode und suchen Sie nach Miniaturansichten. Jetzt können Sie diese URL in Ihren Quellcode verwenden:

{img src="https://img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg"}

Weitere Informationen finden Sie auch unter So erhalten Sie eine Miniaturansicht eines YouTube-Videos mithilfe der ID oder des https://www.youtube.com/watch?v=9f6E8MeM6PI Video-Tutorials 2


Links https://www.youtube.com/watch?v=mXde7q59BI8und https://www.youtube.com/watch?v=9f6E8MeM6PIsind (effektiv) kaputt.
Peter Mortensen

youtube hat dieses Video wegen seiner Richtlinien gesperrt. Ich hoffe, dieser Artikel wird Ihnen helfen. www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/
Hassan Saeed

3

Verwenden img.youtube.com/vi/YouTubeID/ImageFormat.jpg

Hier unterscheiden sich die Bildformate wie Standard, hqdefault, maxresdefault.


2

Dies ist meine clientseitige Lösung, für die kein API-Schlüssel erforderlich ist.

YouTube.parse('https://www.youtube.com/watch?v=P3DGwyl0mJQ').then(_ => console.log(_))

Der Code:

import { parseURL, parseQueryString } from './url'
import { getImageSize } from './image'

const PICTURE_SIZE_NAMES = [
    // 1280 x 720.
    // HD aspect ratio.
    'maxresdefault',
    // 629 x 472.
    // non-HD aspect ratio.
    'sddefault',
    // For really old videos not having `maxresdefault`/`sddefault`.
    'hqdefault'
]

// - Supported YouTube URL formats:
//   - http://www.youtube.com/watch?v=My2FRPA3Gf8
//   - http://youtu.be/My2FRPA3Gf8
export default
{
    parse: async function(url)
    {
        // Get video ID.
        let id
        const location = parseURL(url)
        if (location.hostname === 'www.youtube.com') {
            if (location.search) {
                const query = parseQueryString(location.search.slice('/'.length))
                id = query.v
            }
        } else if (location.hostname === 'youtu.be') {
            id = location.pathname.slice('/'.length)
        }

        if (id) {
            return {
                source: {
                    provider: 'YouTube',
                    id
                },
                picture: await this.getPicture(id)
            }
        }
    },

    getPicture: async (id) => {
        for (const sizeName of PICTURE_SIZE_NAMES) {
            try {
                const url = getPictureSizeURL(id, sizeName)
                return {
                    type: 'image/jpeg',
                    sizes: [{
                        url,
                        ...(await getImageSize(url))
                    }]
                }
            } catch (error) {
                console.error(error)
            }
        }
        throw new Error(`No picture found for YouTube video ${id}`)
    },

    getEmbeddedVideoURL(id, options = {}) {
        return `https://www.youtube.com/embed/${id}`
    }
}

const getPictureSizeURL = (id, sizeName) => `https://img.youtube.com/vi/${id}/${sizeName}.jpg`

Dienstprogramm image.js:

// Gets image size.
// Returns a `Promise`.
function getImageSize(url)
{
    return new Promise((resolve, reject) =>
    {
        const image = new Image()
        image.onload = () => resolve({ width: image.width, height: image.height })
        image.onerror = reject
        image.src = url
    })
}

Dienstprogramm url.js:

// Only on client side.
export function parseURL(url)
{
    const link = document.createElement('a')
    link.href = url
    return link
}

export function parseQueryString(queryString)
{
    return queryString.split('&').reduce((query, part) =>
    {
        const [key, value] = part.split('=')
        query[decodeURIComponent(key)] = decodeURIComponent(value)
        return query
    },
    {})
}

1

Hier ist eine einfache Funktion, die ich zum Abrufen der Miniaturansichten erstellt habe. Es ist leicht zu verstehen und zu verwenden.

$ link ist der YouTube-Link, der genau so kopiert wird, wie er im Browser ist, z. B. https://www.youtube.com/watch?v=BQ0mxQXmLsk

function get_youtube_thumb($link){
    $new = str_replace('https://www.youtube.com/watch?v=', '', $link);
    $thumbnail = 'https://img.youtube.com/vi/' . $new . '/0.jpg';
    return $thumbnail;
}

Dies funktioniert nur, wenn die URL keine anderen Abfrageparameter enthält.
Ma Kobi

Ja, alle YouTube-Videos folgen beim Anschauen dem Format. Sie können den Link aus dem Browser
kopieren

Was ist, wenn Sie einen anderen Parameter wie haben &t=227s?
Ma Kobi

1
Ich verstehe Ihren Standpunkt, aber die Standard-YouTube-Videos kommen ohne andere Parameter, aber wenn es nötig ist, können Sie den Link vor der ersten Zeile der Funktion filtern. Benötigen Sie Hilfe beim Filtern des Links, um sicherzustellen, dass alle anderen Elemente außer den erforderlichen ignoriert werden?
Sodruldeen Mustapha

1

Speichern Sie diesen Code in einer leeren .php-Datei und testen Sie ihn.

<img src="<?php echo youtube_img_src('9bZkp7q19f0', 'high');?>" />
<?php
// Get a YOUTUBE video thumb image's source url for IMG tag "src" attribute:
// $ID = YouYube video ID (string)
// $size = string (default, medium, high or standard)
function youtube_img_src ($ID = null, $size = 'default') {
    switch ($size) {
        case 'medium':
            $size = 'mqdefault';
            break;
        case 'high':
            $size = 'hqdefault';
            break;
        case 'standard':
            $size = 'sddefault';
            break;
        default:
            $size = 'default';
            break;
    }
    if ($ID) {
        return sprintf('https://img.youtube.com/vi/%s/%s.jpg', $ID, $size);
    }
    return 'https://img.youtube.com/vi/ERROR/1.jpg';
}

Vielen Dank.


-2
public const string tubeThumb = "http://i.ytimg.com/vi/[id]/hqdefault.jpg";
vid.Thumbnail = tubeThumb.Replace("[id]", vid.VideoID);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.