Twitterクライアント作成

仕事でも趣味でも僕がメインで使っている言語はJavaですが、ネットワークとかGUIとかのプログラムはまともに書いたことがなくて、知識が狭いなあと思っています。コアパッケージで言うと、java.langとjava.utilとjava.textくらいしかまともに触っていません。このままじゃいかん、少しは実用になるものを作ろうということで、簡単なTwitterクライアントを作り始めてみました。Twitterのサイトを開くのも重いことだし。
TwitterAPIはここにあります。http://apiwiki.twitter.com/REST+API+Documentation
激しく車輪の再発明であろうことは容易に想像が付きますが、主に学習目的というわけでその辺は気にしないことで。


初めてjava.netあたりのパッケージの中を見たんですが、おそらく汎用性のために抽象度が高い作りになっていて、なかなか複雑です。RubyのHTTPモジュールは少し見たことがあるのでそのノリで考えてたら、しょっぱなから心がくじけそうに。「HTTPリクエストを投げる」というだけでも、すぐにはどうやるのか見当が付かない。

API深読み・検索・推測・試行錯誤などごにょごにょやってたら、コマンドラインでいちおう動くものはできました。コマンドライン引数をメッセージにして投稿します。でもネットワーク接続ってcloseとかしなくていいのかな? よくわからん。勉強しないと。


エラー処理とか投稿できたことの確認とかをもう少しちゃんとやって、その次はUIの作成ですな。

import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class TwitterClient {

    static {
        // Basic認証のため
        Authenticator.setDefault(new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("username", "password"
                        .toCharArray());
            }
        });
    }

    public static void main(String[] args) {
        if (args.length != 1) {
            System.out.println("引数にメッセージを渡す");
            System.exit(-1);
        }
        try {
            String u = "http://twitter.com/statuses/update.xml?status="
                    + URLEncoder.encode(args[0], "utf-8");
            URL url = new URL(u);
            URLConnection connection = url.openConnection();
            if (!(connection instanceof HttpURLConnection)) {
                System.out.println("HTTPスキームじゃない?");
                System.exit(-1);
            }
            ((HttpURLConnection) connection).setRequestMethod("POST");
            connection.connect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}