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; }
- 如何在Android中调整位图的最佳方式?
- 是否有可能从外部闪存驱动器运行java(jdk-windows),Eclipse(indigo)和Android-sdk for Android app开发
- 将bundle传递给设置为singletask的活动
- javafx:javafx.scene.layout.AnchorPane无法强制转换为javafx.scene.layout.BorderPane
- 如何使用自签名证书连接到Android(paho客户端)中的Mqtt服务器?
- 带ActionBarActivity的NoClassDefFoundError Android
- Android,在tomcat服务器上传文件
- org.xml.sax.SAXParseException:解析XML时出现意外的标记
- android studio和netbeans中输入扫描程序和解析的不同行为