キーワード検索し、リツイート数が1より大きく100以下のツイートについてのリツイート者一覧を出力する」プログラム

115 views
Skip to first unread message

ask R

unread,
Jan 14, 2016, 3:23:54 AM1/14/16
to Twitter4J J
import twitter4j.IDs;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.api.HelpResources;
import twitter4j.api.TweetsResources;
import twitter4j.api.UsersResources;



public class Main2 {
   
    private Twitter twitter;
   
     public Twitter getTwitter() {
        return twitter;
    }  
    public void setTwitter(Twitter twitter) {
        this.twitter = twitter;
    }
    
      static final String DEFAULT_WORD = "購入";
      static String word = DEFAULT_WORD;
      

 
    public static void main(String[] args) throws TwitterException, InterruptedException {
        // 初期化
        Twitter twitter = new TwitterFactory().getInstance();
        Query query = new Query();
                query.setLang("ja");
                int tweetCount = 0;
           
              
          
        // 検索ワードをセット
        query.setQuery(word);

        // 1度のリクエストで取得するTweetの数(100が最大)
      //  query.setCount(100);
                query.setSince("2016-01-01");
                query.setUntil("2016-01-14");
               
                 TweetsResources tweets = twitter.tweets();// TweetsResourceオブジェクトを作成
                 UsersResources users = twitter.users();// UsersResourcesオブジェクトを作成
                 HelpResources helps = twitter.help();// HelpResourcesオブジェクトを作成

                   try {
                            QueryResult result = twitter.search(query);
                          
                        
                            for (Status tweet : result.getTweets()) {
                            
                               // String str = tweet.getText();
                                if(tweet.getRetweetCount()>1 && tweet.getRetweetCount()<101)
                                {
                            
                                System.out.println("日時:"+tweet.getCreatedAt());
                                System.out.println("ID:"+tweet.getId());
                                System.out.println("RT数:"+tweet.getRetweetCount());
                             IDs retweeters = tweets.getRetweeterIds(tweet.getId(), -1);
                             long[] retweetIDs = retweeters.getIDs();// リツイートユーザのIDを取得(2)
                            
                             ResponseList<User> retweet_users = users.lookupUsers(retweetIDs);
                             System.out.println("@" + tweet.getUser().getName() + ", tweet: " + tweet.getText());
                               
                                // リツイートユーザ情報表示
                   System.out.println("retweet_user_info: ");
                   for(User retweet_user: retweet_users){
                       System.out.println("@" + retweet_user.getName() + ", ID: " + retweet_user.getId());
                     
                   }
                                }
       
                            }
               
         
      
                   }catch (TwitterException e) {// エラー処理
            e.printStackTrace();
            System.out.println("失敗");
            
        }
       
                }
}
 

このプログラムなのですが、結果がうまく出力されません。どのように改善すれば出力されるでしょうか?

-------------------------------------------以下出力結果--------------------------------------------------------------------------------------
 
日時:Thu Jan 14 08:59:58 JST 2016
ID:687423874590486528
RT数:80
404:The URI requested is invalid or the resource requested, such as a user, does not exists. Also returned when the requested format is not supported by the requested method.
message - No user matches for specified terms.
code - 17

Relevant discussions can be found on the Internet at:
    http://www.google.co.jp/search?q=6df1b39e or
    http://www.google.co.jp/search?q=2c1e10aa
TwitterException{exceptionCode=[6df1b39e-2c1e10aa], statusCode=404, message=No user matches for specified terms., code=17, retryAfter=-1, rateLimitStatus=RateLimitStatusJSONImpl{remaining=179, limit=180, resetTimeInSeconds=1452760148, secondsUntilReset=981}, version=4.0.3}
    at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:163)
    at twitter4j.HttpClientBase.request(HttpClientBase.java:53)
    at twitter4j.HttpClientBase.get(HttpClientBase.java:71)
    at twitter4j.TwitterImpl.get(TwitterImpl.java:1562)
    at twitter4j.TwitterImpl.lookupUsers(TwitterImpl.java:751)
    at Main2.main(Main2.java:70)
失敗
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 3.043s
Finished at: Thu Jan 14 17:12:46 JST 2016
Final Memory: 6M/155M
------------------------------------------------------------------------



Yamamoto Yusuke

unread,
Jan 14, 2016, 5:03:47 AM1/14/16
to twitt...@googlegroups.com
> at twitter4j.TwitterImpl.lookupUsers(TwitterImpl.java:751)
> at Main2.main(Main2.java:70)
より、Main2.javaの70行目で例外が出ていることがわかります。

メッセージとして
> 404:The URI requested is invalid or the resource requested, such as a user, does not exists. Also returned when the requested format is not supported by the requested method.
> message - No user matches for specified terms.
> code - 17
が出ています。ツイートがヒットしていないようです。
setSinceで古すぎる日を指定しているからかもしれません。一週間くらいしかさかのぼれませんので。setSinceを外して実行してみてください。
--
山本 裕介
@yusuke
http://samuraism.jp/
> --
> Twitter4J の最新情報をフォロー: http://twitter.com/t4j_news
> 現在のバージョン - 安定: 4.0.4, 開発中: 4.0.5-SNAPSHOT
> バグトラッキング: http://issue.twitter4j.org/youtrack/issues/TFJ
>
> このメールは次の Google グループの参加者に送られています: Twitter4J J
> このグループにメールで投稿: twitt...@googlegroups.com
> このグループから退会する: http://groups.google.com/group/twitter4j-j?hl=ja
> ---
> このメールは Google グループのグループ「Twitter4J J」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには twitter4j-j...@googlegroups.com にメールを送信してください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

ask R

unread,
Jan 14, 2016, 5:27:36 AM1/14/16
to Twitter4J J
setSinceを消して実行してみましたが、まったく同じエラーが返ってきました

ask R

unread,
Jan 14, 2016, 5:30:55 AM1/14/16
to Twitter4J J
ちなみに70行目というのは

  ResponseList<User> retweet_users = users.lookupUsers(retweetIDs);
ここにあたります

Yamamoto Yusuke

unread,
Jan 14, 2016, 5:32:25 AM1/14/16
to twitt...@googlegroups.com
> ちなみに70行目というのは
> ResponseList<User> retweet_users = users.lookupUsers(retweetIDs);
> ここにあたります
ユーザーIDを指定すべきところでツイートのIDを指定していますね

--
山本 裕介
@yusuke
http://samuraism.jp/

ask R

unread,
Jan 18, 2016, 5:12:41 AM1/18/16
to Twitter4J J
解決しました、ありがとうございました
Reply all
Reply to author
Forward
0 new messages