Twitterクライアント作成
仕事でも趣味でも僕がメインで使っている言語はJavaですが、ネットワークとかGUIとかのプログラムはまともに書いたことがなくて、知識が狭いなあと思っています。コアパッケージで言うと、java.langとjava.utilとjava.textくらいしかまともに触っていません。このままじゃいかん、少しは実用になるものを作ろうということで、簡単なTwitterクライアントを作り始めてみました。Twitterのサイトを開くのも重いことだし。
TwitterのAPIはここにあります。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(); } } }