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

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

这是我在welshare中使用的代码

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

RelatedResults results = t.getRelatedResults(tweetId); List conversations = results.getTweetsWithConversation(); ///////// Status originalStatus = t.showStatus(tweetId); if (conversations.isEmpty()) { conversations = results.getTweetsWithReply(); } if (conversations.isEmpty()) { conversations = new ArrayList(); 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现在尚未使用,因此不再适用

您可以使用Status.getInReplyToStatusId()使用InReplyToStatusId字段值

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

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

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

我在https://github.com/klinker24/Talon-for-Twitter中找到了这样做的方法并对其进行了一些修改

 public ArrayList getDiscussion(Status status, Twitter twitter) { ArrayList replies = new ArrayList<>(); ArrayList 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(); do { System.out.println("do loop repetition"); List 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; } 

不要在屏幕名称前使用“@”。 它只搜索提及该帐户的其他人。 要从帐户中搜索对推文的回复,请使用“收件人:”。 有关查询运算符,请参阅https://dev.twitter.com/rest/public/search 。

 public ArrayList getReplies(String screenName, long tweetID) { ArrayList 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 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; }