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?
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?
Risposte:
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.com
funziona al posto degli img.youtube.com
URL di esempio sopra.
In alternativa, puoi utilizzare l' API di dati di YouTube (v3) per ottenere immagini in miniatura.
http://www.img.youtube.com
, solohttp://img.youtube.com
mqdefault
16: 9
sddefault
e maxresdefault
NON SONO SEMPRE DISPONIBILI alcuni video li hanno però ...
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.
jsonc
invece di json
getJSON. Sta fallendo a causa della tua struttura JSON sbagliata.
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!
v=2
) si occupa delle modifiche all'API.
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.
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.
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);
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' .webp
estensione 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 maxresdefault
invece di mqdefault
.
Nota: non sono sicuro delle proporzioni se si prevede di utilizzare maxresdefault
.
_webp
e si modifica l'estensione in .jpg
. Esempio funzionante: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , non sono sicuro delle proporzioni.
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;
}
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 .)
È 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:thumbnail
elemento, che contiene l'URL della miniatura.
// 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;
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
Se tutto ciò che vuoi fare è cercare su YouTube e ottenere proprietà associate:
Ottieni un'API pubblica : questo link fornisce una buona direzione
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.
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 .
Uso:
https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100®ionCode=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 .
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.
Ho trovato questo elegante strumento che ti consente di creare l'immagine con il pulsante di riproduzione di YouTube posizionato sopra l'immagine:
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);
?>
YouTube ci fornisce le quattro immagini generate per ogni video tramite l'API dati (v3), ad esempio,
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).
È 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
Una semplice funzione PHP che ho creato per la miniatura di YouTube e i tipi sono
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;}
Se stai usando l'API pubblica, il modo migliore per farlo è usare le if
dichiarazioni.
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> Unlisted';
}
elseif($video_status == 'public'){
$video_thumbnail = 'http://img.youtube.com/vi/'.$video_url.'/mqdefault.jpg';
$video_status = '<i class="fa fa-eye"></i> Public';
}
elseif($video_status == 'private'){
$video_thumbnail = $playlistItem['snippet']['thumbnails']['maxres']['url'];
$video_status = '<i class="fa fa-lock"></i> Private';
}
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
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');
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.com
funziona al posto diimg.youtube.com
URL di esempio sopra.
In alternativa, puoi utilizzare l' API di dati di YouTube (v3) per ottenere immagini in miniatura.
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);
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
https://www.youtube.com/watch?v=mXde7q59BI8
e https://www.youtube.com/watch?v=9f6E8MeM6PI
sono (effettivamente) interrotti.
Uso img.youtube.com/vi/YouTubeID/ImageFormat.jpg
Qui i formati delle immagini sono diversi come default, hqdefault, maxresdefault.
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
},
{})
}
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;
}
&t=227s
?
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.
public const string tubeThumb = "http://i.ytimg.com/vi/[id]/hqdefault.jpg";
vid.Thumbnail = tubeThumb.Replace("[id]", vid.VideoID);