【发布时间】:2015-01-25 20:50:07
【问题描述】:
我正在创建一个使用 Twitter4J 库与 Twitter 交互的 Java 应用程序。 我想从 twitter 下载 10 000 个节点,然后对创建的图进行统计。该图最初保存在数据集(.txt 文件)中。 我还必须为每个节点保存足够的 ReTweet(所以我必须检查它们的时间线)。
跳过twitter的实例化执行查询,我有两个问题和疑惑: 1) 我该如何处理 Twitter API 在 15 分钟内需要的数量有限的问题?
我试过这个:
public static RateLimitStatus getApplicationRateLimitStatus(Twitter twitter)
{
try {
Map<String ,RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus();
for (String endpoint : rateLimitStatus.keySet())
{
if (endpoint.equals("/application/rate_limit_status"))
return rateLimitStatus.get(endpoint);
}
} catch (TwitterException te)
{
te.printStackTrace();
System.out.println("Failed to get rate limit status: " + te.getMessage());
System.exit(-1);
}
return null;
}
public static void control(Twitter twitter)
{
RateLimitStatus app_rate_limit_st = null;
RateLimitStatus user_timeline_limit_st = null;
RateLimitStatus credentials_limit_st = null;
RateLimitStatus friends_list_limit_st = null;
RateLimitStatus followers_list_limit_st = null;
int ctr_req = 7;
try {
if ((app_rate_limit_st = MyRateLimit.getApplicationRateLimitStatus(twitter)).getRemaining() < ctr_req)
{
System.out.println("I'm waiting "+app_rate_limit_st.getSecondsUntilReset()+" seconds for Application Rate Limit, app request remaining: "+app_rate_limit_st.getRemaining());
Thread.sleep((long)app_rate_limit_st.getSecondsUntilReset()*1000);
System.out.println("I woke up!!!");
}
}catch(InterruptedException e) {e.printStackTrace();}
}
在此代码块中,我仅检查了请求 ApplicationRequest 类型,但在我的应用程序中,我还检查了所需类型 FriendList、FollowersList、UserTimeline 和 Credentials。
通过运行我的应用程序,会引发该通知 我已经超过了可用应用程序的数量,不明白为什么。
2) 另一个问题是应该使用哪种算法来下载节点。 我考虑过一个流行的节点(有很多朋友和追随者,并且彼此互动很多)。 我试图取节点,在朋友,他的追随者,然后是朋友的朋友和追随者以及追随者的朋友和追随者。 这是一种巧妙的技术?他们会更清楚吗?
谢谢。
【问题讨论】:
-
另一个问题...我遇到错误代码 503 的异常,并显示消息:“Twitter 服务器已启动,但请求超载。稍后再试”。现在应用程序停止了。为什么会发生这个错误?速率限制不是用来避免错误的吗?