Google は、サービスを利用するためのさまざまな API を提供しています。たとえば、Google Contacts API は、使う前に権限を取得しておく必要があります。この記事で紹介する ClientLogin は、権限を取得する方法の中で個人的に最も簡単だと思うものです。仕組みもシンプルで、http 経由でアカウント名とパスワードを Google に送ると、Google が認証コードを含むデータを返してくれます。その認証コードを使えば、連絡先、カレンダー、ノートブックなど、Google のさまざまなサービスにアクセスできます。

ClientLogin は、デスクトップアプリやモバイルアプリに向いています。ほかの認証方式と違って認証ページを開く必要がないので、アカウント名とパスワードを入力するログイン画面を自由に設計できます。ただし、この方式には欠点もあります。ユーザーは、フィッシングサイトではないかと疑ってしまうため、パスワードを入力したがらないかもしれません……

ClientLogin の基礎知識

リクエストの形式:

GET https://www.google.com/accounts/ClientLogin?accountType=A&Email=B&Passwd=C&service=D

上の行は、http プロトコルで GET を送信するという意味です。大文字と小文字は区別されるので注意してください。

パラメーターの説明:

  • accountType:権限を取得するアカウントの種類です。HOSTED_OR_GOOGLE を使うのが最も安全です。選択できる値は GOOGLE、HOSTED、HOSTED_OR_GOOGLE です。
  • Email:権限を取得するアカウントです。@ より後ろの部分も含める必要があります。私の場合の例は linroex@gmail.com です。
  • Passwd:ユーザーのパスワードです。
  • service:利用するサービスのコードです。たとえば Google カレンダーの権限を取得したい場合は、ここに cl と入力します。各サービスのコードは Google Code で確認できます。
  • source:省略可能です。Google がサービスにアクセスした人を記録するためだけに使われます。
例:
https://www.google.com/accounts/ClientLogin?accountType=GOOGLE&Email=admin@gmail.com&Passwd=123456789&service=cl
戻り値の説明:

通常、ClientLogin の戻り値には SID、LSID、Auth の3つの値が含まれるはずです。このうち Auth が認証コードで、Auth を使えば他の Google サービスにアクセスできます。ただし、認証に失敗した場合は、別のコードが返されます。それぞれのコードの意味は、以下で説明します。

  • BadAuthentication:アカウント名またはパスワードが正しくありません
  • NotVerified:このアカウントはまだ認証されていません
  • CaptchaRequired:CAPTCHA が不足しています
  • Unknown:不明なエラー
  • AccountDeleted:このユーザーは削除されています
  • AccountDisabled:このユーザーは無効化されています
  • ServiceDisabled:指定された Google サービスは存在しません
  • ServiceUnavailable:指定されたサービスに接続できません。しばらくしてから再度お試しください

PHP ClientLogin のサンプル

ダウンロード先:Box.net|Dropbox|Google|4Shared

コード:

	$connect=curl_init();		//curl を作成
	$user="linroex@gmail.com";		//アカウントを設定
	$passwd="";		//パスワードを設定
	$service="cl";			//認証するサービスを設定
	curl_setopt($connect,CURLOPT_URL,"https://www.google.com/accounts/ClientLogin?accountType=HOSTED_OR_GOOGLE&Email=$user&Passwd=$passwd&service=$service");
	curl_setopt($connect,CURLOPT_RETURNTRANSFER,true);			//データを文字列として返すよう設定
	curl_setopt($connect, CURLOPT_SSL_VERIFYHOST, true);		//SSL 接続を使用
	curl_setopt($connect, CURLOPT_SSL_VERIFYPEER, false);		//SSL 接続を使用
	$re=curl_exec($connect);		//接続を行い、戻り値を $re に格納
	$re=explode("n",$re);		//データを解析
	echo $re[2];		//Auth を表示
	curl_close($connect);		//curl を閉じる