foursqure のログの保存し方1
Google App Engine for Java 上で Twilog の foursquare 版(自分用)を OAuth 2.0 のお勉強も兼ねて作成してみることに...途中で投げ出すかも
アプリケーションの登録
- ログ保存アプリケーションのアプリケーション登録申請を行う
- 「CALLBACK URL」には、OAuth 2.0 認証時に foursquare からのコールバックを受信するサーブレットのURLを指定する
- 「CLIENT ID」と「CLIENT SECRET」を保存する
認証画面へのリダイレクト
Authentication - foursquare APIv2 の「2. Obtain an access token」を参考に認証画面へリダイレクトするサーブレットを作成
import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") public class Signin4sqServlet extends HttpServlet { private final static String CALLBACK_URL = "{CALLBACK URL}"; private final static String CLIENT_ID = "{CLIENT ID}"; public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { String url = "https://ja.foursquare.com/oauth2/authorize"; url += "?client_id=" + CLIENT_ID; url += "&response_type=code"; url += "&redirect_uri=" + CALLBACK_URL; res.sendRedirect(url); } }
HTTP GET リクエストの送信
Google App Engine for Java 上では java.net.Socket の実装がないため HttpClient が使えないっぽ、そこでHTTP GET リクエストを送信するユーティリティを作成
import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class HttpGet { private URL url_; private HttpURLConnection con_; private InputStream in_; public HttpGet(String url) throws MalformedURLException { url_ = new URL(url); } public void open() throws IOException { if(con_ != null) { return; } con_ = (HttpURLConnection) url_.openConnection(); con_.setRequestProperty("Content-type", "text/xml"); con_.setRequestMethod("GET"); con_.setConnectTimeout(60000); } public void close() throws IOException { if(in_ != null) { in_.close(); in_ = null; } if(con_ != null) { con_.disconnect(); con_ = null; } } public InputStream execute() throws IOException { this.open(); in_ = con_.getInputStream(); return in_; } }
アクセストークンの取得
Authentication - foursquare APIv2 の「2. Obtain an access token」を参考に foursquare からのコールバックを受信してアクセストークンを取得するサーブレット(アプリケーションの登録の際に「CALLBACK URL」で指定したサーブレット)を作成、JSON の解析には JSONIC を利用
import java.io.IOException; import java.util.Map; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.arnx.jsonic.JSON; @SuppressWarnings("serial") public class Callback4sqServlet extends HttpServlet { private final static String CALLBACK_URL = "{CALLBACK URL}"; private final static String CLIENT_ID = "{CLIENT ID}"; private final static String CLIENT_SECRET = "{CLIENT SECRET}"; public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { String code = req.getParameter("code"); String accessToken = _getAccessToken(code); } private String _getAccessToken(String code) throws IOException { String url = "https://ja.foursquare.com/oauth2/access_token"; url += "?client_id=" + CLIENT_ID; url += "&client_secret=" + CLIENT_SECRET; url += "&grant_type=authorization_code"; url += "&redirect_uri=" + CALLBACK_URL; url += "&code=" + code; HttpGet httpGet = new HttpGet(url); Map map = (Map)JSON.decode(httpGet.execute()); httpGet.close(); return map.get("access_token").toString(); } }