是否可以使用 twitter4j 获取回复推文(或其回复)的推文列表?Twitter 网站和 Android 应用程序具有此功能。
问问题
8959 次
5 回答
4
这是我在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 现在没有使用
于 2012-08-15T13:14:37.493 回答
3
您可以使用InReplyToStatusId
字段值Status.getInReplyToStatusId()
使用以下代码递归地使用 API v1.1 获取推文的所有回复或对话:
Status replyStatus = twitter.showStatus(status.getInReplyToStatusId());
System.out.println(replyStatus.getText())
使用它,我可以使用他们所有的回复来拉取推文。
于 2013-08-30T09:13:25.813 回答
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 回答
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 回答
0
Twitter API 没有获取推文回复的功能,但您可以通过几个步骤来实现它。这是 Twitter API 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 回答