Favが見れないなら自分で作ればいいじゃないってことでTwitter4Jサンプル

いま、favstarは止まりがちだし、ふぁぼったーもよく落ちてるし、でもふぁぼられ見たいです、という人、Javaでプログラム組めばいいじゃない、ということでこんなプログラム書けばいいと思います。ふぁぼられとRTが表示されます。


コンパイルや実行には、ここからTwitter4J-2.2.1をダウンロードして、async、core、streamの3つのjarをクラスパスに追加する必要があります。
Twitter4J


xAuth使ってるので、Twitterのアプリケーション登録して、xAuthの申請が必要です。OAuthでやりたい人は適当にプログラム書き直せばいいと思います。
CONSUMER_KEY、CONSUMER_SECRETにアプリケーションの値を指定してください。


あとは、適当に自分で機能追加していけばいいんじゃないでしょうか。Twitter4Jえらいので、UserStreamAdapterのメソッドをオーバーライドしてあとは適当に補完してけば、適当なプログラムが作れると思います。
オーバーライドの候補にないような機能は、もともとTwitterが提供してないと考えればいいと思います。


ソースは以下
initComponentのコードは画面構築部分で、NetBeansが自動生成しているので、あまり見すぎると目がつぶれます。一応追いやすいように、BorderLayout+FlowLayoutな感じにはしてますけど。
機能はbtnStartActionPerformedで。

package twtter4jsample;

import twitter4j.*;
import twitter4j.auth.AccessToken;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;

/**
 * @author kis
 */
public class LoginFrame1 extends javax.swing.JFrame {
    private static final String CONSUMER_KEY = "your key";
    private static final String CONSUMER_SECRET = "your secret";

    /** Creates new form LoginFrame */
    public LoginFrame1() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
        taOutput = new javax.swing.JTextArea();
        javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
        javax.swing.JPanel jPanel2 = new javax.swing.JPanel();
        javax.swing.JLabel jLabel1 = new javax.swing.JLabel();
        txtId = new javax.swing.JTextField();
        javax.swing.JPanel jPanel3 = new javax.swing.JPanel();
        javax.swing.JLabel jLabel2 = new javax.swing.JLabel();
        pfPassword = new javax.swing.JPasswordField();
        javax.swing.JPanel jPanel4 = new javax.swing.JPanel();
        javax.swing.JButton btnStart = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        taOutput.setColumns(20);
        taOutput.setRows(5);
        jScrollPane1.setViewportView(taOutput);

        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jPanel1.setLayout(new java.awt.GridLayout(0, 1));

        jLabel1.setText("ID");
        jPanel2.add(jLabel1);

        txtId.setColumns(15);
        jPanel2.add(txtId);

        jPanel1.add(jPanel2);

        jLabel2.setText("PASS");
        jPanel3.add(jLabel2);

        pfPassword.setColumns(15);
        jPanel3.add(pfPassword);

        jPanel1.add(jPanel3);

        btnStart.setText("開始");
        btnStart.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnStartActionPerformed(evt);
            }
        });
        jPanel4.add(btnStart);

        jPanel1.add(jPanel4);

        getContentPane().add(jPanel1, java.awt.BorderLayout.PAGE_START);

        pack();
    }// </editor-fold>


    private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {                                         
        ConfigurationBuilder builder = new ConfigurationBuilder();
        builder.setOAuthConsumerKey(CONSUMER_KEY);
        builder.setOAuthConsumerSecret(CONSUMER_SECRET);
        Configuration conf = builder.build();

        TwitterFactory tf = new TwitterFactory(conf);
        Twitter tw = tf.getInstance();
        try {
            
            AccessToken at;
            at = tw.getOAuthAccessToken(txtId.getText(), new String(pfPassword.getPassword()));
            System.out.println(at.getToken());
            System.out.println(at.getTokenSecret());

            User u = tw.verifyCredentials();
            System.out.printf("%s(%s) tw:%d fw:%d fr:%d%n", u.getScreenName(), u.getName(), u.getStatusesCount(), u.getFriendsCount(), u.getFollowersCount());

            TwitterStream stream = new TwitterStreamFactory(conf).getInstance(at);

            stream.addListener(new UserStreamAdapter() {

                @Override
                public void onFavorite(User source, User target, Status favoritedStatus) {
                    printf("Fav:%s → %s:%s(%s)%n",
                            source.getScreenName(), target.getScreenName(),
                            favoritedStatus.getText(), favoritedStatus.getUser().getScreenName());
                }

                @Override
                public void onRetweet(User source, User target, Status retweetedStatus) {
                    printf("Retweet:%s → %s:%s%n",
                            source.getScreenName(), target.getScreenName(),
                            retweetedStatus.getText());
                }

            });
            stream.user();
        } catch (TwitterException ex) {
            ex.printStackTrace();
        }

    }                                        

    void print(String s){
        taOutput.setText(s + taOutput.getText());
    }
    void printf(String s, Object... arg){
        print(String.format(s, arg));
    }
    void println(String s){
        print(s + "\n");
    }
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new LoginFrame1().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JPasswordField pfPassword;
    private javax.swing.JTextArea taOutput;
    private javax.swing.JTextField txtId;
    // End of variables declaration

}