はじめに
この記事では、Twitter4j APIを使ってTwitterアプリケーションをJavaで自作する方法を簡単に説明します。Twitter4jは、TwitterインフラストラクチャにアクセスできるAPIです。ステータスの更新、フォロワーのリストの取得など、さまざまな便利なタスクをJavaプログラムから実行できます。
以降の説明はJavaとSwing GUIの知識があることを前提に書かれています。この記事が目指しているのは、Swingをビューテクノロジとして使う簡易なデスクトップアプリケーションを作成することです。以下の機能を実装していきます。
- ポップアップを使ってログインする
- フォロワーを表示する
- 表示を更新する
- Twitter上のステータスを更新する(つぶやきを送る)
- つぶやきを検索する
- ダイレクトメッセージを送る
これは、独自のアプリケーションを作るための骨格として利用できます。想像力を駆使し、ここで作成するサンプルに自由に装飾を加えてみてください。使用できるビューテクノロジはほかにもJSPなどがありますが、Swingに決めたのは、説明の必要なトピックを増やさずに済むからです。
現在、Java Twitter APIには、Twitter4J(開発Yusuke Yamamoto氏)、Java-Twitter(同DeWitt Clinton氏)、JTwitter(同Daniel Winterstein氏)の3つがあります。この記事を書いている時点で、Twitter4Jはバージョン2.0.8、Java-Twitterはバージョン0.9、JTwitterはバージョン1.2です。今回は最も熟成が進んでいるTwitter4Jを使用します。
作業に入る前に、Twitterアカウントを取得してください。3分もあれば手続きは完了するでしょう。以降で説明する内容を理解するには、Twitterの基礎知識も必要です。つぶやき、他人をフォローする、ダイレクトメッセージを送る、こういった概念をもう一度確認してから、次に進みましょう!
Twitter4J API
Twitter4Jをhttp://repo1.maven.org/maven2/net/homeip/yusuke/twitter4j/からダウンロードします。また、非常に役に立つJavadocsも同じ場所から入手できます。いつもどおり、クラスパスを.jarファイルに設定します。以下は、Twitter4Jを使用するセッションの例です。
import twitter4j.*;
public class Test {
public static void main(String[] args) throws TwitterException {
Twitter twitter = new Twitter("username", "password"); // サービスへログイン
twitter.updateStatus("Tweeting!"); // ステータスを更新
}
}
このコードでは、まずtwitter4jクラスをインポートします。mainメソッド内で、Twitterクラスのインスタンスを作成します。ユーザー名とパスワードは、文字列としてコンストラクタに渡します。ログインに成功したら、ユーザーのステータスを更新するためにupdateStatusメソッドを呼び出します。ステータスが更新されたかは、Twitterアカウントにログインすると確認できます。
何をするにせよログインは必須なので、このアプリケーションではログイン用のデータを入力するためのダイアログを最初に表示する必要があります。このダイアログには、ユーザーの気が変わった場合にも対応するため、2つのJLabel、1つのJTextField、1つのJPasswordField、1つの確認用JButton、および1つのキャンセル用JButtonを用意します。コードをすっきりさせたいので、ログインダイアログ用のクラスを作成します。
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.*;
class LoginDialog extends JDialog implements ActionListener {
JLabel labelName;
JLabel labelPass;
JTextField textName;
JPasswordField passField;
JButton okButton;
JButton cancelButton;
JDialog dialog;
public LoginDialog() {
JPanel panelOne = new JPanel();
labelName = new JLabel("Name");
textName = new JTextField(15);
panelOne.add(labelName);
panelOne.add(textName);
JPanel panelTwo = new JPanel();
labelPass = new JLabel("Password");
passField = new JPasswordField(15);
panelTwo.add(labelPass);
panelTwo.add(passField);
JPanel panelThree = new JPanel();
okButton = new JButton("OK");
cancelButton = new JButton("Cancel");
okButton.addActionListener(this);
cancelButton.addActionListener(this);
panelThree.add(okButton);
panelThree.add(cancelButton);
dialog = new JDialog();
dialog.setResizable(false);
dialog.getContentPane().add(panelOne);
dialog.getContentPane().add(panelTwo);
dialog.getContentPane().add(panelThree);
dialog.setTitle("Login in to Twitter");
dialog.getContentPane().setLayout(new FlowLayout());
dialog.setSize(350, 150);
dialog.setLocationRelativeTo(null); // 画面の中央に配置
dialog.setModal(true);
dialog.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == okButton) {
dialog.dispose();
} else if (e.getSource() == cancelButton) {
System.exit(0);
}
}
public String getUserName() {
return textName.getText();
}
public String getPassword() {
return String.valueOf(passField.getPassword());
}
}
ここまでは単純明快、古式ゆかしきJavaコードです。ここではFlowLayoutを使用しています。これは、JDialogを継承します。ここに実装した動作は、[OK]ボタンがクリックされたらダイアログウィンドウを閉じ、[Cancel]ボタンがクリックされたらプログラムを丸ごと終了する、というものです。getterメソッドとして、getUserName()とgetPassword()の2つを使用します。[OK]ボタンがクリックされたら、getterメソッドを通して情報を渡します。実際のログインはmainプログラムで処理され、そこにあるTwitterインスタンスが必要に応じて受け渡しされます。この仕組みをテストするには、次のようなmainメソッドを上記のクラスに追加します。
public static void main(String[] args) throws TwitterException{
LoginDialog login = new LoginDialog();
String userName = login.getUserName();
String password = login.getPassword();
try{
Twitter twitter = new Twitter(userName, password);
twitter.verifyCredentials();
JOptionPane.showMessageDialog(login, "Login successful!");
} catch(TwitterException e){
JOptionPane.showMessageDialog(login, "Unable to login");
}
}
新規のTwitterインスタンスを作成してもTwitterExceptionはスローされませんが、verifyCredentials()メソッドを呼び出すとこの例外がスローされます。正常にログインすると、図2のメッセージが表示されます。


