いま、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 }