Google AppsのContactsをコマンドラインで操作しようとして試した時のメモ
まず、Contactsにしろ何にしろ、Appsの非公開(認証しないと見られない)データにアクセスしようとすると、まずはサービスをリクエストするヘッダの中に認証トークンが入っていないと認証エラーになります。
この認証トークンを取得するのが大前提です。
コマンドラインでhttpのリクエスト(postやget)ができるのはcurlやwgetがあるので、これでやってみたいと思います。
curlの場合
curl https://www.google.com/accounts/ClientLogin \–data-urlencode Email=name@domain \–data-urlencode Passwd=hoeghoge \-d accountType=GOOGLE -d source=test-apps -d service=cp
wgetの場合
wgetの場合はpostする内容を別ファイルに書いておくようです。今回はpost.txtとしてみました。
Email=name@domain&Passwd=hogehoge&service=cp&source=test-apps
こんな感じです。実際のリクエストは以下のように
wget –no-check-certificate –post-file post.txt \https://www.google.com/accounts/ClientLogin -O –
どちらの場合も、以下のようなトークンが発行されます(サンプルです)
SID=DQAAAHYBADCv2pSv7nflacDNwz3zEDUGtrSvNVDcpkSfddi77b3U5sEaHmP8YLWhmA36F9rk85mL8J5dqo4apn0T1vKz0fPGI9Xtnuet6cuE2ZzYvrNIwbSC_HjTqF4zudNQnnlDuD2wqZTg1qXI8KhGAQZV4NexHZoQPlabTsGuRZeIBxj1ALSID=EUBBBIaBADCl-kNxvRVmcQghpt3cqSMfEooKR9flLOUZqwgP9OrZS83gseKSdTNeXhxsET7FYenDhceP9lIPOmesH-t9qh-AWUHjjMdZEbUNeF9mWyzln6Z-FajaiG-cVFkqW0ZJ8ZbnCP30xXj6xFK6QxaAcqy_9Pej8jhEnxS9E61ftQGPgAuth=EUBBIacAAADK-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxsET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfagZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh
必要なのは、一番下のAuthの部分です。
serviceは今回はContacts Data APIということでcpにしていますが、別のサービスを使いたい時は別の名前を使う必要があります。一覧がhttp://code.google.com/intl/ja/apis/gdata/faq.html#clientloginにあります。
あとは、このAuthの値を、header情報として以下のように記述してリクエストをすれば認証された状態でアクセスできます。
Authorization: GoogleLogin auth=EUBBIacAAADK-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxsET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfagZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh
具体的には、curlの場合
curl --silent --header "Authorization: GOogleLogin auth=(略)" \"https://www.google.com/m8/feeds/contacts/default/full"
wgetの場合は
wget --no-check-certificate \--header "Authorization: GoogleLogin auth=(略)" \--header "Content-Type: application/atom+xml" \"https://www.google.com/m8/feeds/contacts/default/full"