ฉันจะรับภาพขนาดย่อของวิดีโอ YouTube จาก YouTube API ได้อย่างไร


2397

หากฉันมี URL วิดีโอ YouTube จะมีวิธีการใช้ PHP และ cURL เพื่อรับภาพขนาดย่อที่เกี่ยวข้องจาก YouTube API หรือไม่


นี่คือฟังก์ชั่น PHP บางตัวที่ฉันสร้างขึ้นเพื่อให้ได้ภาพขนาดย่อที่ดีที่สุดจากวิธี URL โดยไม่มีการ Ping API ตามคำตอบที่ดีมากมายในหน้านี้: gist.github.com/squarecandy/30ec9f6779c0e8cdf12e337c665d96c5
squarecandy

คำตอบ:


4609

วิดีโอ YouTube แต่ละรายการมีภาพที่สร้างขึ้นสี่ภาพ พวกเขามีรูปแบบที่คาดการณ์ไว้ดังนี้

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

ภาพแรกในรายการคือภาพขนาดเต็มและภาพอื่น ๆ เป็นภาพขนาดย่อ ภาพแสดงภาพย่อเริ่มต้น (เช่นหนึ่ง1.jpg, 2.jpg, 3.jpg) เป็น:

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

สำหรับภาพขนาดย่อคุณภาพสูงให้ใช้ URL ที่คล้ายกับสิ่งนี้:

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

นอกจากนี้ยังมีภาพขนาดย่อคุณภาพปานกลางโดยใช้ URL ที่คล้ายกับ HQ:

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

สำหรับภาพขนาดย่อที่เป็นคำจำกัดความมาตรฐานให้ใช้ URL ที่คล้ายกับสิ่งนี้:

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

สำหรับภาพขนาดย่อที่มีความละเอียดสูงสุดให้ใช้ URL ที่คล้ายกับสิ่งนี้:

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

URL ข้างต้นทั้งหมดมีให้บริการผ่าน HTTP เช่นกัน นอกจากนี้ชื่อโฮสต์ที่สั้นกว่าเล็กน้อยจะi3.ytimg.comทำงานแทนที่img.youtube.comURL ตัวอย่างด้านบน

หรือคุณสามารถใช้YouTube Data API (v3)เพื่อรับภาพขนาดย่อ


27
เพียงในกรณีที่คนอื่นทำผิดใบ้นี้ - คุณไม่สามารถใช้http://www.img.youtube.comเท่านั้นhttp://img.youtube.com
คีแรนฟิลลิป

36
@NickG mqdefaultคือ 16: 9
tomtastico

57
เอกสารนี้อยู่ที่ไหนสักแห่งอย่างเป็นทางการ?
bjunix

14
ภาพขนาดย่อที่มีความละเอียดสูงนั้นไม่สามารถรับประกันได้ว่าจะมีอยู่จริง
Salman A

63
@ clami219 ที่เป็นเท็จด้วย - เห็นได้ชัดว่าการทำงาน (2015-04): i.ytimg.com/vi_webp/EhjdWfxjuHA/sddefault.webpความจริง: sddefaultและmaxresdefaultไม่ได้เสมอ AWAILABLEวิดีโอบางส่วนมีพวกเขาแม้ว่า ....
jave.web

398

คุณสามารถใช้YouTube Data APIเพื่อดึงภาพขนาดย่อคำอธิบายคำอธิบายการจัดอันดับสถิติและอื่น ๆ API เวอร์ชัน 3 ต้องใช้คีย์ * รับกุญแจและสร้างวิดีโอ:คำขอรายการ :

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

ตัวอย่างรหัส 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);

เอาท์พุต

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

* ไม่เพียง แต่คุณต้องการรหัสเท่านั้นคุณอาจถูกขอข้อมูลการเรียกเก็บเงินตามจำนวนคำขอ API ที่คุณวางแผนจะทำ อย่างไรก็ตามมีการร้องขอไม่กี่ล้านครั้งต่อวัน

บทความที่มา


6
FYI: ฉันไม่ได้เปลี่ยนรหัสให้เหมาะกับโครงสร้าง JSON ใหม่ รหัสใน getJSON ของคุณผิด คุณใช้jsoncแทนjsongetJSON มันล้มเหลวเนื่องจากโครงสร้าง JSON ของคุณไม่ถูกต้อง
เมาริส

5
ตัวอย่างแรกเท่านั้นที่สามารถjsoncใช้ได้ jQuery และ PHP ตัวอย่างต้องjsonใช้ และฉันได้ปรับปรุงรหัสเพื่อให้สอดคล้องกับโครงสร้าง JSON ใหม่ ฉันใช้รหัสตอนนี้และมันใช้งานได้จริง ดังนั้นอย่าพูดว่ามันใช้งานไม่ได้หากไม่อ่านการเปลี่ยนแปลง ขอบคุณ!
mauris

7
ตัวอย่าง jQuery และ PHP ต้องใช้ json ... คุณสามารถให้ข้อมูลอ้างอิงได้หรือไม่ นอกจากนี้การขอหมายเลขรุ่น API ที่เฉพาะเจาะจง ( v=2) จะดูแลการเปลี่ยนแปลง API
Salman

4
การเรียก gdata ไม่ส่งคืนว่า maxresdefault.jpg พร้อมใช้งานสำหรับวิดีโอที่มีให้เฉพาะ mq / hq / sd เท่านั้น
แอรอน

2
API v3 มีการบันทึกไว้ไม่ดีมาก พวกเขาให้รหัสตัวอย่างแก่คุณ แต่ส่วน "อ้างอิง" นั้นมีรายละเอียดน้อยมาก บางสิ่งที่ควรจะค่อนข้าง "ชัดเจน" ดูเหมือนจะต้องใช้วิธีการแก้ปัญหาที่รุนแรง
CashCow

256

สิ่งที่ Asaph พูดนั้นถูกต้อง อย่างไรก็ตามไม่ใช่วิดีโอ YouTube ทุกรายการที่มีภาพขนาดย่อทั้งเก้า นอกจากนี้ขนาดรูปภาพของภาพย่อจะขึ้นอยู่กับวิดีโอด้วย

มีภาพขนาดย่อเจ็ดภาพที่รับประกันว่ามีอยู่:

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

นอกจากนี้ภาพขนาดย่ออีกสองภาพอาจมีหรือไม่มีอยู่ สถานะของพวกเขาอาจขึ้นอยู่กับว่าวิดีโอมีคุณภาพสูง

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

คุณสามารถค้นหาสคริปต์ JavaScript และ PHP เพื่อดึงภาพขนาดย่อและข้อมูลอื่น ๆ ของ YouTube ได้ที่:

คุณยังสามารถใช้เครื่องมือเครื่องมือสร้างข้อมูลวิดีโอ YouTubeเพื่อรับข้อมูลทั้งหมดเกี่ยวกับวิดีโอ YouTube โดยส่ง URL หรือรหัสวิดีโอ


5
นอกจากนี้คุณยังสามารถรับผลลัพธ์เดียวกันได้ด้วยลิงก์ youtube อย่างเป็นทางการimg.youtube.com/vi/mJ8tq8AnNis/mqdefault.jpgโดยที่ mJ8tq8AnNis เป็นรหัสวิดีโอ
Ragaisis

4
บางครั้งบางคนไม่มีอยู่ - i1.ytimg.com/vi/r5R8gSgedh4/maxresdefault.jpgเป็นของปลอมแม้ว่าi1.ytimg.com/vi/r5R8gSgedh4/0.jpgก็โอเคเช่น
NoBugs

ขอขอบคุณที่โพสต์สิ่งนี้ คุณมีแหล่งข้อมูลสำหรับข้อมูลนี้หรือไม่? ถูกต้อง แต่ฉันต้องการลิงค์ไปยังบางสิ่งจาก Youtube / Google เกี่ยวกับเรื่องนี้และหาไม่พบ
Jonathan Vanasco

@JonathanVanasco ขอโทษ หากคุณหมายถึงแหล่งข้อมูลทางการสำหรับเนื้อหาที่แน่นอนฉันไม่รู้อะไรเลย และฉันไม่คิดว่ามีจุดประสงค์ในการเผยแพร่บางอย่างเช่นนั้นจากมุมมองของพวกเขา
AGMG

4
ขณะนี้เครื่องมือ "เครื่องมือสร้างข้อมูลวิดีโอ YouTube" ไม่ทำงาน พิจารณาแก้ไขคำตอบ
giovannipds

74

ใน YouTube API V3 เรายังสามารถใช้ URL เหล่านี้เพื่อรับภาพขนาดย่อ ... พวกเขาถูกจัดประเภทตามคุณภาพของพวกเขา

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

และสำหรับความละเอียดสูงสุด ..

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

ข้อดีอย่างหนึ่งของ URL เหล่านี้เหนือ URL ในคำตอบแรกคือ URL เหล่านี้ไม่ได้ถูกบล็อกโดยไฟร์วอลล์


3
ภาพเหล่านี้ควรจะอยู่ในแท็ก img หรือไม่และควรใช้งานได้เพราะฉันพยายามรวมลิงก์กับรหัสวิดีโอ YouTube ที่ถูกต้องและใส่ไว้ในแท็ก img แต่ฉันได้รับ 404
Lion789

5
@ Lion789 URL เหล่านี้ทำงานได้ดีเมื่ออยู่ในแท็ก img .. ปัญหาอาจเป็นรหัสวิดีโอที่ไม่ถูกต้องหรือความละเอียดที่ร้องขออาจไม่สามารถใช้ได้ แต่คุณจะไม่ได้รับ 404 ที่มีข้อผิดพลาดเหล่านี้โปรดตรวจสอบ URL ของ แท็ก img
Naren

2
มันยืนยันว่า URL จะยังคงทำงานหลังจาก API v2 จะหยุดทำงานหรือไม่
Daniele B

1
@DanieleB URL เหล่านี้ยังใช้งานได้ คุณรู้วิธีการตรวจสอบว่า URL เหล่านี้จะทำงานหลังจาก API v2 หรือไม่
Naren

53

หากคุณต้องการภาพที่ใหญ่ที่สุดจาก YouTube สำหรับรหัสวิดีโอเฉพาะ URL ควรเป็นดังนี้:

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

เมื่อใช้ API คุณสามารถเลือกภาพย่อขนาดเริ่มต้นได้ รหัสอย่างง่ายควรเป็นดังนี้:

//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
ฉันพบตัวอย่างที่ 0.jpg มีความละเอียด 480x360 ในขณะที่ maxresdefault.jpg มี 1280x720
Nico Haase

45

หากคุณต้องการกำจัด "แถบสีดำ" และทำเช่นเดียวกับที่ YouTube ทำคุณสามารถใช้:

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

และถ้าคุณไม่สามารถใช้.webpนามสกุลไฟล์คุณสามารถทำได้เช่นนี้:

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

นอกจากนี้ถ้าคุณต้องรุ่น unscaled ใช้แทนmaxresdefaultmqdefault

หมายเหตุ: maxresdefaultผมไม่แน่ใจว่าเกี่ยวกับอัตราส่วนถ้าคุณวางแผนกำลังกับการใช้งาน


2
ไม่สามารถใช้ได้กับวิดีโอหลายรายการ เช่น: i.ytimg.com/vi_webp/mJ8tq8AnNis/mqdefault.webp
NickG

2
@NickG: มันทำงานได้หากคุณลบและเปลี่ยนนามสกุลไป_webp .jpgตัวอย่างการทำงาน: i.ytimg.com/vi/mJ8tq8AnNis/mqdefault.jpgฉันไม่แน่ใจเกี่ยวกับอัตราส่วนภาพ
LuTz

34

ฉันสร้างฟังก์ชั่นเพื่อดึงภาพที่มีอยู่จาก 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

ในYouTube Data API v3คุณสามารถรับภาพขนาดย่อของวิดีโอด้วยฟังก์ชั่นวิดีโอ -> รายการ จากsnippet.thumbnails. (คีย์)คุณสามารถเลือกภาพขนาดย่อที่เป็นค่าเริ่มต้นปานกลางหรือสูงและรับความกว้างความสูงและ URL

นอกจากนี้คุณยังสามารถอัปเดตภาพขนาดย่อด้วยฟังก์ชั่นภาพย่อ -> ตั้งค่า

ตัวอย่างเช่นคุณสามารถดูตัวอย่างโครงการYouTube API (รายการPHP )


1
ฉันเดาว่านี่เป็นวิธีที่ถูกต้องเนื่องจากมันมาจากสมาชิก Google Dev Relations สำหรับ youtube api
Adonis K. Kakoulidis

31

คุณสามารถรับรายการวิดีโอซึ่งมี URL เป็นภาพขนาดย่อของวิดีโอ มีรหัสตัวอย่างในลิงค์ หรือถ้าคุณต้องการที่จะแยก XML มีข้อมูลที่นี่ XML ที่ส่งคืนมีmedia:thumbnailองค์ประกอบซึ่งมี URL ของรูปขนาดย่อ


2
ฉันไม่สามารถทำได้โดยใช้ simpleXML มันค่อนข้างยาก!
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
นี่เป็นทางออกที่ไม่ดี! ทำไมไม่ใช้ Youtube api v3
mpgn

19

YouTube เป็นเจ้าของโดย Google และ Google ชอบที่จะมีรูปภาพจำนวนพอสมควรสำหรับขนาดหน้าจอที่แตกต่างกันดังนั้นรูปภาพของมันจึงถูกจัดเก็บในขนาดต่าง ๆ นี่คือตัวอย่างของรูปขนาดย่อที่คุณต้องการ:

ภาพย่อที่มีคุณภาพต่ำ:

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

ภาพขนาดย่อที่มีคุณภาพปานกลาง:

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

ภาพขนาดย่อที่มีคุณภาพสูง:

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

ภาพขนาดย่อคุณภาพสูงสุด:

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

16

YouTube API เวอร์ชัน 3 ทำงานใน 2 นาที

หากสิ่งที่คุณต้องการคือค้นหา YouTube และรับคุณสมบัติที่เกี่ยวข้อง:

  1. รับAPI สาธารณะ - ลิงก์นี้ให้ทิศทางที่ดี

  2. ใช้สตริงข้อความค้นหาด้านล่าง คำค้นหา (แสดงโดยq = ) ในสตริง URL คือstackoverflowสำหรับวัตถุประสงค์ตัวอย่าง จากนั้น YouTube จะส่งการตอบกลับของ JSON ให้คุณซึ่งคุณสามารถแยกวิเคราะห์ย่อภาพขนาดย่อตัวอย่างผู้แต่ง ฯลฯ

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


16

อีกทางเลือกที่ดีคือการใช้oEmbed API ซึ่งรองรับโดย YouTube

คุณเพียงแค่เพิ่ม URL ของ YouTube ลงใน URL oEmbed และคุณจะได้รับ JSON รวมถึงภาพขนาดย่อและรหัส HTML สำหรับการฝัง

ตัวอย่าง:

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

จะให้คุณ:

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

อ่านเอกสารประกอบการเพิ่มเติมข้อมูล


15

ใช้:

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

ด้านบนคือลิงค์ เมื่อใช้สิ่งนี้คุณจะสามารถค้นหาลักษณะของวิดีโอ YouTube ได้ หลังจากค้นหาคุณสมบัติคุณสามารถรับวิดีโอของหมวดหมู่ที่เลือก หลังจากนั้นคุณสามารถค้นหาภาพที่เลือกวิดีโอโดยใช้คำตอบของอาสาฟ

ลองใช้วิธีดังกล่าวข้างต้นและคุณสามารถแยกทุกอย่างจาก YouTube API


14

ฉันใช้รูปขนาดย่อของ YouTube ด้วยวิธีนี้:

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

โปรดจำไว้ว่า YouTube ป้องกันไม่ให้รวมภาพโดยตรงจากเซิร์ฟเวอร์



13

เพียงเพื่อเพิ่ม / ขยายโซลูชั่นที่ให้มาฉันรู้สึกว่าจำเป็นที่จะต้องทราบว่าเนื่องจากฉันมีปัญหานี้ด้วยตนเองฉันสามารถคว้าเนื้อหาวิดีโอ YouTube หลายรายการในกรณีนี้ภาพขนาดย่อด้วยคำขอ HTTP เดียว:

การใช้ไคลเอ็นต์ที่เหลือในกรณีนี้ HTTPFUL คุณสามารถทำสิ่งนี้ได้:

<?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 ข้อมูลของ YouTube

YouTube ให้ภาพสี่ภาพที่เราสร้างให้กับทุกวิดีโอผ่าน Data API (v3) ตัวอย่างเช่น

  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

การเข้าถึงภาพผ่าน API

  1. ครั้งแรกที่ได้รับคีย์ API สาธารณะของคุณที่API คอนโซล
  2. ตามการอ้างอิงภาพขนาดย่อของ YouTube ในเอกสาร APIคุณจะต้องเข้าถึงทรัพยากรในตัวอย่างข้อมูล
  3. ตามนี้คุณจะต้องวลี URL ของคุณเช่นนี้ -

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

ตอนนี้เปลี่ยนรหัสวิดีโอและคีย์ API ของคุณเป็นรหัสวิดีโอและรหัส API และการตอบสนองของมันจะเป็นเอาท์พุท JSON ที่ให้คุณเชื่อมโยงสี่ลิงค์ในรูปขนาดย่อของตัวแปรสนิปเพต (หากมีทั้งหมด)


13

คุณสามารถรับรหัสวิดีโอจาก URL วิดีโอ YouTube โดยใช้parse_url , parse_strแล้วใส่ลงใน URL ที่คาดการณ์สำหรับรูปภาพ ขอบคุณ YouTube สำหรับ URL ที่คาดเดาได้

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

คุณสามารถใช้เครื่องมือนี้เพื่อสร้างภาพขนาดย่อของ YouTube

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


11

ฟังก์ชั่น PHP ง่าย ๆ ที่ฉันสร้างขึ้นสำหรับภาพขนาดย่อของ YouTube และประเภทต่างๆ

  • ค่าเริ่มต้น
  • 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

หากคุณใช้ API สาธารณะวิธีที่ดีที่สุดที่จะทำคือใช้ifคำสั่ง

หากวิดีโอเป็นแบบสาธารณะหรือไม่อยู่ในรายการคุณจะกำหนดภาพขนาดย่อโดยใช้วิธี URL หากวิดีโอเป็นแบบส่วนตัวคุณใช้ API เพื่อรับภาพขนาดย่อ

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

ฉันคิดว่ามันเป็นคำตอบมากมายสำหรับภาพขนาดย่อ แต่ฉันต้องการเพิ่ม URL อื่น ๆ เพื่อให้ได้ภาพขนาดย่อของ YouTube อย่างง่ายดาย ฉันแค่รับข้อความจากคำตอบของ Asaph นี่คือ URL ที่จะรับภาพขนาดย่อของ YouTube:

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

สำหรับภาพขนาดย่อคุณภาพสูงให้ใช้ URL ที่คล้ายกับสิ่งนี้:

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

นอกจากนี้ยังมีภาพขนาดย่อรุ่นคุณภาพปานกลางโดยใช้ URL ที่คล้ายกับคุณภาพสูง:

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

สำหรับภาพขนาดย่อที่เป็นคำจำกัดความมาตรฐานให้ใช้ URL ที่คล้ายกับสิ่งนี้:

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

สำหรับภาพขนาดย่อที่มีความละเอียดสูงสุดให้ใช้ URL ที่คล้ายกับสิ่งนี้:

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

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

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

5

นี่คือคำตอบที่ได้รับการปรับให้เหมาะกับการใช้งานแบบแมนนวล โทเค็นรหัสวิดีโอที่ไม่มีตัวคั่นช่วยให้สามารถเลือกได้ด้วยการคลิกสองครั้ง

วิดีโอ YouTube แต่ละรายการมีภาพที่สร้างขึ้นสี่ภาพ พวกเขามีรูปแบบที่คาดการณ์ไว้ดังนี้

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

ภาพแรกในรายการคือภาพขนาดเต็มและภาพอื่น ๆ เป็นภาพขนาดย่อ (. คือหนึ่งในภาพเริ่มต้น1.jpg, 2.jpg, 3.jpg) เป็น:

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

สำหรับภาพขนาดย่อคุณภาพสูงให้ใช้ URL ที่คล้ายกับสิ่งนี้:

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

นอกจากนี้ยังมีภาพขนาดย่อคุณภาพปานกลางโดยใช้ URL ที่คล้ายกับ HQ:

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

สำหรับภาพขนาดย่อที่เป็นคำจำกัดความมาตรฐานให้ใช้ URL ที่คล้ายกับสิ่งนี้:

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

สำหรับภาพขนาดย่อที่มีความละเอียดสูงสุดให้ใช้ URL ที่คล้ายกับสิ่งนี้:

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

URL ข้างต้นทั้งหมดมีให้บริการผ่าน HTTP เช่นกัน นอกจากนี้ชื่อโฮสต์ที่สั้นกว่าเล็กน้อยจะi3.ytimg.comทำงานแทนที่img.youtube.comURL ตัวอย่างด้านบน

หรือคุณสามารถใช้YouTube Data API (v3)เพื่อรับภาพขนาดย่อ


4

วิธีที่ 1:

คุณสามารถค้นหาข้อมูลทั้งหมดสำหรับวิดีโอ YouTube ด้วยหน้า JSON ซึ่งมี "thumbnail_url", http://www.youtube.com/oembed?format=json&url= {URL วิดีโอของคุณไปที่นี่}

กดไลค์ URL สุดท้าย + รหัสทดสอบ 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

สำหรับรายละเอียดคุณสามารถดูวิธีรับรูปขนาดย่อของวิดีโอ YouTube โดยใช้ id หรือhttps://www.youtube.com/watch?v=mXde7q59BI8บทช่วยสอนวิดีโอ 1

วิธีที่ 2:

ใช้ลิงก์รูปภาพของ YouTube https://img.youtube.com/vi/ "insert-youtube-video-id-here" /default.jpg

วิธีที่ 3:

การใช้ซอร์สโค้ดของเบราว์เซอร์สำหรับรับภาพขนาดย่อโดยใช้ลิงค์ URL วิดีโอ - ไปที่ซอร์สโค้ดวิดีโอและค้นหาภาพขนาดย่อ ตอนนี้คุณสามารถใช้ URL นี้ในซอร์สโค้ดของคุณ:

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

สำหรับรายละเอียดคุณสามารถดูวิธีรับรูปขนาดย่อของวิดีโอ YouTube โดยใช้ id หรือ https://www.youtube.com/watch?v=9f6E8MeM6PI วิดีโอสอน 2


ลิงค์https://www.youtube.com/watch?v=mXde7q59BI8และhttps://www.youtube.com/watch?v=9f6E8MeM6PIเสีย (อย่างมีประสิทธิภาพ)
Peter Mortensen

youtube ห้ามวิดีโอนี้เนื่องจากนโยบายของฉันหวังว่าบทความนี้จะช่วยให้คุณ www.hzonesp.com/php/get-youtube-video-thumbnail-using-id/
Hassan Saeed

3

ใช้ img.youtube.com/vi/YouTubeID/ImageFormat.jpg

นี่คือรูปแบบของภาพที่แตกต่างกันเช่นค่าเริ่มต้น hqdefault, maxresdefault


2

นี่เป็นโซลูชันที่ไม่ต้องใช้คีย์ - ฝั่งไคลเอ็นต์เท่านั้น

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

รหัส:

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`

ยูทิลิตี้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
    })
}

ยูทิลิตี้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

นี่คือฟังก์ชั่นง่ายๆที่ฉันสร้างขึ้นเพื่อรับภาพขนาดย่อ ง่ายต่อการเข้าใจและใช้งาน

$ link คือลิงก์ของ YouTube ที่คัดลอกอย่างถูกต้องเหมือนกับในเบราว์เซอร์ตัวอย่างเช่น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;
}

ใช้งานได้เฉพาะเมื่อ url ไม่มีพารามิเตอร์การสืบค้นอื่น ๆ
Ma Kobi

ใช่วิดีโอ youtube ทั้งหมดตามรูปแบบในขณะที่ดูคุณสามารถคัดลอกลิงก์จากเบราว์เซอร์
Sodruldeen Mustapha

เกิดอะไรขึ้นถ้าคุณมีพารามิเตอร์อื่นเช่น&t=227s?
Ma Kobi

1
ฉันเข้าใจประเด็นของคุณ แต่วิดีโอ youtube มาตรฐานมาโดยไม่มีพารามิเตอร์อื่น ๆ แต่เมื่อมีความจำเป็นเกิดขึ้นคุณสามารถกรองลิงก์ก่อนบรรทัดแรกของฟังก์ชั่น คุณต้องการความช่วยเหลือในการกรองลิงค์เพื่อให้แน่ใจว่ามันละเว้นทุกอย่างยกเว้นสิ่งที่จำเป็น?
Sodruldeen Mustapha

1

บันทึกรหัสนี้ในไฟล์. php ที่ว่างเปล่าและทดสอบ

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

ขอบคุณ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.