Làm cách nào để có được hình thu nhỏ video YouTube từ API YouTube?


2399

Nếu tôi có URL video YouTube, có cách nào để sử dụng PHP và cURL để lấy hình thu nhỏ được liên kết từ API YouTube không?


Dưới đây là một số chức năng PHP tôi tạo ra để tận dụng tốt nhất thumbnail có sẵn từ các phương pháp URL w / o ping API, dựa tắt của lợi ích nhiều câu trả lời trên trang này: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5
squarecandy

Câu trả lời:


4611

Mỗi video YouTube có bốn hình ảnh được tạo. Chúng được dự đoán định dạng như sau:

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

Cái đầu tiên trong danh sách là một hình ảnh kích thước đầy đủ và những cái khác là hình ảnh thu nhỏ. Hình ảnh thumbnail mặc định (ví dụ, một trong những 1.jpg, 2.jpg, 3.jpg) là:

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

Đối với phiên bản chất lượng cao của hình thu nhỏ, hãy sử dụng URL tương tự như sau:

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

Ngoài ra còn có một phiên bản chất lượng trung bình của hình thu nhỏ, sử dụng URL tương tự như HQ:

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

Đối với phiên bản độ nét tiêu chuẩn của hình thu nhỏ, hãy sử dụng URL tương tự như sau:

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

Đối với phiên bản độ phân giải tối đa của hình thu nhỏ, hãy sử dụng URL tương tự như sau:

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

Tất cả các URL trên cũng có sẵn trên HTTP. Ngoài ra, tên máy chủ ngắn hơn một chút i3.ytimg.comhoạt động thay cho img.youtube.comcác URL ví dụ ở trên.

Ngoài ra, bạn có thể sử dụng API dữ liệu YouTube (v3) để có được hình ảnh thu nhỏ.


27
Chỉ trong trường hợp bất kỳ ai khác mắc phải sai lầm ngớ ngẩn này - bạn không thể sử dụng http://www.img.youtube.com, chỉhttp://img.youtube.com
Ciaran Phillips

36
@NickG mqdefaultlà 16: 9
tomtastico

57
đây có phải là tài liệu chính thức?
bjunix

14
Các hình thu nhỏ có độ phân giải cao hơn không được đảm bảo tồn tại.
Salman A

63
@ clami219 đó là sai sự thật quá - rõ ràng làm việc (2015-04): i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webp , sự thật: sddefaultmaxresdefaultkhông phải lúc nào awailable một số video có họ mặc dù ....
jave.web

398

Bạn có thể sử dụng API dữ liệu YouTube để truy xuất hình thu nhỏ của video, chú thích, mô tả, xếp hạng, thống kê và hơn thế nữa. API phiên bản 3 yêu cầu khóa *. Lấy khóa và tạo video: danh sách yêu cầu:

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

Mã PHP ví dụ

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

Đầu ra

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

* Không chỉ bạn cần một khóa, bạn có thể được yêu cầu cung cấp thông tin thanh toán tùy thuộc vào số lượng yêu cầu API bạn dự định thực hiện. Tuy nhiên, vài triệu yêu cầu mỗi ngày là miễn phí.

Nguồn bài viết .


6
FYI: tôi đã không thay đổi mã để phù hợp với cấu trúc JSON mới. Mã trong getJSON của bạn là sai. Bạn đã sử dụng jsoncthay vì jsoncho getJSON. Không thành công do cấu trúc JSON sai của bạn.
mauris

5
Chỉ ví dụ đầu tiên có thể sử dụng jsonc. Các ví dụ jQuery và PHP PHẢI sử dụng json. Và tôi đã cập nhật mã để phù hợp với cấu trúc JSON mới. Tôi đang sử dụng mã ngay bây giờ và nó đang hoạt động TRỰC TIẾP. vì vậy đừng nói rằng nó không hoạt động mà không đọc các thay đổi. Cảm ơn!
mauris

7
Các ví dụ về jQuery và PHP PHẢI sử dụng json ... bạn có thể cung cấp một tài liệu tham khảo không? Ngoài ra, yêu cầu số phiên bản API cụ thể ( v=2) sẽ đảm nhận các thay đổi API.
Salman A

4
Cuộc gọi gdata không trả về việc maxresdefault.jpg có khả dụng cho các video có sẵn hay không, chỉ mq / hq / sd.
Aaron

2
API v3 là tài liệu RẤT tệ. Họ cung cấp cho bạn mã mẫu nhưng phần "tham chiếu" rất thiếu chi tiết. Một số điều tương đối "rõ ràng" dường như đòi hỏi cách giải quyết khắc nghiệt.
CashCow

256

Những gì Asaph nói là đúng. Tuy nhiên, không phải video YouTube nào cũng chứa tất cả chín hình thu nhỏ. Ngoài ra, kích thước hình ảnh của hình thu nhỏ phụ thuộc vào video (các số bên dưới được dựa trên một).

Có bảy hình thu nhỏ được đảm bảo tồn tại:

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

Ngoài ra, hai hình thu nhỏ khác có thể tồn tại hoặc không tồn tại. Sự hiện diện của họ có lẽ dựa trên việc video có chất lượng cao hay không.

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

Bạn có thể tìm thấy các tập lệnh JavaScript và PHP để truy xuất hình thu nhỏ và thông tin YouTube khác trong:

Bạn cũng có thể sử dụng công cụ Trình tạo thông tin video YouTube để nhận tất cả thông tin về video YouTube bằng cách gửi URL hoặc id video.


5
Bạn cũng có thể đạt được kết quả tương tự với liên kết youtube chính thức img.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpg trong đó mJ8tq8AnNis là id video
Ragaisis

4
Đôi khi một số cái nhất định không tồn tại - i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpg là không có thật mặc dù i1.ytimg.com/vi/r5R8gSgedh4/0.jpg là ok chẳng hạn.
NoBugs

Cảm ơn đã đăng bài này. Bạn có một nguồn cho dữ liệu này? Điều này là chính xác, nhưng tôi muốn một liên kết đến một cái gì đó từ Youtube / Google về điều này và không thể tìm thấy một liên kết.
Jonathan Vanasco 20/07/2015

@JonathanVanasco, xin lỗi. Nếu bạn có nghĩa là một tài nguyên chính thức cho nội dung chính xác, tôi không biết bất kỳ. Và tôi không nghĩ có mục đích xuất bản một cái gì đó như thế theo quan điểm của họ.
AGMG

4
Công cụ "Trình tạo thông tin video YouTube" hiện không hoạt động. Xem xét chỉnh sửa câu trả lời.
giovannipds

74

Trong YouTube API V3, chúng tôi cũng có thể sử dụng các URL này để lấy hình thu nhỏ ... Chúng được phân loại dựa trên chất lượng của chúng.

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

Và cho độ phân giải tối đa ..

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

Một lợi thế của các URL này so với các URL trong câu trả lời đầu tiên là các URL này không bị chặn bởi tường lửa.


3
Có phải những hình ảnh này được cho là được đặt trong thẻ img và chỉ hoạt động vì tôi đang cố gắng bao gồm liên kết với id video youtube phù hợp và đặt chúng trong thẻ img nhưng tôi vẫn nhận được 404
Lion789

5
@ Lion789 Các URL này hoạt động tốt khi được đặt trong thẻ img .. Vấn đề có thể là Id video sai hoặc độ phân giải được yêu cầu có thể không khả dụng nhưng bạn sẽ không nhận được 404 với các lỗi này. Vui lòng kiểm tra url của thẻ img.
Naren

2
Có xác nhận rằng các url sẽ tiếp tục hoạt động sau khi API v2 sẽ bị dừng không?
Daniele B

1
@DanieleB Các URL này vẫn hoạt động. Bạn có biết cách kiểm tra xem các URL này có hoạt động sau API v2 không?
Naren

53

Nếu bạn muốn hình ảnh lớn nhất từ ​​YouTube cho một ID video cụ thể, thì URL phải giống như thế này:

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

Sử dụng API, bạn có thể chọn hình ảnh thu nhỏ mặc định. Mã đơn giản nên giống như thế này:

//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
Tôi đã tìm thấy một ví dụ trong đó 0.jpg có độ phân giải 480x360, trong khi maxresdefault.jpg có 1280x720
Nico Haase

45

Nếu bạn muốn thoát khỏi "các thanh màu đen" và làm điều đó giống như YouTube, bạn có thể sử dụng:

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

Và nếu bạn không thể sử dụng .webpphần mở rộng tập tin, bạn có thể làm như thế này:

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

Ngoài ra, nếu bạn cần phiên bản không có tỷ lệ, hãy sử dụng maxresdefaultthay vì mqdefault.

Lưu ý: Tôi không chắc chắn về tỷ lệ khung hình nếu bạn định sử dụng maxresdefault.


2
Điều này không có sẵn cho nhiều video. Ví dụ: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp
NickG

2
@NickG: Nó hoạt động nếu bạn xóa _webpvà thay đổi tiện ích mở rộng thành .jpg. Ví dụ hoạt động: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpg , tôi không chắc chắn về tỷ lệ khung hình.
LuTz

34

Tôi đã tạo một chức năng để chỉ tìm nạp hình ảnh hiện có từ 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

Trong API dữ liệu YouTube v3 , bạn có thể nhận được hình thu nhỏ của video với chức năng danh sách video-> . Từ snippet.thumbnails. (Phím) , bạn có thể chọn hình thu nhỏ mặc định, trung bình hoặc độ phân giải cao và nhận chiều rộng, chiều cao và URL của nó.

Bạn cũng có thể cập nhật hình thu nhỏ với hình thu nhỏ-> thiết lập chức năng.

Ví dụ: bạn có thể xem dự án Mẫu API của YouTube . (Những cái PHP .)


1
Tôi đoán đây là cách đúng đắn để làm điều đó vì nó đến từ một thành viên quan hệ Google Dev cho api youtube
Adonis K. Kakoulidis

31

Bạn có thể nhận Mục nhập video chứa URL tới hình thu nhỏ của video. Có mã ví dụ trong liên kết. Hoặc, nếu bạn muốn phân tích cú pháp XML, có thông tin ở đây . XML được trả về có một media:thumbnailphần tử chứa URL của hình thu nhỏ.


2
Tôi không thể lấy nó ra bằng cách sử dụng SimpleXML. Nó khá khó!
MP Aditya

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
Đây là một giải pháp tồi! Tại sao không sử dụng Youtube api v3?
mpgn

19

YouTube thuộc sở hữu của Google và Google thích có số lượng hình ảnh hợp lý cho các kích thước màn hình khác nhau, do đó hình ảnh của nó được lưu trữ ở các kích thước khác nhau. Dưới đây là một ví dụ về cách hình thu nhỏ của bạn sẽ như thế nào:

Hình thu nhỏ chất lượng thấp:

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

Hình thu nhỏ chất lượng trung bình:

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

Hình thu nhỏ chất lượng cao:

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

Hình thu nhỏ chất lượng tối đa:

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

16

API YouTube phiên bản 3 trở lên và chạy trong 2 phút

Nếu tất cả những gì bạn muốn làm là tìm kiếm YouTube và nhận các thuộc tính liên quan:

  1. Nhận API công khai - Liên kết này mang đến một hướng tốt

  2. Sử dụng chuỗi truy vấn dưới đây. Truy vấn tìm kiếm (ký hiệu là q = ) trong chuỗi URL là stackoverflow cho mục đích ví dụ. YouTube sau đó sẽ gửi lại cho bạn một câu trả lời JSON, nơi bạn có thể phân tích cú pháp cho Thumbnail, Snippet, Author, v.v.

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


16

Một cách khác tốt hơn là sử dụng API oEmbed được YouTube hỗ trợ.

Bạn chỉ cần thêm URL YouTube của mình vào URL oEmbed và bạn sẽ nhận được JSON bao gồm hình thu nhỏ và mã HTML để nhúng.

Thí dụ:

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

Sẽ cung cấp cho bạn:

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

Đọc tài liệu để biết thêm thông tin .


15

Sử dụng:

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

Trên đây là đường dẫn. Sử dụng điều đó, bạn có thể tìm thấy các đặc điểm YouTube của video. Sau khi tìm thấy các đặc điểm, bạn có thể nhận được các video của thể loại đã chọn. Sau đó, bạn có thể tìm thấy hình ảnh video được chọn bằng câu trả lời của Asaph .

Hãy thử cách tiếp cận ở trên và bạn có thể phân tích mọi thứ từ API YouTube .


14

Tôi đã sử dụng hình thu nhỏ của YouTube theo cách này:

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

Hãy nhớ rằng YouTube ngăn chặn hình ảnh trực tiếp từ máy chủ của họ.



13

Chỉ cần thêm / mở rộng các giải pháp được đưa ra, tôi cảm thấy cần lưu ý rằng, vì tôi đã gặp phải vấn đề này, người ta thực sự có thể lấy nhiều nội dung video trên YouTube, trong trường hợp này là hình thu nhỏ, với một yêu cầu HTTP:

Sử dụng Rest Client, trong trường hợp này là HTTPFUL, bạn có thể làm một cái gì đó như thế này:

<?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 dữ liệu YouTube

YouTube cung cấp cho chúng tôi bốn hình ảnh được tạo cho mỗi video thông qua API dữ liệu (v3), ví dụ:

  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

Truy cập vào hình ảnh thông qua API

  1. Trước tiên hãy lấy khóa API công khai của bạn tại Google API Console .
  2. Theo tham chiếu hình thu nhỏ của YouTube trong tài liệu API , bạn cần truy cập các tài nguyên trên snippet.thumbnails.
  3. Theo điều này, bạn cần phải cụm từ URL của bạn như thế này -

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

Bây giờ thay đổi ID video và khóa API của bạn thành id video và api-key tương ứng của bạn và phản hồi của nó sẽ là đầu ra JSON cung cấp cho bạn bốn liên kết trong hình thu nhỏ của biến đoạn trích (nếu tất cả đều có sẵn).


13

Bạn có thể lấy ID video từ url video YouTube bằng cách sử dụng parse_url , parse_str và sau đó chèn vào các url dự đoán cho hình ảnh. Cảm ơn YouTube về các URL dự đoán

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

Bạn có thể sử dụng công cụ này để tạo hình thu nhỏ của YouTube

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


11

Một hàm PHP đơn giản tôi đã tạo cho hình thu nhỏ của YouTube và các loại là

  • mặc định
  • 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

Nếu bạn đang sử dụng API công khai, cách tốt nhất để làm điều đó là sử dụng if câu lệnh.

Nếu video ở chế độ công khai hoặc không được liệt kê, bạn đặt hình thu nhỏ bằng phương pháp URL. Nếu video ở chế độ riêng tư, bạn sử dụng API để lấy hình thu nhỏ.

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

Tôi nghĩ rằng chúng là rất nhiều câu trả lời cho hình thu nhỏ, nhưng tôi muốn thêm một số URL khác để có được hình thu nhỏ của YouTube rất dễ dàng. Tôi chỉ lấy một số văn bản từ câu trả lời của Asaph. Dưới đây là một số URL để nhận hình thu nhỏ của YouTube:

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

Đối với phiên bản chất lượng cao của hình thu nhỏ, hãy sử dụng URL tương tự như sau:

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

Ngoài ra còn có phiên bản chất lượng trung bình của hình thu nhỏ, sử dụng URL tương tự như chất lượng cao:

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

Đối với phiên bản độ nét tiêu chuẩn của hình thu nhỏ, hãy sử dụng URL tương tự như sau:

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

Đối với phiên bản độ phân giải tối đa của hình thu nhỏ, hãy sử dụng URL tương tự như sau:

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

Đây là câu trả lời hàng đầu được tối ưu hóa để sử dụng thủ công. Mã thông báo ID video không có dấu phân cách cho phép chọn bằng cách nhấp đúp.

Mỗi video YouTube có bốn hình ảnh được tạo. Chúng được dự đoán định dạng như sau:

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

Cái đầu tiên trong danh sách là một hình ảnh kích thước đầy đủ và những cái khác là hình ảnh thu nhỏ. (. Tức là một trong những hình ảnh thu nhỏ mặc định 1.jpg, 2.jpg, 3.jpg) là:

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

Đối với phiên bản chất lượng cao của hình thu nhỏ, hãy sử dụng URL tương tự như sau:

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

Ngoài ra còn có một phiên bản chất lượng trung bình của hình thu nhỏ, sử dụng URL tương tự như HQ:

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

Đối với phiên bản độ nét tiêu chuẩn của hình thu nhỏ, hãy sử dụng URL tương tự như sau:

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

Đối với phiên bản độ phân giải tối đa của hình thu nhỏ, hãy sử dụng URL tương tự như sau:

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

Tất cả các URL trên cũng có sẵn trên HTTP. Ngoài ra, tên máy chủ ngắn hơn một chút i3.ytimg.comhoạt động thay cho img.youtube.comcác URL ví dụ ở trên.

Ngoài ra, bạn có thể sử dụng API dữ liệu YouTube (v3) để có được hình ảnh thu nhỏ.


4

Cách 1:

Bạn có thể tìm thấy tất cả thông tin cho một video YouTube có trang JSON thậm chí có "hình thu nhỏ_url", http://www.youtube.com/oembed?format=json&url= {URL video của bạn ở đây}

Giống như giao diện URL cuối cùng + mã kiểm tra 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);

Đầu ra

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

Để biết chi tiết, bạn cũng có thể xem Cách lấy hình thu nhỏ video YouTube bằng id hoặc https://www.youtube.com/watch?v=mXde7q59BI8 video hướng dẫn 1

Cách 2:

Sử dụng liên kết hình ảnh YouTube, https://img.youtube.com/vi/ "insert-youtube-video-id-here" /default.jpg

Cách 3:

Sử dụng mã nguồn trình duyệt để nhận hình thu nhỏ bằng liên kết URL video - truy cập mã nguồn video và tìm kiếm hình thu nhỏ. Bây giờ bạn có thể sử dụng URL này vào mã nguồn của mình:

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

Để biết chi tiết, bạn cũng có thể xem Cách lấy hình thu nhỏ video YouTube bằng id hoặc https://www.youtube.com/watch?v=9f6E8MeM6PI video hướng dẫn 2


Liên kết https://www.youtube.com/watch?v=mXde7q59BI8https://www.youtube.com/watch?v=9f6E8MeM6PIbị (có hiệu quả) bị phá vỡ.
Peter Mortensen

youtube cấm video này vì chính sách của mình tôi hy vọng bài viết này sẽ giúp bạn www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/
Hassan Saeed

3

Sử dụng img.youtube.com/vi/YouTubeID/ImageFormat.jpg

Ở đây các định dạng hình ảnh khác nhau như mặc định, hqdefault, maxresdefault.


2

Đây là giải pháp không yêu cầu API-key-side-side-side-side-client của tôi.

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

Mật mã:

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`

Tiện ích 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
    })
}

Tiện ích 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

Đây là một chức năng đơn giản mà tôi đã tạo để lấy hình thu nhỏ. Nó rất dễ hiểu và sử dụng.

$ link là liên kết YouTube được sao chép chính xác như trong trình duyệt, ví dụ: 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;
}

Điều này chỉ hoạt động khi url không có tham số truy vấn khác.
Ma Kobi

có, tất cả các video youtube tuân theo định dạng trong khi xem, bạn có thể sao chép liên kết từ trình duyệt
Sodruldeen Mustapha

Nếu bạn có một tham số khác như thế &t=227snào?
Ma Kobi

1
Tôi hiểu quan điểm của bạn, nhưng các video youtube tiêu chuẩn không có các tham số khác nhưng khi có nhu cầu, bạn có thể lọc liên kết trước dòng đầu tiên của chức năng. Bạn có cần trợ giúp trong việc lọc liên kết để đảm bảo nó bỏ qua mọi thứ khác ngoại trừ cần thiết không?
Sodruldeen Mustapha

1

Lưu mã này trong tệp .php trống và kiểm tra nó.

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

Cảm ơn.


-2
public const string tubeThumb = "http://i.ytimg.com/vi/[id]/hqdefault.jpg";
vid.Thumbnail = tubeThumb.Replace("[id]", vid.VideoID);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.