JavaのHTTPライブラリでTwiter API取得

liquidfunc2010-05-19


HTTP通信用のAPI、HttpURLConnectionを使ったサンプルコードです。
Twitterのpublic_timelineというAPIは、その名の通りパブリックタイムライン(Twitterの全ユーザーの公開つぶやき一覧)を取得するAPIですが、OAuth等の認証が不要なため、サンプルコードにちょうど良いです。

import static java.io.File.separator;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Twitter {

	// ※注 これはMac用のパスなのでWindowsなら"Desktop"を"デスクトップ"に変えると多分うまくいく
	public static final String DESKTOP = System.getProperty("user.home") + separator + "Desktop" + separator;
	public static final String URL_PUBLIC_TIMELINE = "http://api.twitter.com/1/statuses/public_timeline.xml";

	public static void main(String[] args) throws IOException {
		Twitter twitter = new Twitter();
		twitter.outputPublicTimelineXML();
	}

	// public_timelineをXMLで出力
	public void outputPublicTimelineXML() throws IOException {
		URL url = new URL(URL_PUBLIC_TIMELINE);
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		connection.setRequestMethod("GET");
		//connection.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");

		// 接続
		connection.connect();

		//// レスポンスヘッダ出力
		//Map<String, List<String>> headerMap = connection.getHeaderFields();
		//Set<String> keys = headerMap.keySet();
		//for (String key : keys) {
		//	List<String> list = headerMap.get(key);
		//	System.out.println(key + ": " + list);
		//}

		// ステータスコード&テキストフレーズ出力
		int code = connection.getResponseCode();
		String message = connection.getResponseMessage();
		System.out.println(code + " " + message);

		// ファイル出力
		outputFile(DESKTOP, connection.getInputStream());

		// 切断
		connection.disconnect();
	}

	// InputStreamからファイル出力
	public void outputFile(String path, InputStream input) throws IOException {
		File file = new File(path + "public_timeline.xml");
		BufferedReader br = new BufferedReader(new InputStreamReader(input));
		BufferedWriter bw = new BufferedWriter(new FileWriter(file));
		while (br.ready()) {
			String line = br.readLine();
			bw.write(line);
		}
		if (br != null) br.close();
		if (bw != null) bw.close();
	}
}


Twitterは、XMLまたはJSON形式でリソースを取得できます。あとはパーサー自分で作るかライブラリ探してくるかして、本当に必要な文字列だけ取得すればTwitterクライアントが作れます。そこが一番面倒なんだろうけど。
ちなみに、"レスポンスヘッダ"とか"ステータスコード"とか"テキストフレーズ"とか、"Accept-Language"とかの用語をみてチンプンカンプンな人は、HTTPの仕様を少しだけ学ぶ必要があります。いまなら「Webを支える技術」がベストですね。


Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)