package testcase.twitter; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Map.Entry; import java.util.SortedMap; import java.util.TreeMap; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Encoder; public class OAuthHeader { private String consumer_key = ""; private String consumer_secret = ""; private String oauth_token = ""; private String oauth_secret = ""; private String method = "POST"; private String url = "https://api.twitter.com/oauth/request_token"; private SortedMap<String, String> params = new TreeMap<String, String>(); public static void main(String[] args) throws Exception { // OAuthにおいて利用する変数宣言 String consumerkey = "xPk6o11catewYwxGcXvvvqo2I"; String consumerSecret = "P9oXQstrFURXcbV8qT4OJzLjNfgYkpo1AvJzUnbywsEiDpuytb"; String oauthToken = "E7D28QAAAAAA9Im2AAABaCZ6YNc"; String oauthTokenSecret = "zdhnHCamrW3jLSb3GbwhVlnmJZsOqX1V"; String method = "POST"; String urlStr = "https://api.twitter.com/oauth/access_token"; // 共通パラメーター SortedMap<String, String> params = new TreeMap<String, String>(); params.put("oauth_consumer_key", consumerkey); params.put("oauth_signature_method", "HMAC-SHA1"); params.put("oauth_timestamp", String.valueOf(getUnixTime())); params.put("oauth_nonce", String.valueOf(Math.random())); params.put("oauth_version", "1.0"); params.put("oauth_token", oauthToken); // アクセストークン取得時にのみ利用するパラメーター // アプリケーションの許可をした場合に表示される暗証番号を設定する params.put("oauth_verifier", "暗証番号"); { /* * 署名(oauth_signature)の生成 * リクエストトークン取得時と全く同じ処理 */ String paramStr = ""; for (Entry<String, String> param : params.entrySet()) { paramStr += "&" + param.getKey() + "=" + param.getValue(); } paramStr = paramStr.substring(1); String text = method + "&" + urlEncode(urlStr) + "&" + urlEncode(paramStr); String key = urlEncode(consumerSecret) + "&" + urlEncode(oauthTokenSecret); SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1"); Mac mac = Mac.getInstance(signingKey.getAlgorithm()); mac.init(signingKey); byte[] rawHmac = mac.doFinal(text.getBytes()); String signature = new BASE64Encoder().encode(rawHmac); params.put("oauth_signature", signature); } /* * Authorizationヘッダの作成とAPIの呼び出し * リクエストトークン取得時と全く同じ処理 */ // Authorizationヘッダの作成 String paramStr = ""; for (Entry<String, String> param : params.entrySet()) { paramStr += ", " + param.getKey() + "=\"" + urlEncode(param.getValue()) + "\""; } paramStr = paramStr.substring(2); String authorizationHeader = "OAuth " + paramStr; // APIにアクセス URL url = new URL(urlStr); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod(method); connection.setRequestProperty("Authorization", authorizationHeader); connection.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream())); String response; while ((response = reader.readLine()) != null) { System.out.println(response); } } private static int getUnixTime() { return (int) (System.currentTimeMillis() / 1000L); } private static String urlEncode(String string) { try { return URLEncoder.encode(string, "UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } }