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 を閉じる