简体   繁体   中英

Check if a tweet has already been retweeted - Twitter4j

so I am trying to make a bot and I am trying to see if a tweet has been retweeted before I try and retweet. The issue is I cannot seem to find a way to do it. I have tried many ways as seen below but I cannot figure it out. I have checked Stackoverflow and Twitter4j but cannot find a solution

My code:

private boolean retweetedAlready(Status status) throws TwitterException {
    System.out.println("Status ID: " + status.getId());
    System.out.println("Retweeted: " + status.isRetweetedByMe());

    List<Status> retweets = twitter.getRetweetsOfMe();
    Status tmp;
    for(Status s : twitter.getUserTimeline()){
        tmp = s.getRetweetedStatus();
        System.out.println("ID: " + s.getId());
        System.out.println("Equal: " + status.equals(s));
        System.out.println("Retweeted Status id: " + tmp.getId());
        System.out.println(tmp.getId() + ", " + status.getId() + " - " + (tmp.getId() == status.getId()));
        System.out.println(retweets.contains(status));
        System.out.println();
        if(s.getRetweetedStatus().getId() == status.getId()){
            return true;
        }
    }
    return false;
}

The output:

Status ID: 712688409878331392
Retweeted: false
ID: 712688575494688768
Equal: false
Retweeted Status id: 712654036646891520
712654036646891520, 712688409878331392 - false
false

ID: 712688572063752194
Equal: false
Retweeted Status id: 712687766178365441
712687766178365441, 712688409878331392 - false
false

ID: 712688568678875137
Equal: false
Retweeted Status id: 712663978158071810
712663978158071810, 712688409878331392 - false
false

ID: 712364624251846658
Equal: false
Retweeted Status id: 712226571634008065
712226571634008065, 712688409878331392 - false
false

ID: 712364621743661060
Equal: false
Retweeted Status id: 712056778410713088
712056778410713088, 712688409878331392 - false
false

ID: 712361537680310274
Equal: false
Retweeted Status id: 712345290464886784
712345290464886784, 712688409878331392 - false
false

ID: 712361535302180864
Equal: false
Retweeted Status id: 712361382474346497
712361382474346497, 712688409878331392 - false
false

ID: 712361075149246466
Equal: false
Retweeted Status id: 712360810211897344
712360810211897344, 712688409878331392 - false
false

ID: 712361072687239168
Equal: false
Retweeted Status id: 712360816801136641
712360816801136641, 712688409878331392 - false
false

ID: 712361069872877569
Equal: false
Retweeted Status id: 712310621748862978
712310621748862978, 712688409878331392 - false
false

ID: 712361066936799232
Equal: false
Retweeted Status id: 712360862120435712
712360862120435712, 712688409878331392 - false
false

ID: 712361063744929792
Equal: false
Retweeted Status id: 712360922182975490
712360922182975490, 712688409878331392 - false
false

ID: 712360695069872130
Equal: false
Retweeted Status id: 712360559329595392
712360559329595392, 712688409878331392 - false
false

ID: 712360607538946050
Equal: false
Retweeted Status id: 712349483066105856
712349483066105856, 712688409878331392 - false
false

ID: 712359955043635201
Equal: false
Retweeted Status id: 712292676352274433
712292676352274433, 712688409878331392 - false
false

ID: 712359949565870080
Equal: false
Retweeted Status id: 712359728286965765
712359728286965765, 712688409878331392 - false
false

ID: 712359946835333120
Equal: false
Retweeted Status id: 712359289365499904
712359289365499904, 712688409878331392 - false
false

ID: 712359944209764352
Equal: false
Retweeted Status id: 709161338342248448
709161338342248448, 712688409878331392 - false
false

ID: 712359940627816448
Equal: false
Retweeted Status id: 712359805805993985
712359805805993985, 712688409878331392 - false
false

I think use status.getRetweetCount() this return total retweet number is tweet, if is equal is zero is not retweeted but is greater than zero is retweeted

and check yourself retweeted is status.isRetweetedByMe()

   private boolean retweetedAlready(Status status) throws TwitterException {

        if(status.isRetweetedByMe() && status.getRetweetCount() > 1 ){

        return true; // this twit retweeted by your and others
    } else if(status.isRetweetedByMe() && status.getRetweetCount() == 1 )
        return  true; // this twit only retweeted by your
    }else{
        return false; // this twit not retweeted by your but mybe others retweeted
    }   

}

and change getUserTimeline() with getHomeTimeline() for fetch tweets, isRetweetedByMe() not works with getUserTimeline()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM