Come posso ottenere una miniatura del video di YouTube dall'API di YouTube?


2400

Se ho un URL di video di YouTube, c'è un modo per usare PHP e cURL per ottenere la miniatura associata dall'API di YouTube?


Ecco alcune funzioni PHP che ho creato per ottenere la migliore anteprima disponibile dal metodo URL senza eseguire il ping dell'API, sulla base delle molte buone risposte in questa pagina: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5
squarecandy

Risposte:


4614

Ogni video di YouTube ha quattro immagini generate. Sono prevedibilmente formattati come segue:

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

Il primo nell'elenco è un'immagine a dimensione intera e altri sono miniature. L'immagine predefinita miniatura (vale a dire, uno dei 1.jpg, 2.jpg, 3.jpg) è:

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

Per la versione di alta qualità della miniatura utilizzare un URL simile a questo:

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

Esiste anche una versione di qualità media della miniatura, che utilizza un URL simile al quartier generale:

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

Per la versione di definizione standard della miniatura, utilizzare un URL simile al seguente:

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

Per la versione di massima risoluzione della miniatura utilizzare un URL simile a questo:

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

Tutti gli URL di cui sopra sono disponibili anche su HTTP. Inoltre, il nome host leggermente più corto i3.ytimg.comfunziona al posto degli img.youtube.comURL di esempio sopra.

In alternativa, puoi utilizzare l' API di dati di YouTube (v3) per ottenere immagini in miniatura.


27
Nel caso in cui qualcun altro commetta questo stupido errore - non puoi usarlo http://www.img.youtube.com, solohttp://img.youtube.com
Ciaran Phillips,

36
@NickG ha mqdefault16: 9
tomtastico,

57
è documentato ufficialmente da qualche parte?
bjunix,

14
Le anteprime con risoluzione più elevata non sono garantite.
Salman A

63
@ clami219 anche questo è falso - evidentemente funziona (2015-04): i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp , la verità: sddefaulte maxresdefaultNON SONO SEMPRE DISPONIBILI alcuni video li hanno però ...
jave.web

398

Puoi utilizzare l' API di dati di YouTube per recuperare miniature di video, didascalia, descrizione, valutazione, statistiche e altro. La versione 3 dell'API richiede una chiave *. Ottieni la chiave e crea un video: richiesta elenco :

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

Esempio di codice PHP

$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);

Produzione

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)
  }
}

* Non solo hai bisogno di una chiave, ti potrebbero essere richiesti i dati di fatturazione in base al numero di richieste API che intendi effettuare. Tuttavia, pochi milioni di richieste al giorno sono gratuite.

Articolo di origine .


6
Cordiali saluti: non ho modificato il codice per adattarlo alla nuova struttura JSON. Il codice in getJSON è sbagliato. Hai usato jsoncinvece di jsongetJSON. Sta fallendo a causa della tua struttura JSON sbagliata.
mauris,

5
Solo il primo esempio può usare jsonc. Gli esempi jQuery e PHP DEVONO usare json. E ho aggiornato il codice per adeguarmi alla nuova struttura JSON. Sto usando il codice adesso e funziona LIVE. quindi non dire che non funziona senza leggere le modifiche. Grazie!
mauris,

7
Gli esempi jQuery e PHP DEVONO usare json ... puoi fornire un riferimento? Inoltre, la richiesta di uno specifico numero di versione dell'API ( v=2) si occupa delle modifiche all'API.
Salman A

4
La chiamata gdata non restituisce se maxresdefault.jpg è disponibile per i video in cui è disponibile, solo mq / hq / sd.
Aaron,

2
L'API v3 è MOLTO mal documentata. Ti danno un codice di esempio ma la sezione "riferimento" è molto breve nei dettagli. Alcune cose che dovrebbero essere relativamente "ovvie" sembrano richiedere soluzioni estreme.
CashCow,

256

Ciò che Asaf ha detto è giusto. Tuttavia, non tutti i video di YouTube contengono tutte e nove le miniature. Inoltre, le dimensioni dell'immagine delle miniature dipendono dal video (i numeri seguenti sono basati su uno).

Esistono sette anteprime garantite:

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

Inoltre, le altre due anteprime potrebbero esistere o meno. La loro presenza si basa probabilmente sul fatto che il video sia di alta qualità.

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

Puoi trovare script JavaScript e PHP per recuperare miniature e altre informazioni di YouTube in:

Puoi anche utilizzare lo strumento Generatore di informazioni video di YouTube per ottenere tutte le informazioni su un video di YouTube inviando un URL o un ID video.


5
Puoi anche ottenere lo stesso risultato con il link YouTube ufficiale img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg dove mJ8tq8AnNis è un ID video
Ragaisis,

4
A volte alcuni non esistono - i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg è falso sebbene i1.ytimg.com/vi/r5R8gSgedh4/0.jpg sia ok per esempio.
NoBugs,

Grazie per aver pubblicato questo Hai una fonte per questi dati? È corretto, ma vorrei un link a qualcosa da Youtube / Google su questo e non riesco a trovarne uno.
Jonathan Vanasco,

@JonathanVanasco, scusa. Se intendi una risorsa ufficiale per contenuti esatti, non ne conosco nessuno. E non penso che ci sia uno scopo di pubblicare qualcosa del genere dal loro punto di vista.
AGMG,

4
Lo strumento "Generatore di informazioni video di YouTube" al momento non funziona. Valuta di modificare la risposta.
giovannipds,

74

In YouTube API V3 possiamo anche usare questi URL per ottenere miniature ... Sono classificati in base alla loro qualità.

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

E per la massima risoluzione ..

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

Un vantaggio di questi URL rispetto agli URL nella prima risposta è che questi URL non vengono bloccati dai firewall.


3
Queste immagini suppongono di essere inserite in un tag img e dovrebbero funzionare solo perché sto cercando di includere il collegamento con l'ID video di YouTube giusto e inserirle nel tag img ma continuo a ottenere un 404
Lion789

5
@ Lion789 Questi URL funzionano correttamente quando vengono inseriti in un tag img .. Il problema potrebbe essere un ID video errato o la risoluzione richiesta potrebbe non essere disponibile ma non otterrai il 404 con questi errori. Controlla l'URL del tag img.
Naren,

2
È confermato che gli URL continueranno a funzionare dopo l'arresto dell'API v2?
Daniele B,

1
@DanieleB Questi URL funzionano ancora. Sai come verificare se questi URL funzioneranno dopo l'API v2?
Naren,

53

Se desideri l'immagine più grande da YouTube per un ID video specifico, l'URL dovrebbe essere simile a questo:

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

Utilizzando l'API, puoi selezionare l'immagine di anteprima predefinita. Il codice semplice dovrebbe essere qualcosa del genere:

//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
Ho trovato un esempio in cui 0.jpg ha una risoluzione di 480x360, mentre maxresdefault.jpg ha 1280x720
Nico Haase,

45

Se vuoi sbarazzarti delle "barre nere" e farlo come fa YouTube, puoi usare:

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

E se non puoi usare l' .webpestensione del file puoi farlo in questo modo:

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

Inoltre, se hai bisogno della versione non scalata, usa maxresdefaultinvece di mqdefault.

Nota: non sono sicuro delle proporzioni se si prevede di utilizzare maxresdefault.


2
Questo non è disponibile per molti video. Ad esempio: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp
NickG

2
@NickG: funziona se si rimuove _webpe si modifica l'estensione in .jpg. Esempio funzionante: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , non sono sicuro delle proporzioni.
LuTz,

34

Ho creato una funzione per recuperare solo immagini esistenti da YouTube

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 , puoi ottenere le miniature dei video con la funzione elenco video-> . Da snippet.thumbnails. (Chiave) , puoi scegliere la miniatura predefinita, media o alta risoluzione e ottenere larghezza, altezza e URL.

Puoi anche aggiornare le anteprime con le anteprime-> imposta funzionalità.

Ad esempio, puoi consultare il progetto Esempi API di YouTube . ( PHP .)


1
Immagino che questo sia il modo giusto di farlo poiché proviene da un membro delle relazioni di Google Dev per l'API di YouTube
Adonis K. Kakoulidis,

31

È possibile ottenere la voce video che contiene l'URL della miniatura del video. C'è un esempio di codice nel link. Oppure, se vuoi analizzare XML, ci sono informazioni qui . L'XML restituito ha un media:thumbnailelemento, che contiene l'URL della miniatura.


2
Non riesco a tirarlo fuori usando simpleXML. È abbastanza difficile!
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
questa è una pessima soluzione! perché non usare Youtube api v3?
mpgn,

19

YouTube è di proprietà di Google e a Google piace avere un numero ragionevole di immagini per schermi di dimensioni diverse, quindi le sue immagini sono memorizzate in dimensioni diverse. Ecco un esempio di come sarà la tua miniatura:

Miniatura di bassa qualità:

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

Miniatura di media qualità:

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

Miniatura di alta qualità:

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

Miniatura di massima qualità:

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

16

API YouTube versione 3 attiva e funzionante in 2 minuti

Se tutto ciò che vuoi fare è cercare su YouTube e ottenere proprietà associate:

  1. Ottieni un'API pubblica : questo link fornisce una buona direzione

  2. Usa sotto la stringa di query. La query di ricerca (indicata con q = ) nella stringa URL è stackoverflow a scopo di esempio. YouTube ti invierà quindi una risposta JSON dove potrai quindi analizzare Miniatura, Snippet, Autore, ecc.

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


16

Un'altra buona alternativa sarebbe quella di utilizzare l' API oEmbed che è supportata da YouTube.

Devi semplicemente aggiungere il tuo URL di YouTube all'URL oEmbed e riceverai un JSON che include una miniatura e il codice HTML per l'incorporamento.

Esempio:

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

Ti darebbe:

{
  "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"
}

Leggi la documentazione per ulteriori informazioni .


15

Uso:

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

Sopra è il link. Usando quello, puoi trovare le caratteristiche di YouTube dei video. Dopo aver trovato le caratteristiche, puoi ottenere video della categoria selezionata. Successivamente puoi trovare le immagini video selezionate usando la risposta di Asaph .

Prova l'approccio sopra e puoi analizzare tutto dall'API di YouTube .


14

Ho usato le miniature di YouTube in questo modo:

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

Ricorda che YouTube impedisce di includere immagini direttamente dal loro server.



13

Solo per aggiungere / espandere le soluzioni fornite, ritengo sia necessario notare che, dato che ho riscontrato questo problema, si possono effettivamente prendere più contenuti video di YouTube, in questo caso, miniature, con una richiesta HTTP:

Utilizzando un client di riposo, in questo caso HTTPFUL, puoi fare qualcosa del genere:

<?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

API dati YouTube

YouTube ci fornisce le quattro immagini generate per ogni video tramite l'API dati (v3), ad esempio,

  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

Accesso alle immagini tramite l'API

  1. Per prima cosa ottieni la tua chiave API pubblica su Google API Console .
  2. Secondo il riferimento in miniatura di YouTube nella documentazione dell'API , devi accedere alle risorse su snippet.thumbnails.
  3. In questo modo, devi pronunciare il tuo URL in questo modo -

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

Ora cambia il tuo ID video e la tua chiave API con i rispettivi ID video e api-key e la sua risposta sarà un output JSON che ti fornirà i quattro collegamenti nelle anteprime della variabile snippet (se tutti sono disponibili).


13

È possibile ottenere l'ID video dall'URL del video di YouTube utilizzando parse_url , parse_str e quindi inserire l'URL predittivo per le immagini. Grazie a YouTube per gli URL predittivi

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

Puoi utilizzare questo strumento per generare miniature di YouTube

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


11

Una semplice funzione PHP che ho creato per la miniatura di YouTube e i tipi sono

  • predefinito
  • 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

Se stai usando l'API pubblica, il modo migliore per farlo è usare le ifdichiarazioni.

Se il video è pubblico o non in elenco, imposta la miniatura utilizzando il metodo URL. Se il video è privato, utilizzare l'API per ottenere l'anteprima.

<?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

Penso che siano molte risposte per le miniature, ma voglio aggiungere altri URL per ottenere le miniature di YouTube molto facilmente. Sto solo prendendo un po 'di testo dalla risposta di Asaph. Ecco alcuni URL per ottenere le miniature di YouTube:

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

Per la versione di alta qualità della miniatura utilizzare un URL simile a questo:

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

Esiste anche una versione di qualità media della miniatura, che utilizza un URL simile all'alta qualità:

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

Per la versione di definizione standard della miniatura, utilizzare un URL simile al seguente:

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

Per la versione di massima risoluzione della miniatura utilizzare un URL simile a questo:

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

Ecco la risposta migliore ottimizzata per l'uso manuale. Il token ID video senza separatori consente la selezione con un doppio clic.

Ogni video di YouTube ha quattro immagini generate. Sono prevedibilmente formattati come segue:

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

Il primo nell'elenco è un'immagine a dimensione intera e altri sono miniature. (. Vale a dire una delle immagini di default delle miniature 1.jpg, 2.jpg, 3.jpg) è:

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

Per la versione di alta qualità della miniatura utilizzare un URL simile a questo:

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

Esiste anche una versione di qualità media della miniatura, che utilizza un URL simile al quartier generale:

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

Per la versione di definizione standard della miniatura, utilizzare un URL simile al seguente:

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

Per la versione di massima risoluzione della miniatura utilizzare un URL simile a questo:

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

Tutti gli URL di cui sopra sono disponibili anche su HTTP. Inoltre, il nome host leggermente più corto i3.ytimg.comfunziona al posto diimg.youtube.comURL di esempio sopra.

In alternativa, puoi utilizzare l' API di dati di YouTube (v3) per ottenere immagini in miniatura.


4

Metodo 1:

Puoi trovare tutte le informazioni per un video di YouTube con una pagina JSON con persino "thumbnail_url", http://www.youtube.com/oembed?format=json&url= {l'URL del tuo video va qui}

Come l'aspetto dell'URL finale + codice di test PHP

$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);

Produzione

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

Per i dettagli, puoi anche vedere Come ottenere una miniatura del video di YouTube usando id o https://www.youtube.com/watch?v=mXde7q59BI8 video tutorial 1

Metodo 2:

Utilizzando il link immagine di YouTube, https://img.youtube.com/vi/ "insert-youtube-video-id-here" /default.jpg

Metodo 3:

Utilizzo del codice sorgente del browser per ottenere l'anteprima tramite il collegamento URL video -go al codice sorgente video e cercare l'anteprima. Ora puoi usare questo URL nel tuo codice sorgente:

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

Per i dettagli puoi anche vedere Come ottenere una miniatura del video di YouTube usando id o https://www.youtube.com/watch?v=9f6E8MeM6PI video tutorial 2


I collegamenti https://www.youtube.com/watch?v=mXde7q59BI8e https://www.youtube.com/watch?v=9f6E8MeM6PIsono (effettivamente) interrotti.
Peter Mortensen,

youtube ha vietato questo video a causa delle sue politiche, spero che questo articolo ti possa aiutare www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/
Hassan Saeed

3

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

Qui i formati delle immagini sono diversi come default, hqdefault, maxresdefault.


2

Questa è la mia soluzione no-API-key-only lato client richiesta.

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

Il codice:

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`

Utilità 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
    })
}

Utilità 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

Ecco una semplice funzione che ho creato per ottenere le anteprime. È facile da capire e usare.

$ link è il link di YouTube copiato esattamente come nel browser, ad esempio 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;
}

Funziona solo quando l'URL non ha altri parametri di query.
Ma Kobi,

sì, tutti i video di YouTube seguono il formato durante la visione, puoi copiare il link dal browser
Sodruldeen Mustapha,

E se hai un altro parametro simile &t=227s?
Ma Kobi,

1
capisco il tuo punto, ma i video standard di YouTube arrivano senza altri parametri ma quando se ne presenta la necessità, puoi filtrare il link prima della prima riga della funzione. Hai bisogno di aiuto per filtrare il link per assicurarti che ignori ogni altra cosa tranne quella necessaria?
Sodruldeen Mustapha,

1

Salvare questo codice in un file .php vuoto e testarlo.

<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';
}

Grazie.


-2
public const string tubeThumb = "http://i.ytimg.com/vi/[id]/hqdefault.jpg";
vid.Thumbnail = tubeThumb.Replace("[id]", vid.VideoID);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.