Mars Phoenix の最後の Tweet を IntelliJ IDEA 8 と Twitter4J を使ってデコードする
Mars Phoenix は火星で発見したことを逐一 Twitter に報告してくれていました。
先日のバイナリデーに発せられた 最後のメッセージ、気になりますね。
どうやら8ビットで表現された文字コードが7つ並んでいる様子。
でも残念ながら私はバイト列を見ただけで文字が頭に浮かんでくるほどのスキルはありません。
なのでデコードするコードを書くことにしました。
せっかくですから登場したばかりの IDEA 8 を使いましょう。
1. プロジェクトの作成
まず、以下の順に選択してプロジェクトを作ります。
[File > New Project...]
[Create project from scratch > Next]![]()
プロジェクト作成ウィザード
折角ですから maven ベースのプロジェクトにしましょう。
Name: marsphoenix
Select type: Maven Module![]()
プロジェクト作成ウィザードその2
[Next]を押下
この画面で archetype を選ぶこともできますが、今回は空で良いので選びません。![]()
[Finish]を押下
プロジェクトができました。
mavenize されたプロジェクトらしいディレクトリ構成になっています。![]()
空のプロジェクト完成
2. クラスの作成
それでは marsphoenix/src/main/java を右クリックして新しいクラスを作ります。
右クリックメニューより New > Class を選択![]()
最後の発言をデコードする、という意味でクラス名は DecodeLastTweet とします。![]()
クラス名を入力
空のクラスができあがりました
3. Twitter4J の利用
最後のメッセージ、ハードコードしても良いですがせっかくですから Twitter4J 経由で Twitter API から直接取り出してみましょう。
Twitter4J を使うため、まず main メソッド内で Twitter クラスをインスタンス化してみます。
public static void main(String[] args){
Twitter twitter = new Twitter("userid","password");
}あれ、Twitter クラスが赤くなりました。
Twitter クラスに警告が!
Twitter クラスを import していないどころか、ライブラリをコンパイルパスにすら通していないためですね。シンボルを解決できるわけがありません。
こういうときは赤くなっている部分にカーソルを動かしてあげると・・・
ピンと来たよ!
ひらめいた! 感じのマークが表示されます。
こいつをクリックしてあげると空気を読んだアクションの選択肢が現れます。
あなたのやりたいことは・・これ?
選択肢の中には、Add Maven Dependency というのがあるではないですか!すばらしい!
これを選択すると、以下のようなダイアログが現れます。
Dependency の選択ダイアログ
ここは最新版のバージョン 1.0.0 を選択してみましょう。
すると pom.xml への dependency の追加、twitter4j.Twitter クラスの import まで全自動でやってくれます。
賢い!
pom.xml の自動編集、import の自動追加
4. ステータスの取得
次はステータスの取得をしてみましょう。彼女の最後の Tweet の id は 999383469 なので、以下のように書きます。
Status status = twitter.show(999383469);
もちろん、自動的に Status クラスをパッケージを判別して import 文を書いてくれました。
が、show メソッドは TwitterException を throw するのでキャッチするか main メソッドで throw するよう宣言しなくてはいけないよと教えてくれます。
import は書いてくれた、さて try - catch するか、メソッドで投げるか・・・
今回はトイプログラムなので後者(Add Exception(s) to Method Signature を選択しました。
throw 宣言を書いてくれたところ
5. プログラムを完成させる
残りは
・スペース区切りで配列に変換
・Stringで表現された二進数を int 型に変換
・char 型にキャスト
・プリント
という処理を一気に書きます。
public class DecodeLastTweet {
public static void main(String[] args) throws TwitterException {
Twitter twitter = new Twitter("yourid", "password");
Status status = twitter.show(999383469);
String text = status.getText();
String[] split = text.split(" ");
for (String token : split) {
try {
System.out.print((char) Integer.parseInt(token, 2));
} catch (NumberFormatException ignore) {}
}
}
}完成したコード
NumberFormatException をキャッチしているのはメッセージの最後に二進数表記でない文字列が含まれているからです。
6. 実行
さぁ、実行しましょう。
main メソッドがあることは勝手に認識してくれているので、実行は一般的な緑色の Play ボタンを押すだけ。
実行結果
・まとめ
折角ですから肝心のメッセージの部分は伏せておきました。日本語で言うと「上手くいったよ♥」的な意味ですね。
ソースコードを置いておきますので、興味のある方はご自分で動かしてみてください。ライセンスは BSD とします。
併せて IntelliJ IDEA の痒いところに手が届く、いやそれどころかそもそも痒くもならない便利さも垣間見ていただけたでしょうか?
無償で強力な IDE として Eclipse が台頭している中、イマドキ有償の IDE ですがお金を払う価値は十分にあります。
でも残業代を稼ぎたい方にはお勧めしません。

オープンソース開発には無償でライセンスを提供してくれる仕組みもあります。
関連記事:
・マロマゴ: Mars Phoenix の最後の Tweet を Python と python-twitter を使ってデコードする
Pythonでも解析!
・Decoding the Mars Phoenix's last Tweet using Twitter4J on IntelliJ IDEA 8(英語版)
・[IDEA] - marsのメモ
・IDEA 8 リリース - 侍ズム
| Tweet |
