Twitter回复之间的关系

时间:2017-08-31 12:26:34

标签: api twitter twitter4j tweets

Twitter API存在很大问题。目前,Twitter不支持通过相关回复获取推文。

我想抓住时间表的提及并将其与回复联系起来。

直到这一步一切都很好。现在我的问题。 我想补充儿童对答复的答复,以便在提及和答复之间找到完整的关系。

目前,我获取时间轴并将结果拆分为提及和回复。

public void fetchTwitterTimeline(long sinceId) {
 try {
   Paging timelinePaging = new Paging();

   if (sinceId > 0) {
     timelinePaging.setSinceId(sinceId);
   }
   LOG.debug("Fetching Twitter Timeline");
   ResponseList<Status> statusResponseList = twitterClient.getMentionsTimeline(timelinePaging);
   assignTwitterStatusResponse(statusResponseList);
 } catch(TwitterException e){
   e.getStackTrace();
   System.out.println(e);
   LOG.error("Could not fetch Twitter Timeline: {}", e);
  }
}

private void assignTwitterStatusResponse(ResponseList<Status> statusResponseList) {
 for (Status status : statusResponseList) {
   if (status.isRetweet()) {
     continue;
   }

   if (status.getInReplyToStatusId() > 0) {
     replies.add(status);
   } else {
     mentions.add(status);
   }
 } 
}

2 个答案:

答案 0 :(得分:0)

有一个API调用来获取对推文的回复。

这是conversation/show/:ID - 因此,要获得Tweet ID 123的所有回复,请致电conversation/show/123

唯一的问题是此API仅限于Twitter的官方API密钥。

答案 1 :(得分:0)

非常感谢您的回复。 现在,对于那些遇到同样问题的人,我也有一个很好的解决方案。

public List<Status> fetchTwitterThread(long tweetId) throws TwitterException {
   Paging timelinePaging = new Paging();
   timelinePaging.setSinceId(tweetId);

   ResponseList<Status> statusResponseList = twitterClient.getMentionsTimeline(timelinePaging);
   statusResponseList.addAll(twitterClient.getHomeTimeline(timelinePaging));

   List<Status> thread = new ArrayList<>();
   thread.add(getStatusById(tweetId)); // Add root status

   fetchTwitterThread(tweetId, statusResponseList, thread);

   return thread;
}

private void fetchTwitterThread(long parentId, ResponseList<Status> statusResponseList, List<Status> thread) {
  for (Status status : statusResponseList) {
    if (status.getInReplyToStatusId() == parentId) {
      thread.add(status);
      fetchTwitterThread(status.getId(), statusResponseList, thread);
    }
  }
}

我有两种方法。如果要保存一些API调用,则需要这样做。 在第一步中,我从请求的id获取mentionsTimeline和hometimeline。这对你自己的推文和回复是必要的。

之后我实现了第二种方法作为递归。我遍历responseList,如果一个状态(inReplyToStatusId)与parentId匹配,我将它们添加到线程中。