你如何获得没有关注Twitter API的人的关注者ID

时间:2014-01-21 16:16:24

标签: twitter twitter-oauth twitter4j

我有一个推文列表,其中包含我用于本科研究项目的推文用户的信息。要构建这些推文的社交网络图,我需要抓住他们的朋友和关注者列表。我尝试通过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);
    }
}

2 个答案:

答案 0 :(得分:0)

可以使用来自twitter的this API获取任何公共Twitter用户的关注者ID列表。我不使用twitter4j,但它应该可以正常工作。

在认证之外需要注意的主要事情是,twitter允许在一次通话中获取最多5000个ID并且积极地限制速率限制(每个应用程序/用户令牌15次调用),因此您的应用程序必须设计和构建以满足那些适当的令牌/睡眠等的考虑/限制 对于例如如果您使用应用程序令牌并且给定用户拥有100K关注者,则在获取75K(5K * 15)关注者ID后,Twitter将开始返回rate_limit_exceeded错误。

答案 1 :(得分:0)

在一个非常令人尴尬的事件中,事实证明,无法提出请求的原因是我搜索的用户名有一个额外的空间。所以我修剪了每个名字,现在就可以了。