*

【google apis】Zend_GdataでYouTube認証を行う

公開日: : google apis

YouTube Data Apiでユーザーのプレイリストにアクセスする場合、ユーザーにアプリケーションを認可してもらう必要があります。
今回はロリポップ!で使えるPHPのZend_GdataでOAuthを利用します。
※参考URLのまとめエントリですので詳細はリンク先をご覧下さい。

Zend_Gdataで認可を行う場合、AuthSubとClientLoginの2つの方法がありますが
AuthSub → Webアプリケーション
ClientLogin → インストールアプリケーション
なので今回はAuthSubを使用します。

※2012/5/11現在AuthSubは廃止予定です。
すぐに使えなくなるわけではなさそうですが今後はOAuth2.0を使う方がよさそうです。
が、Zend_GdataでOAuth2.0を使ったアクセストークンの取得方法がないので、しばらくはAuthSubを使いながら様子をみてみることにします。

まとめ

要するにこんな感じで書きます。

session_start();

	//YouTubeApiをインクルード
	require_once 'Zend/Loader.php';
	Zend_Loader::loadClass('Zend_Gdata_YouTube');
	
	//認証クラスをインクルード
	Zend_Loader::loadClass('Zend_Gdata_AuthSub');

	function getAuthSubHttpClient()
	{
	    if (!isset($_SESSION['sessionToken']) && !isset($_GET['token']) ){
	        echo '<a class="btn btn-primary btn-large" href="' . getAuthSubRequestUrl() . '">ログイン</a>';
	        return;
	    } else if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) {
	      $_SESSION['sessionToken'] = Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
	    }
	
	    $httpClient = Zend_Gdata_AuthSub::getHttpClient($_SESSION['sessionToken']);
	    $httpClient->setHeaders('X-GData-Key', "key=${developerKey}");
	    return $httpClient;
	}
	//AuthSubリクエスト
	function getAuthSubRequestUrl(){
		$next = 'http://tubejockey.snow69it.com/';
		$scope = 'http://gdata.youtube.com';
		$secure = false;
		$session = true;
		return Zend_Gdata_AuthSub::getAuthSubTokenUri($next, $scope, $secure, $session);
	}

        //youtubeサービスオブジェクトを生成
	$client = getAuthSubHttpClient();
	$client ->setHeaders('X-GData-Key', "key=${developerKey}");

	$yt = new Zend_Gdata_YouTube($client);

目次

  1. GoogleCodeのデベロッパーキーを取得
  2. Googleにドメインを登録
  3. single-use tokenを取得
  4. session tokenを取得

参考URL

  1. Developer’s Guide: PHP

GoogleCodeのデベロッパーキーを取得

事前準備としてデベロッパキーの取得を行います。youtubeのユーザーデータにアクセスするために必要となります。

googleにドメインを登録

googleにドメインを登録します。
これはオプションですが、認証画面でgoogleに登録している旨が表示されるので、これをやっておくとユーザーが認証しやすくなると思います。
さらに認証局の証明書の登録をするとより安全をアピールできますが、今回は割愛します。

ZendのGdata_AuthSubクラスをインポート

YouTubeとAuthSubクラスをインポートします。

//YouTubeApiをインクルード
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');

//認証クラスをインクルード
Zend_Loader::loadClass('Zend_Gdata_AuthSub');

single-use tokenを取得

まずはsingle-use tokenを取得します。
これはその名の通り1度しか使えないトークンになるので、取得した後session tokenを取得する必要があります。
【手順】
1.googleの認可画面のURLを取得
2.ユーザーが認可
3.リダイレクトしたURLのGETパラーメータにトークンが格納されている。「?token=トークン」

function getAuthSubRequestUrl(){
	$next = 'http://tubejockey.snow69it.com/';//認可後にリダイレクトするURL
	$scope = 'http://gdata.youtube.com';//認可してもらうサービスのURL
	$secure = false;//セキュアトークンの取得。ここではfalse。
	$session = true;//このあとセッショントークンを取得するか。
	return Zend_Gdata_AuthSub::getAuthSubTokenUri($next, $scope, $secure, $session);
}
echo '<a class="btn btn-primary btn-large" href="' . getAuthSubRequestUrl() . '">ログイン</a>';

session tokenを取得

取得したsingle-use tokenをもとにsession tokenを取得します。
このトークンはセッション変数に記録することで繰り返し使用することも、任意のタイミングで破棄(=ログアウト)することもできます。

$_SESSION['sessionToken'] = Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);

認可済みのyoutubeサービスオブジェクトを取得する

session tokenとデベロッパーIDをもとにgdataHttpClientオブジェクトを生成し、YouTubeサービスのコンストラクタの引数とします。
このようにして生成されたYouTubeサービスオブジェクトを使用すると、動画のアップロード及びユーザー固有の情報の取得や編集を行うことができるようになります。

$httpClient = Zend_Gdata_AuthSub::getHttpClient($_SESSION['sessionToken']);
$httpClient->setHeaders('X-GData-Key', "key=${developerKey}");//デベロッパーID

$yt = new Zend_Gdata_YouTube($httpClient);

関連記事

no image

【google apis】GCM の使い方1 ~Getting Start~

この記事はGCMのGetting Startの要約です。 参考URL ・はじめに G

記事を読む

no image

【google apis】GCM の使い方2 ~GCM Architectural Overview~

前回に引き続きGCMの使い方です。   前回:【google apis】GCM の使い方1 ~

記事を読む

no image

【google apis】GoogleのアカウントでAOuthを行う

GoogleのAOuthを使う方法です。 サマリー 目次 サイトのURL、リダイレクトする

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

no image
知らないと損をする6つのライセンスまとめ

オープンソースやフリーウェア、フリー素材などが巷に溢れ、それらを利用す

no image
ガリレオ:ニュースブラウザをリリースしました。

概要 ガリレオはニュースを読んだり、検索する機能に特化したブラウザア

no image
【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサ

→もっと見る

PAGE TOP ↑