4

twitter4jを使用してツイート(またはその返信)に返信するツイートのリストを取得することはできますか?TwitterのウェブサイトとAndroidアプリにはこの機能があります。

4

5 に答える 5

4

これが私がwelshareで使用しているコードです

最初の部分は、Twitterが開かれたときに、Twitterがツイートの下に表示しているすべてのツイートを取得します。ツイートが他のツイートへの返信である場合に備えて、残りは会話を処理します。

RelatedResults results = t.getRelatedResults(tweetId);
List<Status> conversations = results.getTweetsWithConversation();
/////////
Status originalStatus = t.showStatus(tweetId);
if (conversations.isEmpty()) {
    conversations = results.getTweetsWithReply();
}

if (conversations.isEmpty()) {
    conversations = new ArrayList<Status>();
    Status status = originalStatus;
    while (status.getInReplyToStatusId() > 0) {
        status = t.showStatus(status.getInReplyToStatusId());
        conversations.add(status);
    }
}
// show the current message in the conversation, if there's such
if (!conversations.isEmpty()) {
    conversations.add(originalStatus);
}

編集:Twitter API v 1が使用されなくなったため、これは機能しなくなりました

于 2012-08-15T13:14:37.493 に答える
3

InReplyToStatusId次を使用してフィールド値を使用できますStatus.getInReplyToStatusId()

以下のコードコードを再帰的に使用して、APIv1.1を使用してツイートのすべての返信または会話を取得します。

Status replyStatus = twitter.showStatus(status.getInReplyToStatusId());
System.out.println(replyStatus.getText())

これを使用して、すべての返信を含むツイートを取得できます。

于 2013-08-30T09:13:25.813 に答える
3

https://github.com/klinker24/Talon-for-Twitterでこれを行う方法を見つけて、少し変更しました

public ArrayList<Status> getDiscussion(Status status, Twitter twitter) {
    ArrayList<Status> replies = new ArrayList<>();

    ArrayList<Status> all = null;

    try {
        long id = status.getId();
        String screenname = status.getUser().getScreenName();

        Query query = new Query("@" + screenname + " since_id:" + id);

        System.out.println("query string: " + query.getQuery());

        try {
            query.setCount(100);
        } catch (Throwable e) {
            // enlarge buffer error?
            query.setCount(30);
        }

        QueryResult result = twitter.search(query);
        System.out.println("result: " + result.getTweets().size());

        all = new ArrayList<Status>();

        do {
            System.out.println("do loop repetition");

            List<Status> tweets = result.getTweets();

            for (Status tweet : tweets)
                if (tweet.getInReplyToStatusId() == id)
                    all.add(tweet);

            if (all.size() > 0) {
                for (int i = all.size() - 1; i >= 0; i--)
                    replies.add(all.get(i));
                all.clear();
            }

            query = result.nextQuery();

            if (query != null)
                result = twitter.search(query);

        } while (query != null);

    } catch (Exception e) {
        e.printStackTrace();
    } catch (OutOfMemoryError e) {
        e.printStackTrace();
    }
    return replies;
}
于 2015-08-24T01:29:39.277 に答える
3

画面名の前に「@」を使用しないでください。アカウントに言及している他の人だけを検索します。アカウントからのツイートへの返信を検索するには、「to:」を使用します。クエリ演算子については、 https://dev.twitter.com/rest/public/searchを参照してください。

public ArrayList<Status> getReplies(String screenName, long tweetID) {
    ArrayList<Status> replies = new ArrayList<>();

    try {
        Query query = new Query("to:" + screenName + " since_id:" + tweetID);
        QueryResult results;

        do {
            results = twitter.search(query);
            System.out.println("Results: " + results.getTweets().size());
            List<Status> tweets = results.getTweets();

            for (Status tweet : tweets) 
                if (tweet.getInReplyToStatusId() == tweetID)
                    replies.add(tweet);
        } while ((query = results.nextQuery()) != null);

    } catch (Exception e) {
        e.printStackTrace();
    }
    return replies;
}
于 2017-04-29T08:17:28.487 に答える
0

Twitter APIには、ツイートの返信を取得する機能はありませんが、いくつかの手順で取得できます。TwitterAPIバージョン7.0の最も効率的な方法は次のとおりです。


ステップ1-すべての返信を取得します。(この関数は、最大800の最新の応答のみを返すことができます)

List<Status> replyList = twitter.getMentionsTimeline(new Paging(1, 800));


ステップ2-ユーザーが自分のツイートに返信した場合、これらの返信はgetUserTimeline()の代わりにに返されますgetMentionsTimeline()。したがって、これらの返信を適切な場所に移動する必要があります。

List<Status> tweetList = new ArrayList<>();
for (Status tweet : twitter.getUserTimeline()) {
    if (tweet.getInReplyToStatusId() == -1) {
        tweetList.add(tweet);
    } else {
        replyList.add(tweet);
    }
}


ステップ3-getInReplyToStatusId()各返信の元のツイートを識別するために使用します。ネストされた応答も取得する場合は、関数を再帰的にします(以下を参照)。

public void getReply(Status tweet) {
    for (Status reply : replyList) {
        if (tweet.getId() == reply.getInReplyToStatusId()) {
            System.out.println(reply.getText());
            getReply(reply);
        }
    }
}
于 2020-05-21T09:07:36.860 に答える