あるユーザーのYouTube動画一覧を取得する PHP/YouTube Data API (v3)

今回は、技術的な記事になります。

大半の読者の方にはサッパリわからんと言われそうですが(笑)

さてさて。あるサイトにYouTube動画一覧ページを作ります。この時、YouTubeに動画をUPして、その次にブログに動画をUP…って手間がかかりますね。ブログに貼り付けていく作業も面倒です。

動画を作るにはかなりの力を使うので、省力化できるところはしてあげたいと考えます。

ということで、指定したユーザーの動画リストを自動的に取得し、新規動画が見つかったらWordPressに自動的に投稿しようと考えました。楽チン!

「YouTubeには、動画一覧があるから、そこを使えばいいじゃないの?」と思う方は、POPの役割を考えてみてください。POPはその場に長く居てもらうことを意図します。サイトも同じです。他のサイトを開いたら戻ってこないかもしれない。集中していただきたいのです。だからサイト内に動画一覧ページを作ることは価値があると僕は信じています。
あと、動画に対してカテゴリーやタグ付けができることもメリットとして大きいですね。さらに動画に対してより詳しい説明を足すこともできるし、コメント機能を足すこともできる。
投稿者の動画が、誰に向けて、何を伝えるために、どんな目的で作られているのか考えてみると、YouTubeのみの公開だけでは接点が足りないと思うんですよ。

もちろんYouTubeにコメント機能はありますからディスカッションできるじゃんと言われたらそうなんですけど、僕らは様々なメディアを使うことは珍しくなくなっていて、発信に対する反応はあちこちに分散しがちです。それらをできるだけ集約していけたらと考えています。

 

はい。あとは、あるユーザーのYouTube動画一覧を取得するシンプルなコードを貼って終わりにします。
こうやって残しておけば自分がまた使うかもしれませんし、誰かの役に立つかもしれません。

 

// YouTubeから動画データーを取得する
function getYtItems( $pageToken ) {
	global $ytApiKey;
	global $playlistId;
	global $maxResults;
	
	$request = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&type=video&order=date&playlistId=$playlistId&maxResults=$maxResults&key=$ytApiKey";
	if ( $pageToken ) $request .= '&pageToken=' . $pageToken;
	$data = json_decode( file_get_contents( $request ) );
	
	return $data;
}

// APIキー
$ytApiKey = '●';

// ユーザー名
$userName = '●';

// 取得最大数
$latest = isset( $_REQUEST['latest'] );
$maxResults = $latest ? 10 : 50;

// ユーザーのプレイリストIDを取得
$request = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=$userName&key=$ytApiKey";
$data = json_decode( file_get_contents( $request ) );
$playlistId = $data->{'items'}[0]->{'contentDetails'}->{'relatedPlaylists'}->{'uploads'};

// ユーザーの動画リストを取得
$items = [];
$pageToken = NULL;
while ( $pageToken !== '' ) {
	$data = getYtItems( $pageToken );
	$pageToken = isset( $data->{'nextPageToken'} ) ? $data->{'nextPageToken'} : '';
	$items = array_merge( $items, $data->{'items'} );	
	if ( $latest ) break;
}

$videosData = [];
foreach ( $items as $item ) {
	$snippet = $item->{'snippet'};
	$videosData[] = [
		'title'       => $snippet->{'title'},
		'description' => $snippet->{'description'},
		'publishedAt' => strtotime( $snippet->{'publishedAt'} ),
		'thumbnails'  => $snippet->{'thumbnails'},
		'videoId'     => $snippet->{'resourceId'}->{'videoId'},
	];
}

0PEOPLE