YouTubeの動画URLを持っている場合、YouTube APIから関連するサムネイルを取得するためにPHPとcURLを使用する方法はありますか?
各YouTubeビデオには4つの生成画像があります。それらは、次のように予想通りにフォーマットされています。
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
HQに似たURLを使用して、中品質バージョンのサムネイルもあります。
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
は、上記の例のURLのimg.youtube.com
の代わりに機能します。
または、 YouTube Data API(v3) を使用してサムネイル画像を取得することもできます。
YouTube Data API を使用して、ビデオのサムネイル、キャプション、説明、評価、統計などを取得できます。 APIバージョン3にはキー*が必要です。キーを取得して videos:list requestを作成します。
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リクエストの数によっては、請求情報が求められる場合があります。ただし、1日あたり数百万のリクエストは無料です。
ソース記事 。
アサフが言ったことは正しいです。ただし、すべてのYouTubeビデオに9つすべてのサムネイルが含まれているわけではありません。また、サムネイルの画像サイズはビデオによって異なります(以下の数字は1を基準にしています)。
存在が保証されている7つのサムネイルがあります:
| 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 |
さらに、他の2つのサムネイルは存在する場合と存在しない場合があります。彼らの存在はおそらくビデオが高画質かどうかに基づいています。
| 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 |
サムネイルやその他のYouTube情報を取得するためのJavaScriptおよびPHPスクリプトは、次の場所にあります。
また、 YouTube Video Information Generator ツールを使用して、URLまたはビデオIDを送信してYouTubeビデオに関するすべての情報を取得することもできます。
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の利点の1つは、これらのURLがファイアウォールによってブロックされないことです。
特定の動画IDに対して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);
あなたが「黒いバー」を取り除き、YouTubeがそれをするようにそれをしたいならば、あなたは使うことができます:
https://i.ytimg.com/vi_webp/<video id>/mqdefault.webp
.webp
拡張子を使えない場合は、次のようにします。
https://i.ytimg.com/vi/<video id>/mqdefault.jpg
また、スケールなしのバージョンが必要な場合は、maxresdefault
ではなくmqdefault
を使用してください。
注:maxresdefault
を使用する予定であれば、アスペクト比についてはよくわかりません。
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;
}
YouTube Data API v3 では、 videos-> list 関数を使用して動画のサムネイルを取得できます。 snippet.thumbnails。(key) から、デフォルトの中解像度または高解像度のサムネイルを選択して、その幅、高さ、およびURLを取得できます。
thumbnails-> set 機能でサムネイルを更新することもできます。
例えば、 YouTube APIサンプル プロジェクトをチェックすることができます。 ( PHP ones 。)
// 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は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
YOUTUBE APIバージョン3 ** 2分で起動します**
あなたがしたいのはYouTubeを検索し、関連するプロパティを取得することです。
2.以下のクエリ文字列を使用してください。 URLストリング内の検索照会(q =で示される)は、例のためにstackoverflowです。その後、YouTubeからjsonの返信が返信され、そこでサムネイル、スニペット、作成者などを解析できます。
https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&maxResults=50&q=stackoverflow&key=YOUR_API_KEY_HERE
つかいます:
https://www.googleapis.com/youtube/v3/videoCategories?part=snippet,id&maxResults=100®ionCode=us&key=**Your YouTube ID**
上記のリンクです。それを使用して、あなたはビデオのYouTubeの特徴を見つけることができます。特性を見つけたら、選択したカテゴリのビデオを見ることができます。その後、Asaph's answerを使用して選択したビデオ画像を見つけることができます。
上記の方法を試してみると、YouTubeの _ api _ からすべてを解析できます。
私はこのように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はサーバーから直接画像を含めることを禁止していることを忘れないでください
もう1つの良い方法は、YouTubeでサポートされている oEmbed APIを使用することです。
YouTubeのURLをoEmbedのURLに追加するだけで、サムネイルと埋め込み用のHTMLコードを含むJSONが表示されます。
例:
http://www.youtube.com/oembed?format=json&url=http%3A//youtube.com/watch%3Fv%3DDLzxrzFCyOs
あなたに与えるでしょう:
{
thumbnail_url: "https://i.ytimg.com/vi/DLzxrzFCyOs/hqdefault.jpg",
width: 459,
author_name: "AllKindsOfStuff",
version: "1.0",
author_url: "https://www.youtube.com/channel/UCLNd5EtH77IyN1frExzwPRQ",
thumbnail_width: 480,
type: "video",
provider_url: "https://www.youtube.com/",
html: "<iframe width="459" height="344" src="https://www.youtube.com/embed/DLzxrzFCyOs?feature=oembed" frameborder="0" allowfullscreen></iframe>",
title: "Some title bla bla foo bar",
thumbnail_height: 360,
provider_name: "YouTube",
height: 344
}
詳しくはドキュメントをお読みください 情報 。
与えられたソリューションを追加/拡張するためだけに、私はこの問題を自分で抱えていたので、実際には1つのHTTPリクエストで複数のYouTubeビデオコンテンツ、この場合はサムネイルを取得できることに注意する必要があると思います。
Rest Client、この場合は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);
?>
私はあなたが画像の上に置かれたYouTubeの再生ボタンで画像を作成することを可能にするこの気の利いたツールを見つけました:
私はYouTubeのサムネイル用に作成した単純なPHP関数と型は
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;}
パブリック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> 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';
}
YouTube Data API(v3)を介して、すべての動画について4つの生成された画像を提供します。
https://i.ytimg.com/vi/V_zwalcR8DU/maxresdefault.jpg
https://i.ytimg.com/vi/V_zwalcR8DU/sddefault.jpg
https://i.ytimg.com/vi/V_zwalcR8DU/hqdefault.jpg
https://i.ytimg.com/vi/V_zwalcR8DU/mqdefault.jpg
このように、あなたはこのようにあなたのURLをフレーズする必要があります -
www.googleapis.com/youtube/v3/videos?part=snippet&id=yourVideoId
&key=yourApiKey
今すぐyourVideoIdとyourApiKeyをそれぞれのvideo-idとapi-keyに変更すると、その応答はJSON出力になり、スニペット変数のサムネイルに4リンクが表示されます(すべて使用可能な場合)。
YouTubeビデオのURLから parse_url 、 parse_str を使用してビデオIDを取得し、画像の予測URLに挿入することができます。予測URLのYouTubeに感謝します
$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/<?php print $ytID?>/maxresdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/mqdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/hqdefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/sddefault.jpg";
print "https://img.youtube.com/vi/<?php print $ytID?>/default.jpg";
このツールを使用してYouTubeのサムネイルを生成できます
私は彼らがサムネイルのための多くの答えであると思います、しかし私はYouTubeサムネイルを非常に簡単にするためにいくつかの他のURLを加えたいです。私はAsaphの答えからいくつかのテキストを取っているところです。 YouTubeのサムネイルを取得するためのURLです。
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
HQに似た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
それが近い将来に誰かに役立つことを願っています。
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');
トップ回答 手動での使用に最適化されています。区切り記号なしのビデオIDトークンは、ダブルクリックでの選択を可能にします。
各YouTubeビデオには4つの生成画像があります。それらは、次のように予想通りにフォーマットされています。
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
HQに似たURLを使用して、中品質バージョンのサムネイルもあります。
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
は、上記の例のURLのimg.youtube.com
の代わりに機能します。
または、 YouTube Data API(v3) を使用してサムネイル画像を取得することもできます。
方法1:
あなたも "thumbnail_url" http://www.youtube.com/oembed?format=json&url= を持っているjsonページでYouTubeビデオすべての情報を見つけることができます_ {あなたのビデオ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
詳しくは https://www.youtube.com/watch?v=mXde7q59BI8 _ビデオチュートリアルもご覧ください。1
方法2: youtubeを使用するimg link https://img.youtube.com/vi/ "insert-youtube-video-id-here" /default.jpg
方法3: ビデオのURLを使用してサムネイルを取得するためのブラウザのソースコードの使用 - ビデオのソースコードに移動し、thumbnailurlを検索してください。 img.youtube.com/vi/"insert-youtube-video-id-here"/default.jpg "}
詳しくは http://hzonesp.com/php/get-youtube-video-thumbnail-using-id/ または https://www.youtube.com/watch?)をご覧ください。 v = 9f6E8MeM6PI ビデオチュートリアル2
これを使用する - img.youtube.com/vi/YouTubeID/ImageFormat.jpgこちらの画像フォーマットはdefault、hqdefault、maxresdefaultのように異なります。
このコードを空の.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';
}
ありがとう。
これは私がサムネイルを取得するために作成した簡単な関数です、それは理解しやすく使いやすいです。 $ 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;
}
これは私のクライアントサイドのみのAPIキー不要のソリューションです。
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
},
{})
}