Twitter4j:获取某条推文的回复列表

时间:2012-08-15 13:11:32

标签: java android twitter4j

是否有可能使用twitter4j获取回复推文(或回复)的推文列表? Twitter网站和Android应用程序都有此功能。

5 个答案:

答案 0 :(得分:5)

这是我在welshare

中使用的代码

第一部分获取推文在推文下方显示的所有推文。如果推文是对其他推文的回复,其他人会处理对话。

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现在尚未使用,因此不再适用

答案 1 :(得分:3)

您可以使用InReplyToStatusId

使用Status.getInReplyToStatusId()字段值

使用API​​ v1.1以递归方式使用下面的代码来获取推文的所有回复或对话:

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

使用此功能,我可以通过所有回复来提取推文。

答案 2 :(得分: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;
}

答案 3 :(得分:1)

请勿在屏幕名称前使用“@”。它只搜索提及该帐户的其他人。要从帐户中搜索对推文的回复,请使用“收件人:”。有关查询运算符,请参阅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;
}

答案 4 :(得分:0)

Twitter API不具有获取推文回复的功能,但是您可以通过几个步骤来实现它。这是Twitter API 7.0版的最有效方法。


第1步-获得所有答复。 (此功能最多只能返回800个最新回复)

TextView mTextView = findViewById(R.id.textView7);

recolor(this, mTextView , getResources().getColor(R.color.red),R.drawable.my_border);


步骤2-如果用户回复了自己的推文,则这些回复将返回到List<Status> replyList = twitter.getMentionsTimeline(new Paging(1, 800)); 而不是getUserTimeline()。因此,您需要将这些答复移到正确的位置。

getMentionsTimeline()


步骤3-使用List<Status> tweetList = new ArrayList<>(); for (Status tweet : twitter.getUserTimeline()) { if (tweet.getInReplyToStatusId() == -1) { tweetList.add(tweet); } else { replyList.add(tweet); } } 来标识每个回复的原始推文。如果还想获取嵌套的回复,则使函数递归(如下所示)。

getInReplyToStatusId()