管理员sdk 403超出限额

时间:2014-06-12 12:55:08

标签: google-admin-sdk

我正在使用java中的admin sdk检索用户的照片。我也实现了指数退避。

但是在几次请求之后,我收到403错误代码和速率限制异常消息。

有2000个用户和10到20个用户的照片。它开始给出403错误 并且使用指数退避需要很长时间才能执行。

   try {
        Directory directoryService = getDirectoryService(adminEmail);
        Photos photos = directoryService.users().photos();
        com.google.api.services.admin.directory.Directory.Users.Photos.Get get = photos.get(userEmail);
        get.setUserKey(userEmail);
        UserPhoto userPhoto = get.execute();

    } catch (Exception e) {

         if(e.getMessage().contains("403"))
         {
            try {
                 Thread.sleep((1 << userCount) * 1000 + randomGenerator.nextInt(1001));
            } catch (InterruptedException e1) {
                e1.printStackTrace();
                log.warning("Exception Interrupted in getting photo1::->"+e1.getCause());
            }
        }
    }

任何人都可以就此问题向我提出建议吗?

1 个答案:

答案 0 :(得分:1)

啊,我发现了这个问题。速率限制是因为您为每个请求请求新的OAuth2访问令牌。您需要缓存Directory directoryService = getDirectoryService(adminEmail)的结果,而不是执行每个请求。

在node.js下,我的令牌有效期为一小时(它们包含一个expires_in字段,这是一个unix时间戳)。我将我的代码修改为仅在其到期后的300秒内请求一个新令牌,现在我可以以每秒10次的速度点击,这足够快,达到每天150,000个请求的每日限制。