Pytanie Jak uzyskać miniaturkę filmu YouTube z interfejsu API YouTube?


Jeśli mam adres URL filmu w YouTube, czy jest jakiś sposób na użycie PHP i cURL, aby uzyskać powiązaną miniaturę z interfejsu API YouTube?


2025
2018-01-14 23:34


pochodzenie


Oto kilka funkcji PHP, które stworzyłem, aby uzyskać najlepszą dostępną miniaturkę z metody adresu URL bez pingowania interfejsu API, na podstawie wielu dobrych odpowiedzi na tej stronie: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5 - squarecandy


Odpowiedzi:


Każdy film z YouTube ma 4 wygenerowane obrazy. Są one przewidywalnie sformatowane w następujący sposób:

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

Pierwszy na liście to obraz w pełnym rozmiarze, a inne to miniatury. Domyślny obraz miniatury (np 1.jpg, 2.jpg, 3.jpg) jest:

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

W przypadku wysokiej jakości wersji miniatury używaj adresu URL podobnego do tego:

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

Istnieje również wersja miniatury o średniej jakości, używająca adresu URL podobnego do HQ:

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

W przypadku wersji standardowej miniatury użyj adresu URL podobnego do tego:

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

Aby uzyskać maksymalną rozdzielczość miniatury, użyj adresu URL podobnego do tego:

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

Wszystkie powyższe adresy URL są również dostępne przez http. Dodatkowo, nieco krótsza nazwa hosta i3.ytimg.com działa w miejsce img.youtube.com w przykładowych adresach URL powyżej.

Alternatywnie możesz użyć Interfejs API danych YouTube (wersja 3) , aby uzyskać miniaturki.


3883
2018-01-14 23:40



Jak uzyskać obraz o wysokiej rozdzielczości (jeśli taki występuje)? - trusktr
Na wszelki wypadek, jeśli ktoś inny popełni ten głupi błąd - nie możesz go użyć http://www.img.youtube.com, tylko http://img.youtube.com - Ciaran Phillips
@NickG mqdefault jest 16: 9 - tomtastico
czy to jest gdzieś oficjalnie udokumentowane? - bjunix
@ clami219 też jest fałszywe - ewidentnie działa (2015-04): i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp, prawda: sddefault i maxresdefault ZAWSZE NIE SĄ ODPOWIEDNIE niektóre filmy mają je jednak .... - jave.web


Możesz użyć Interfejs API danych YouTube aby pobrać miniatury filmów, podpisy, opisy, oceny, statystyki i inne. Wersja API 3 wymaga klucza *. Zdobądź klucz i stwórz a filmy: lista żądanie:

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

Przykładowy kod 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);

Wydajność

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

* Nie tylko, że potrzebujesz klucza, możesz zostać poproszony o podanie informacji rozliczeniowych w zależności od liczby żądań API, które planujesz. Jednak kilka milionów zgłoszeń dziennie jest bezpłatne.

Artykuł źródłowy.


358
2018-01-21 09:58



FYI: nie zmieniłem kodu, aby pasował do nowej struktury JSON. Kod w getJSON jest błędny. Używałeś jsonc zamiast json dla getJSON. Zawodzi z powodu niewłaściwej struktury JSON. - mauris
Można użyć tylko pierwszego przykładu jsonc. Przykłady jQuery i PHP MUSI posługiwać się json. I zaktualizowałem kod, aby dostosować go do nowej struktury JSON. Używam kodu teraz i działa LIVE. więc nie mów, że to nie działa bez czytania zmian. Dzięki! - mauris
Przykłady jQuery i PHP MUSZĄ używać json... czy możesz podać referencję? Żądanie również numeru wersji interfejsu API (v=2) zajmuje się zmianami API. - Salman A
Wywołanie gdata nie zwraca informacji, czy plik maxresdefault.jpg jest dostępny dla filmów, w których jest dostępny, tylko mq / hq / sd. - Aaron
To nie działa w rzeczywistym api v3 - Mario Gonzales Flores


To, co powiedział Asaph, jest słuszne. Jednak nie każdy film YouTube zawiera wszystkie dziewięć miniatur, ale jest siedem miniatur dla każdego filmu. Oni są:

(Rozmiar obrazu zależy od wideo.)

  • Miniatura odtwarzacza (480x360 pikseli)
    https://i1.ytimg.com/vi/G0wGs3useV8/0.jpg

  • Rozpocznij miniaturę (120x90 pikseli)
    https://i1.ytimg.com/vi/G0wGs3useV8/1.jpg

  • Środkowa miniatura (120x90 pikseli)
    https://i1.ytimg.com/vi/G0wGs3useV8/2.jpg

  • Koniec miniaturki (120x90 pikseli)
    https://i1.ytimg.com/vi/G0wGs3useV8/3.jpg

  • Wysoka jakość miniatury (480x360 pikseli)
    https://i1.ytimg.com/vi/G0wGs3useV8/hqdefault.jpg

  • Średnia jakość miniatury (320 x 180 pikseli)
    https://i1.ytimg.com/vi/G0wGs3useV8/mqdefault.jpg

  • Normalna jakość miniatury (120x90 pikseli)
    https://i1.ytimg.com/vi/G0wGs3useV8/default.jpg

Ponadto dwie kolejne miniatury mogą istnieć lub nie. Do filmów HQ oni istnieją.

  • Standardowa rozdzielczość (640 x 480 pikseli)
    https://i1.ytimg.com/vi/G0wGs3useV8/sddefault.jpg

  • Maksymalna rozdzielczość miniatury (1920x1080 pikseli)
    https://i1.ytimg.com/vi/G0wGs3useV8/maxresdefault.jpg

Możesz pobrać skrypty JavaScript i PHP, aby pobrać miniatury i inne Informacje o YouTube w

Użyj również narzędzia Generator informacji wideo w YouTube zdobyć wszystkie informacje o filmie na YouTube, przesyłając a URL lub identyfikator wideo.


199
2017-12-12 11:17



Możesz także osiągnąć ten sam rezultat za pomocą oficjalnego linku youtube img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg gdzie mJ8tq8AnNis jest identyfikatorem wideo - Ragaisis
Czasem niektóre nie istnieją - i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg jest jednak fałszywe i1.ytimg.com/vi/r5R8gSgedh4/0.jpg na przykład jest ok. - NoBugs
Dzięki za zamieszczenie tego. Czy masz źródło tych danych? To prawda, ale chciałbym mieć link do czegoś z serwisu Youtube / Google i nie mogę go znaleźć. - Jonathan Vanasco
@ JonathanVanasco, przepraszam. Jeśli masz na myśli oficjalne źródło dokładnych treści, nie znam żadnego. I nie sądzę, że istnieje cel publikowania czegoś takiego z ich punktu widzenia. - AGMG
jakikolwiek sposób uzyskać 1.jpg w wyższej rozdzielczości, jeśli już ustawiłem coś innego jako miniaturę? - dietbacon


W YouTube API V3 możemy również użyć tych adresów URL do uzyskania miniatur ... Są one klasyfikowane na podstawie ich jakości.

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

I dla maksymalnej rozdzielczości ..

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

Jedną z zalet tych adresów URL w stosunku do adresów URL w pierwszej odpowiedzi jest to, że te adresy URL nie są blokowane przez zapory.


66
2017-08-23 10:23



Czy te obrazy mają być umieszczone w znaczniku img i powinny po prostu działać, ponieważ próbuję umieścić link z właściwym identyfikatorem wideo i umieścić je w tagu img, ale nadal otrzymuję numer 404 - Lion789
@ Lion789 Te adresy URL działają poprawnie po umieszczeniu ich w znaczniku img. Problemem może być nieprawidłowy identyfikator wideo lub żądana rozdzielczość może nie być dostępna, ale nie otrzymasz 404 z tymi błędami. Sprawdź adres URL img tag. - Naren
Czy jest potwierdzone, że adresy URL będą działały po tym, jak interfejs API v2 zostanie zatrzymany? - Daniele B
@DanieleB Te adresy URL nadal działają. Czy wiesz, jak sprawdzić, czy te adresy URL będą działać po interfejsie API v2? - Naren


Jeśli chcesz uzyskać największy obraz z YouTube dla określonego identyfikatora wideo, adres URL powinien wyglądać mniej więcej tak:

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

Za pomocą interfejsu API możesz wybrać domyślny obraz miniatury. Prosty kod powinien wyglądać mniej więcej tak:

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

46
2017-12-22 05:44



Znalazłem przykład, w którym 0.jpg ma rozdzielczość 480x360, a maxresdefault.jpg ma 1280x720 - Nico Haase


Jeśli chcesz pozbyć się "czarnych pasków" i zrobić to tak, jak robi to YouTube, możesz użyć:

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

A jeśli nie możesz tego użyć .webp rozszerzenie możesz zrobić tak:

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

Ponadto, jeśli potrzebujesz wersji nieskalowanej użyj maxresdefault zamiast mqdefault.

Uwaga: nie mam pewności co do proporcji, jeśli planujesz użyć maxresdefault.


39
2018-06-08 11:59



Format .webp nie działa w Firefoksie - Guilherme Carlos
W takim przypadku użyj https://i.ytimg.com/vi/<video id>/mqdefault.jpg. - LuTz
Dzięki, szukałem miniaturek bez tych czarnych pasków dla HD (1920x1080) i to właśnie dla mnie zadziałało! Genius @LuTz! - Aaron Belchamber
To nie jest dostępne w przypadku wielu filmów. Na przykład: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp - NickG
@NickG: Działa, jeśli usuniesz _webp i zmień rozszerzenie na .jpg. Przykład roboczy: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , Nie jestem pewien co do proporcji. - LuTz


Zrobiłem funkcję, aby pobierać tylko istniejące obrazy z 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;
}

27
2017-12-18 10:29





W YouTube Data API v3, możesz uzyskać miniaturki wideo za pomocą filmy-> lista funkcjonować. Od snippet.thumbnails. (key), możesz wybrać miniaturę domyślną, średnią lub wysoką rozdzielczość i uzyskać jej szerokość, wysokość i adres URL.

Możesz także aktualizować miniatury za pomocą miniatury-> zestaw funkcjonalność.

Na przykład możesz sprawdzić Przykłady interfejsów API YouTube projekt. (PHP.)


26
2018-05-28 17:45



Domyślam się, że jest to właściwa metoda, ponieważ pochodzi od członka Google Dev relations dotyczącego interfejsu API youtube - Adonis K. Kakoulidis


Możesz dostać Wpis wideo zawierający adres URL miniatury filmu. W linku znajduje się przykładowy kod. Lub, jeśli chcesz parsować XML, są informacje tutaj. Zwrócony kod XML ma media:thumbnail element, który zawiera adres URL miniatury.


25
2018-01-14 23:40



Nie mogę go pobrać za pomocą simpleXML. To dość trudne! - Aditya M P


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

20
2017-07-04 05:10



to złe rozwiązanie! dlaczego nie skorzystać z YouTube api v3? - mpgn


YouTube należy do Google, a Google lubi mieć odpowiednią liczbę zdjęć dla różnych rozmiarów ekranu, dlatego jego obrazy są przechowywane w różnych rozmiarach. Oto przykład tego, jak ma wyglądać Twoja miniatura

Miniatura o niskiej jakości:

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

Średnia jakość miniatury:

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

Wysoka jakość miniatury:

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

Maksymalna jakość miniatury:

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

16
2017-12-01 23:40