YouTube Data APIを使ってチャンネルにアップロードされた動画一覧を取得するには、
- APIリクエストを行うオブジェクトを作成
- 対象チャンネルの
uploads
プレイリストIDを取得 uploads
プレイリストIDを指定してリスト内の動画情報を取得
を行う必要がある。
APIリクエストを行うオブジェクトの作成は次のように行う。
require_once '/path/to/google-api-php-client/vendor/autoload.php';
// 1. APIリクエストを行うオブジェクトを作成
$client = new Google_Client();
$client->setDeveloperKey("_YOUR_API_KEY_");
$youtube = new Google_Service_YouTube($client);
Google_Client
オブジェクトを作成して、APIキーをセットする。メソッド名が setDeveloperKey
となっていて紛らわしいが、普通にAPIキーをセットすれば良い。
APIキーは、Google Cloud Platform の "API とサービス" → "認証情報" ページに移動して、"認証情報を作成" ボタンをクリックして、プルダウンメニューから "API キー" を選択すれば作成できる。
作成した Google_Client
オブジェクトを使って、Google_Service_YouTube
オブジェクトを作成する。Google_Service_YouTube
オブジェクトを利用すると、YouTubeサービスが提供する機能をAPI経由で操作できるようになる。
次に、対象チャンネルの uploads
プレイリストIDを取得する。
// 2. "uploads" リストのIDを取得
// https://www.youtube.com/channel/UCrXUsMBcfTVqwAS7DKg9C0Q
$channelId = "UCrXUsMBcfTVqwAS7DKg9C0Q"; // YouTube Japan
$response = $youtube->channels->listChannels('contentDetails', ['id' => $channelId]);
$item = $response['items'][0];
$uploadsListId = $item['contentDetails']['relatedPlaylists']['uploads'];
対象チャンネルの uploads
プレイリスト情報を取得するには、そのチャンネルのチャンネルIDを指定してAPIリクエストを送る必要がある。
チャンネルIDとは、チャンネルURLの末尾の英数字から成る文字列のことで、例えば、
https://www.youtube.com/channel/UCrXUsMBcfTVqwAS7DKg9C0Q
というURLの場合、UCrXUsMBcfTVqwAS7DKg9C0Q
がチャンネルIDとなる。
APIレスポンスに含める channel
リソースのプロパティには contentDetails
、フィルタのパラメータにはチャンネルIDを指定し、$youtube->channels->listChannels()
でリクエストを実行する。
レスポンスとして返ってきた channel
リソースには contentDetails.relatedPlaylists.uploads
プロパティが含まれていて、そのプロパティの値が uploads
リストのIDに該当する。
参考:
チャンネル URL について - YouTube ヘルプ
Channels: list | YouTube Data API | Google Developers
Channels | YouTube Data API | Google Developers # channelsリソースの形式と各プロパティの説明
最後に、uploads
プレイリストIDを指定してプレイリスト内の動画情報を取得する。
// 3. "uploads" リスト内のアイテムを取得
$pageToken = "";
$params = [
'playlistId' => $uploadsListId,
'maxResults' => 10
];
do {
$response = $youtube->playlistItems->listPlaylistItems('snippet', $params);
foreach ($response['items'] as $item)
{
$snippet = $item['snippet'];
echo "videoId: {$snippet['resourceId']['videoId']}\n";
// https://www.youtube.com/watch?v={$snippet['resourceId']['videoId']}
echo "title: {$snippet['title']}\n";
echo "publishedAt: {$snippet['publishedAt']}\n";
echo "----\n";
}
echo "\n";
echo "nextPageToken: {$response['nextPageToken']}\n";
echo "prevPageToken: {$response['prevPageToken']}\n";
echo "totalResults: {$response['pageInfo']['totalResults']}\n";
echo "resultsPerPage: {$response['pageInfo']['resultsPerPage']}\n";
echo "\n";
$pageToken = $response['nextPageToken'];
$params['pageToken'] = $pageToken;
sleep(1);
} while (!empty($pageToken));
APIレスポンスに含める playlistItem
リソースのプロパティに snippet
を指定して $youtube->playlistItems->listPlaylistItems()
でリクエストを行い、プレイリスト内のアイテム(この場合は動画の情報)を取得する。
その際、APIリクエストのフィルタのパラメータは下記のように設定する。
$params = [
'playlistId' => $uploadsListId,
'maxResults' => 10
];
playlistId
パラメータにプレイリストID、maxResults
パラメータには、APIレスポンスに含める playlistItems
リソースのアイテム数を指定する。デフォルト値は 5
で、最大 50
まで指定できる。
2ページ目以降など特定のページの結果を取得するには、pageToken
を指定する。pageToken
には、APIレスポンスに含まれている nextPageToken
や prevPageToken
の値を指定する。pageToken
に何も指定しないと1ページ目の結果が返される。
$params = [
'playlistId' => $uploadsListId,
'maxResults' => 10,
'pageToken' => $pageToken
];
maxResults
に10を指定した場合、リクエスト毎に最大10件のアイテムが返ってくる。各アイテムは snippet
プロパティを持ち、このプロパティを参照することで、アイテムの基本情報(動画ID、動画タイトル、追加日時など)を取得できる。
参考:
PlaylistItems: list | YouTube Data API | Google Developers
PlaylistItems | YouTube Data API | Google Developers # playlistItemsリソースの形式と各プロパティの説明