foursqure のログの保存し方1

Google App Engine for Java 上で Twilogfoursquare 版(自分用)を OAuth 2.0 のお勉強も兼ねて作成してみることに...途中で投げ出すかも

アプリケーションの登録

  1. ログ保存アプリケーションのアプリケーション登録申請を行う
    • 「CALLBACK URL」には、OAuth 2.0 認証時に foursquare からのコールバックを受信するサーブレットのURLを指定する
  2. 「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();
		
    }
	
}