マイムの部屋

社内SEが,興味をもったことを書いていきます.

指定ユーザのツイートをリツイートしたユーザ情報を取得(Twitter4J,Java,リツイート)

今回は,Twitter APIを使って任意のツイートをリツイートしたユーザ情報を取得するソースコードを載せます.
TwitterSample.javaでほとんどの動作をしているので,そこの説明をしたいと思います.

TwitterSample.javaでは,標準出力で以下のものが表示されます.

  • ツイートのリツイート回数
  • リツイートされたユーザの名前とリツイートされたツイート
  • リツイートしたユーザの名前とリツイートしたツイート
  • API制限別の残基数(remain)と最高残基数(limit)
API制限別の残基数を気にしながらアレンジしてもらえれば幸いです.

import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;

public class Retweet {
    public static void main(String[] args) {
        Twitter twitter = new TwitterFactory().getInstance();
        String consumerKey = "自分のconsumerKey";
        String consumerSecret = "自分のconsumerSecret";
        String accessToken = "自分のaccessToken";
        String accessTokenSecret = "自分のaccessTokenSecret";
        
        twitter.setOAuthConsumer(consumerKey, consumerSecret);
        twitter.setOAuthAccessToken(new AccessToken(accessToken,accessTokenSecret));
        
        TwitterSample sample = new TwitterSample();
        sample.setTwitter(twitter);
        sample.getUserTimeLine("指定ユーザ名");

    }
}
  • TwitterSample.java
import java.util.HashMap;
import java.util.Map;

import twitter4j.IDs;
import twitter4j.Paging;
import twitter4j.RateLimitStatus;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.User;
import twitter4j.api.HelpResources;
import twitter4j.api.TweetsResources;
import twitter4j.api.UsersResources;

public class TwitterSample {
    private Twitter twitter;
    
    public Twitter getTwitter() {
        return twitter;
    }

    public void setTwitter(Twitter twitter) {
        this.twitter = twitter;
    }

    public void getUserTimeLine(String userName) {
        try {
            int firstPage = 1;// 探索開始ページ
            int tweetCount = 1;// ツイート番号
            Map helpmap = new HashMap();
            
            ResponseList statuses = twitter.getUserTimeline(userName, new Paging(firstPage));// 指定ユーザのタイムライン表示されるtweetIDを取得
            TweetsResources tweets = twitter.tweets();// TweetsResourceオブジェクトを作成
            UsersResources users = twitter.users();// UsersResourcesオブジェクトを作成
            HelpResources helps = twitter.help();// HelpResourcesオブジェクトを作成
            int i=0;
            
            // 指定ユーザの Tweet を分析
            for (Status status : statuses) {
            	System.out.println("RetweetCount: " + status.getRetweetCount());
            	// リツイートされたことのある Tweet のみを分析
            	if(status.getRetweetCount()!=0 && !status.isRetweet()){
                   IDs retweeters = tweets.getRetweeterIds(status.getId(), -1);// リツイートユーザのIDを取得(1)
                   long[] retweetIDs = retweeters.getIDs();// リツイートユーザのIDを取得(2)
                
                   ResponseList retweet_users = users.lookupUsers(retweetIDs);// リツイートユーザの情報を取得 
                   System.out.println("(" + tweetCount + ")@" + status.getUser().getName() + ", tweet: " + status.getText());
            
                // リツイートユーザ情報表示
                   System.out.println("retweet_user_info: ");
                   for(User retweet_user: retweet_users){
                  	   System.out.println("@" + retweet_user.getName() + ", ID: " + retweet_user.getId());                 
                   }
                   i++;
               }
            	if(i==1)break;
            	helpmap = helps.getRateLimitStatus();
            }
            for(Map.Entry e : helpmap.entrySet()){
                System.out.println("key: " + e.getKey() + ", remain: " + e.getValue().getRemaining() + ", limit: " + e.getValue().getLimit());            	
            }

        } catch (TwitterException e) {// エラー処理
            e.printStackTrace();
            System.out.println("失敗");
            
        }
    }
}