我在 Twitter 上有一个用户名列表,其个人资料是公开的。我希望获得他们从形成个人资料之日起发布的“所有推文”。我检查了GitHub 上的 Twitter4J 示例。
根据 Twitter API 文档,仅返回 20 条最近的推文。无论如何我可以执行我的任务吗?
问问题
38263 次
3 回答
27
要使用 Twitter4J 获取用户的所有帖子,您必须在多个页面上提出请求。
Twitter unauthenticatedTwitter = new TwitterFactory().getInstance();
//First param of Paging() is the page number, second is the number per page (this is capped around 200 I think.
Paging paging = new Paging(1, 100);
List<Status> statuses = unauthenticatedTwitter.getUserTimeline("google",paging);
只需循环并继续抓取新页面,直到没有新帖子可以工作。
于 2010-06-01T18:46:16.767 回答
15
以下是如何获取用户的所有推文(或至少高达 ~3200):
import java.util.*;
import twitter4j.*;
import twitter4j.conf.*;
public static void main(String[] a) {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("YOUR KEYS HERE");
cb.setOAuthConsumerSecret("YOUR KEYS HERE");
cb.setOAuthAccessToken("YOUR KEYS HERE");
cb.setOAuthAccessTokenSecret("YOUR KEYS HERE");
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
int pageno = 1;
String user = "cnn";
List statuses = new ArrayList();
while (true) {
try {
int size = statuses.size();
Paging page = new Paging(pageno++, 100);
statuses.addAll(twitter.getUserTimeline(user, page));
if (statuses.size() == size)
break;
}
catch(TwitterException e) {
e.printStackTrace();
}
}
System.out.println("Total: "+statuses.size());
}
于 2014-11-23T06:26:19.393 回答
6
如果您通读Twitter 的文档,如果您在 API 请求中指定“count=200”,则一次最多可以检索 200 条推文。
也可以使用“page=x”得到不同的分页结果;您可以继续这样做,直到您检索到用户发布的每条推文。
我不确定您的 Java 应用程序将如何创建它,但您的请求可能如下所示:
http://api.twitter.com/1/statuses/user_timeline.xml?id=SomeUsername&count=200&page=1
http://api.twitter.com/1/statuses/user_timeline.xml?id=SomeUsername&count=200&page=2
http://api.twitter.com/1/statuses/user_timeline.xml?id=SomeUsername&count=200&page=3
... ETC。
请记住,这些请求是有速率限制的,因此您需要小心不要超过限制。
于 2010-06-01T03:25:09.303 回答