ブルーシュ

IT技術の勉強記録

ホーム > Tips > Google API

【YouTube Data API】ユーザーがアップロードした動画を取得する

,

サンプルコードの概要

YouTube Data APIを使って、ユーザーがアップロードした動画を取得します。
 
これまでのサンプルコードはAPIキーを使って情報を取得していました。今回はクライアントキーとクライアントシークレットを使ってOAuthを行います。
これまでのサンプルコード一覧:Google APIの記事一覧
 

下準備

まずは、

をごらんください。
 
【PHPで】Google APIの始め方の冒頭【1】でAPIキーを取得していますが、今回はクライアントキーとクライアントシークレットが必要になります。
「APIとサービス」⇒「認証情報」⇒「+認証情報を作成」⇒「OAuthクライアントID」から取得してください。
「アプリケーションの種類」は「ウェブアプリケーション」。
「承認済みのリダイレクト URI」は、取得した動画を表示するURLを入力します。
承認済みのリダイレクトURIの入力画面

さらに、「OAuth同意画面」をクリックします。
作成済みのアプリの「公開ステータス」を「テスト」のまま運用する場合は、テストユーザーを登録してください。

サンプルコード

<?php
if (!file_exists(__DIR__ . '/vendor/autoload.php')) {
	throw new \Exception('please run "composer require google/apiclient:~2.0" in "' . __DIR__ .'"');
}
require_once __DIR__ . '/vendor/autoload.php';
if(!session_start()){
	echo "<p>セッションが開始できません。</p>";
	return;
}

$OAUTH2_CLIENT_ID = 'クライアントキーをここに入れる';
$OAUTH2_CLIENT_SECRET = 'クライアントシークレットをここに入れる';

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('https://www.googleapis.com/auth/youtube');
$redirect = "ユーザーログイン後に取得した動画を表示させたいURL";
$client->setRedirectUri($redirect);

$youtube = new Google_Service_YouTube($client);

// Check if an auth token exists for the required scopes
$tokenSessionKey = 'token-' . $client->prepareScopes();
if (isset($_GET['code'])) {
	if(strval($_SESSION['state']) !== strval($_GET['state'])) {
		echo "<p>セッションが一致しません。</p>";
		return;
	}

	$client->authenticate($_GET['code']);
	$_SESSION[$tokenSessionKey] = $client->getAccessToken();
	header('Location: ' . $redirect);
}

if (isset($_SESSION[$tokenSessionKey])) {
	$client->setAccessToken($_SESSION[$tokenSessionKey]);
}


// Check to ensure that the access token was successfully acquired.
if ($client->getAccessToken()) {

	try {
		$condition = array(
			'forMine'	=> true,
			'type'	=> 'video',
			'maxResults'=> 50
		);

		$html = "";

		do{
			$searchResponse = $youtube->search->listSearch('id,snippet', $condition);

			if($searchResponse->pageInfo->totalResults === 0){
				noresults($client);
				continue;
			}

			foreach ($searchResponse['items'] as $searchResult) {
				$snippet = $searchResult['snippet'];
				$video_id = $searchResult["id"]["videoId"];
				$thum = $snippet["thumbnails"]["high"]["url"];

				$url = "https://www.youtube.com/watch?v={$video_id}";

				$html .= "<a href='{$url}'>
					<img class='thum' src='{$thum}' width='480' height='360'>
					<p>{$snippet["title"]}</p>
				</a>";
			}

			$condition["pageToken"] = $searchResponse["nextPageToken"];

		} while($searchResponse["nextPageToken"]);
		//次のページがなくなるまで繰り返す

		echo $html;

		$_SESSION[$tokenSessionKey] = $client->getAccessToken();

	} catch (Google_Service_Exception $e) {
		echo "<p>サービスエラー発生<br>".htmlspecialchars($e->getMessage()) . "</p>";
		return;
	} catch (Google_Exception $e) {
		echo "<p>クライアントエラー発生<br>".htmlspecialchars($e->getMessage()) . "</p>";
		return;
	}

} elseif ($OAUTH2_CLIENT_ID == 'REPLACE_ME') {
		echo "<p>プログラムを実行する前にクライアントIDをセットしてください。</p>";
		return;
} else {
	//ユーザーが認証していない場合
	$state = mt_rand();
	$client->setState($state);
	$_SESSION['state'] = $state;

	$authUrl = $client->createAuthUrl();
	echo "<p>下のボタンをクリックして、Googleアカウントでログインしてください。<br>アップロード済みの動画を取得します。</p><a href='{$authUrl}' class=''><img src='img/button-google.png' width='191' height='46'></a>";
}

セッションについて

WordPressなどに組み込む場合、ページテンプレートから上記のサンプルコードを呼び出す事があると思います。エラーになる場合は、呼び出し元のファイルの1行目でセッションを開始してみてください。

クライアントキーとクライアントシークレットをコピペ

$OAUTH2_CLIENT_ID$OAUTH2_CLIENT_SECRETには、「下準備」で取得したクライアントキーとクライアントシークレットをコピペしてください。

リダイレクトURLをコピペ

$redirectには、「下準備」で登録した「承認済みのリダイレクト URI」で置き換えてください。

テスト画面

テスト画面にアクセスしてみます。
ログイン前なので、サンプルコード最下部にある、ログインするためのリンクが表示されています。クリックすると、別ウィンドウでGoogleのログイン画面が表示されます。
ログイン画面

「下準備」にて、アプリの「公開ステータス」を「テスト」のまま運用している場合、テストユーザーとして登録済みのアカウントでログインしてください。
登録してないアカウントでログインするとエラーになります。
 
画面に従って進めていくと、このような画面になります。

「続行」をクリックします。
さらに次の画面で「許可」をクリックします。

動画が表示されました。

ログアウト

ログアウトしたい場合は以下のようにします。

//Reset OAuth access token
$client->revokeToken();
//Destroy entire session data.
session_destroy();
//redirect page to index.php
header('Location: ' . $redirect);
【YouTube Data API】ユーザーがアップロードした動画を取得する #Google API #ウェブデザイン #ウェブ制作 #WEBデザイン #WEB制作 #動画 #YouTube

作者の似顔絵

プログラミング歴19年🌈調べたことをブログにまとめていきます。
記事の感想・質問・間違い指摘などはツイッター ( @blooshcompany ) へお願いします。

秋田のウェブ活用をサポート

ホームページを自作してコスト削減!秋田の事業者は無料で利用できます。
ネットショップ・WordPress・SEO対策などさまざまなお悩みをサポートします。

その他、フロントエンド案件のご依頼はインフォメーション

秋田市 レンタル着物 笹パンダ堂のバナーリンク