東京都府中市、九段下のWeb制作会社Maromaroのブログです

2026.01.13

# コーディング・システム開発

【備忘録】YouTube Data API V3で動画IDから公開ステータスを取得する方法【PHP】

こんにちは、MaromaroのTakaです。

WordPressの案件でYouTube動画を紐づけて投稿を公開している案件があり、
YouTubeが非公開になった場合に投稿も非公開にする必要がありました。

今回は備忘録としてAPIで取得したステータスから公開の操作をする方法を記載いたします。

やり方

まずはYouTube APIのAPI key取得する必要がありますが、こちらは割愛させていただきます。
「YouTube Data API APIkey取得」などで検索すると詳しい取得方法が掲載されているページを見つけることができます。

API keyが取得できたら、以下のようにAPI KeyとYouTubeの動画IDを用いてステータスを取得しに行きます。

$API_KEY = "XXXXXXXXXXX";
$base_url = "https://www.googleapis.com/youtube/v3/";
$youtube_id = "XXXXXXXXXXX";
$part = "snippet,status"; //ここで取得したい内容を変更できる
$API_URL = $base_url . "videos?id=" . $youtube_id . "&part=".$part."&key=" . $API_KEY;
$video = json_decode(file_get_contents($API_URL));
if (!empty($video->items)) {
  $status = $video->items[0]->status->privacyStatus;//公開ステータスの取得(private = 非公開,public = 公開,unlisted = 限定公開)<br />  //以下自由に処理を記載
}

上記のように記述することにより、ステータスを取得できます。
もし動画が削除されている場合は、そもそもステータス自体が取得出来ないので、
その場合はemptyのif文にelseを追加して処理できます。

また、$partの部分の指定にカンマ区切りでoptionを追加することにより、他の情報も取得できます。
念のため↑ではsnippetを追加してありますが、
snippetでは公開日、チャンネルID、タイトル、説明文、サムネイルなどを取得することが出来ます。
他にもありますが他はあまり使わないと思います。

ちなみにsnippetでは以下の記載で取得できます。

$publishedAt= $video->items[0]->snippet->publishedAt; //公開日
$channelId= $video->items[0]->snippet->channelId; //チャンネルID
$title= $video->items[0]->snippet->title; //タイトル
$description = $video->items[0]->snippet->description; //説明文
$thumbnail_default = $video->items[0]->snippet->thumbnails->default->url; //サムネイルのURL - 120 × 90
$thumbnail_medium = $video->items[0]->snippet->thumbnails->medium->url; //サムネイルのURL - 320 × 180
$thumbnail_high = $video->items[0]->snippet->thumbnails->high->url; //サムネイルのURL - 480 × 360
$thumbnail_standard = $video->items[0]->snippet->thumbnails->standard->url; //サムネイルのURL - 640 × 480
$thumbnail_maxres = $video->items[0]->snippet->thumbnails->maxres->url; //サムネイルのURL - 1280 × 720

APIは1日1万リクエストを超えるとその日は使用不可になってしまう恐れがあるので、
物にはよりますが、都度叩かずにバッチなどで定期的にAPIを叩くような方式を取るのが良さそうですね。
※正確には1日1万クォータの制限から利用内容によって変動するコストを使用していく形です。

ちなみに主なコスト一覧は以下になります。今回取得したのはvideosのlistに該当するので1リクエストあたり1ユニットを消費します。
基本的に取得(list)は1コストになります。

リソース/操作 メソッド 消費ユニット
activities list 1
channels list 1
channels update 50
comments list 1
comments insert / update / delete 50
commentThreads list 1
playlists / playlistItems list 1
playlists / playlistItems insert / update / delete 50
search list 100
videos list 1
videos insert 100
videos update 50
videos.getRating getRating 1
thumbnails.set set 50
その他 ほとんどの基本 list 操作 1

以上、Takaでした。