YoutubeAPIを使ってYoutubeのURLからタイトルとサムネイルを取得する機能を実装したので備忘録として残しておく。
基本的には以下のYoutube動画を参考にした。
⇩作成したサービス
YoutubeAPIキー取得
Google Cloud PlatformからYoutubeのAPIキーを取得する。
ここでは説明を省く。
今回はAPIキーを実際の処理の中で変数として持たせてしまっているが、Laravelを使用する場合.envに記載する。
実装
App\LibにYoutube.phpを作成し、ここでAPIと連携する。
今回は作成したサービスの都合上、json形式で値を返す。
namespace App\Lib;
class Youtube {
// YoutubeのURLから動画IDを抽出
public static function getVideoID($url) {
preg_match('/\?v=([^&]+)/', $url , $match);
$id = $match[1];
return $id;
}
// 動画情報をAPIから取得し、json形式で返す
public static function getYoutubeData($url) {
$API_KEY = '取得したAPIキー';
$id = Youtube::getVideoID($url);
$base_url = "https://www.googleapis.com/youtube/v3/";
$API_URL = $base_url . "videos?id=" . $id . "&part=snippet&key=" . $API_KEY;
$video = json_decode(file_get_contents($API_URL));
$title = $video->items[0]->snippet->title;
$thumbnail = $video->items[0]->snippet->thumbnails->medium->url;
$detail = $video->items[0]->snippet->description;
$dataArr = [
'title' => $title,
'thumbnail' => $thumbnail,
'detail' => nl2br($detail)
];
$jsonData = json_encode($dataArr, JSON_UNESCAPED_UNICODE);
return $jsonData;
}
}
コードの説明
getVideoID()
// YoutubeのURLから動画IDを抽出
public static function getVideoID($url) {
preg_match('/\?v=([^&]+)/', $url , $match);
$id = $match[1];
return $id;
}
関数getVideoIdは引数にYoutube動画のURLをとり、動画固有のIDを正規表現で取得している。
例) URL : https://www.youtube.com/watch?v=Kcm6LvSBfpg&t=444s
→動画ID Kcm6LvSBfpg&t=444s
getYoutubeData()
$base_url = "https://www.googleapis.com/youtube/v3/";
YoutubeAPIを使用する場合、このURLに様々なパラメータを指定して情報を取得する。
$API_URL = $base_url . "videos?id=" . $id . "&part=snippet&key=" . $API_KEY;
part=snippetを指定することで、idで指定した動画のタイトル、説明、カテゴリなどの基本的な情報が得られる。
$video = json_decode(file_get_contents($API_URL));
$title = $video->items[0]->snippet->title;
$thumbnail = $video->items[0]->snippet->thumbnails->medium->url;
$detail = $video->items[0]->snippet->description;
APIからはjson形式で値が返ってくるので、PHPのオブジェクトに置換して、必要な情報を取り出す。
どのようなデータが取得可能かは以下を参照する。
https://developers.google.com/youtube/v3/docs/videos?hl=ja
$dataArr = [
'title' => $title,
'thumbnail' => $thumbnail,
'detail' => nl2br($detail)
];
$jsonData = json_encode($dataArr, JSON_UNESCAPED_UNICODE);
取り出したデータを連想配列の形式で代入し、json形式に置換する。
以上でYoutubeAPIから動画の情報を取得できた。