Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Java、Swing、Twitter4jを使ってあなただけのTwitterアプリを作成しよう

ステータスの更新、フォロワーのリストの取得などを簡単に実装

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/10/07 14:00

 Twitter4jとは、TwitterインフラストラクチャにアクセスできるAPIです。ステータスの更新、フォロワーのリストの取得など、さまざまな便利なタスクをJavaプログラムから実行できます。この記事では、Twitter4j APIを使ってTwitterアプリケーションをJavaで自作する方法を簡単に説明します。

目次

はじめに

 この記事では、Twitter4j APIを使ってTwitterアプリケーションをJavaで自作する方法を簡単に説明します。Twitter4jは、TwitterインフラストラクチャにアクセスできるAPIです。ステータスの更新、フォロワーのリストの取得など、さまざまな便利なタスクをJavaプログラムから実行できます。

 以降の説明はJavaとSwing GUIの知識があることを前提に書かれています。この記事が目指しているのは、Swingをビューテクノロジとして使う簡易なデスクトップアプリケーションを作成することです。以下の機能を実装していきます。

  1. ポップアップを使ってログインする
  2. フォロワーを表示する
  3. 表示を更新する
  4. Twitter上のステータスを更新する(つぶやきを送る)
  5. つぶやきを検索する
  6. ダイレクトメッセージを送る

 これは、独自のアプリケーションを作るための骨格として利用できます。想像力を駆使し、ここで作成するサンプルに自由に装飾を加えてみてください。使用できるビューテクノロジはほかにも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の基礎知識も必要です。つぶやき、他人をフォローする、ダイレクトメッセージを送る、こういった概念をもう一度確認してから、次に進みましょう!

図1 これから作成するサンプル アプリケーション
図1 これから作成するサンプル アプリケーション

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のメッセージが表示されます。

図2 ログインダイアログ
図2 ログインダイアログ

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5