【问题标题】:how do you get follower ID's of people who are not following you Twitter API您如何获得未关注您 Twitter API 的人的关注者 ID
【发布时间】:2014-02-11 08:42:26
【问题描述】:

我有一个推文列表,其中包含我用于本科研究项目的推文用户的信息。要构建这些推文的社交网络图,我需要获取他们的朋友和关注者列表。我已经尝试通过 twitter4j 平台使用 GET Follower IDs 调用。我的身份验证是带有读取、写入和直接消息的 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);
    }
}

【问题讨论】:

    标签: twitter twitter-oauth twitter4j


    【解决方案1】:

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

    除了身份验证之外,需要注意的主要事情是,twitter 允许在一次调用中获取最多 5000 个 ID,并严格限制速率(每个应用程序/用户令牌 15 次调用),因此您的应用程序必须设计和构建以尊重这些考虑/限制与适当的令牌/睡眠等。 例如如果您使用应用程序令牌并且给定用户有 100K 关注者,则 twitter 将在获取 75K (5K * 15) 关注者 ID 后开始返回 rate_limit_exceeded 错误。

    【讨论】:

    • 这就是我正在使用的,我很确定问题不是速率限制问题,因为它会立即停止,并且在错误中没有任何地方这么说。我想到了这样一个事实,即我试图获得的用户可能会受到保护,但如果不访问他们的帐户,我就无法检查这一点。这很烦人。
    • 在受保护的情况下你会得到 401 (HTTP-401: {"request":"...", "error":"Not authorized"})。我注意到 HTTP 400 的唯一原因是“验证错误”。请确保您的应用/用户令牌是好的。
    • 查了很多次,就是不知道。感谢您的尝试。
    • 当我搜索推文时,我的身份验证也有效(那是流式 API,有关系吗?)
    • 您能否发布您的代码并添加 twitter4j 标签,因为它可能是 twitter4j 的东西?你能调用任何非流式 API 吗?
    【解决方案2】:

    在一个极其尴尬的事件中,事实证明无法发出请求的原因是我搜索的用户名有一个额外的空间。所以我修剪了每个名字,现在它可以工作了。

    【讨论】:

    • 所以,这是一个错误的身份验证案例.. :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2013-07-01
    • 2012-07-20
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多