foursquare
2011年08月16日
【はじめに】
2011年8月1日から、foursquareの旧APIの利用が停止され、新APIのみが利用可能となった。ところでこのfoursquareの新APIでは、OAuth2という認証方法が採用されている。
参考:OAuth 2.0でWebサービスの利用方法はどう変わるか(1/3)- @IT
そもそもOAuthというのは、foursquareやTwitterなどのWebサービスが、関連サービスに認証情報を預けるための機構である。OAuthがなければ、Twitter関連サービス(例えば、活動をTwitterに通知する機能を持つWebサービス)を利用する際、そのサービスにTwitterのユーザ名とパスワードを教える必要があり、セキュリティ上の問題となっていた。OAuthを用いると、そのサービスにはパスワードの代わりに別の認証用文字列が渡り、それを用いることでTwitterの機能を利用することが出来るのである。
参考:APIアクセス権を委譲するプロトコル、OAuthを知る − @IT
さて従来型のOAuthは、通信の手順が煩雑であり、プログラム言語や環境に応じたライブラリを経由して利用するのが普通であった。一方でOAuth2はこの手順が大幅に簡略化され、通信回数、引き渡すパラメータ数ともに非常に少なくなっている。
参考:Authentication - API Documentation | foursquare Developers
WindowsMobile向けfoursquareクライアント「Quick4sq」の新API対応版を作るにあたり、OAuth2をC#で実装したので、そのサンプルコードを配布させていただく。
【ソースコード】
http://maraigue.hhiro.net/quick4sq/oauth2sample.zip
念のためMIT Licenseとしておきますが、使っていただくにあたり「転用時に出典元を示す」のみでも十分です。なお同梱のLitJSON(後述)については、パブリックドメインとなっております。
【必要なもの】
- (当然ですが)foursquareのアカウント
- Webサーバ(レンタルサーバの適当な場所に空のHTMLを置いておき、そのURLを控えておく。なければブログ等のURLでもOKだが、その場合なるべく軽いページがよい)
- Visual Studio 2008 (2010で動くかは検証していません。もしソリューションファイルを直接開けないようでしたら、ソースファイルを直接プロジェクトに追加して下さい。なお配布のファイルは.NET framework 2.0を指定してあります。)
【1:アプリケーションを登録する】
(1) https://ja.foursquare.com/oauth/にアクセスする。
(2) 「REGISTER A NEW CONSUMER」に進むと、以下のような画面が現れる。
「APPLICATION NAME」(アプリ名)、「APPLICATION WEB SITE」(アプリのウェブサイト)は適当に指定する。「CALLBACK URL」が重要で、ここに先程の空のHTMLにアクセスするURLを指定する。例えばQuick4sqでは「http://maraigue.hhiro.net/dummy/」を指定している。
いずれも、後で変更することは可能である。
(3) 登録が完了すると、「CALLBACK URL」「CLIENT ID」「CLIENT SECRET」の3つの情報が表示される。「CALLBACK URL」は先程登録した通りである。「CLIENT ID」「CLIENT SECRET」の2つが、そのアプリに割り当てられたランダムな文字列である。今回はこのうち「CLIENT ID」が必要となる。
【2:foursquareにアクセスする】
配布したコードの「Form1.cs」中に、「CALLBACK URL」と「CLIENT ID」を記入する場所があるので、そこに今表示されたものを記入する。あとはそのコードを実行すれば、OAuth2による認証・トークン取得と、それを用いたfoursquare APIへのアクセス(今回は、認証されたユーザがどんな名前でfoursquareに登録しているかを取得するのみ)を試すことができる。
なお、foursquare APIは返り値をJSON形式で返すのだが、JSONを取り扱うライブラリとして今回はLitJSONを利用させていただいた。これは新規にJSONのパラメータが増えてもソースコードの修正が不要なため、外部サービスのAPIを取り扱う上で都合がよいこと、またソースコードの微小な修正で.NET Compact Framework(WindowsMobile等向け)に対応できるためである。
【おわりに】
OAuthはプログラマ泣かせと言えるほど複雑な仕様だったのですが、OAuth2はユーザの使い勝手を保ちつつ、プログラマへの優しさもかなり向上しました。もっと流行ってほしいです。


