我有一个推文列表,其中包含我用于本科研究项目的推文用户的信息。要构建这些推文的社交网络图,我需要抓住他们的朋友和关注者列表。我尝试通过twitter4j平台使用GET Follower ID调用。我的身份验证是带有读取,写入和直接消息的Oauth。我得到400响应代码,没有其他错误代码。我还得到以下异常代码
exceptionCode = [92c30ec6-19bed99c 70a5018f-1e1c55ac 70a5018f-1e1c55aa],statusCode = -1,message = null,code = -1,retryAfter = -1,rateLimitStatus = null,version = 3.0.3}
这告诉我,我没有通过身份验证来提出这个请求,因为人们不是我的追随者。有没有办法在不与用户建立这种关系的情况下请求这些信息?
这是我的代码
public static void main (String[] args){
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("something")
.setOAuthConsumerSecret("something else")
.setOAuthAccessToken("another thing")
.setOAuthAccessTokenSecret("a secret thing")
.setUseSSL(true)
.setUserStreamRepliesAllEnabled(true);
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
long cursor = -1;
IDs ids = null;
String[] users = new String[16717];
BufferedReader br = null;
try {//getting user screen names
String sCurrentLine;
br = new BufferedReader(new FileReader("users.txt"));
int i = 0;
while ((sCurrentLine = br.readLine()) != null) {
users[i]=sCurrentLine;
i++;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
for(int i=0;i<users.length;i++){
System.out.println("==================="+users[i]+"===================");
do {
try {
ids = twitter.getFollowersIDs(users[i], cursor);
for (long id : ids.getIDs()) {
System.out.println(id);
User user = twitter.showUser(id);
System.out.println(user.getName());
}
} catch (TwitterException e) {
e.printStackTrace();
}
} while ((cursor = ids.getNextCursor()) != 0);
}
}
答案 0 :(得分:0)
可以使用来自twitter的this API获取任何公共Twitter用户的关注者ID列表。我不使用twitter4j,但它应该可以正常工作。
在认证之外需要注意的主要事情是,twitter允许在一次通话中获取最多5000个ID并且积极地限制速率限制(每个应用程序/用户令牌15次调用),因此您的应用程序必须设计和构建以满足那些适当的令牌/睡眠等的考虑/限制 对于例如如果您使用应用程序令牌并且给定用户拥有100K关注者,则在获取75K(5K * 15)关注者ID后,Twitter将开始返回rate_limit_exceeded错误。
答案 1 :(得分:0)
在一个非常令人尴尬的事件中,事实证明,无法提出请求的原因是我搜索的用户名有一个额外的空间。所以我修剪了每个名字,现在就可以了。