You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google People API无法获取全部联系人问题求助

Google People API无法获取全部联系人问题求助

嘿,我之前也碰到过一模一样的问题!其实Google People API有个容易被忽略的限制:哪怕你把pageSize设成2000,单次请求最多也只能返回1000条联系人。要拿到所有联系人,你得用API的分页机制——也就是通过返回结果里的nextPageToken循环发起请求,直到没有更多令牌为止。

我给你调整了代码逻辑,这样就能完整获取所有联系人并存入数据库了:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class FullContactsFetcher {
    public static void main(String[] args) throws Exception {
        String accessToken = "你的访问令牌";
        String baseRequestUrl = "https://people.googleapis.com/v1/people/me/connections?personFields=names&pageSize=1000";
        HttpClient client = HttpClient.newHttpClient();
        String nextPageToken = null;

        do {
            // 拼接带分页令牌的请求URL
            String currentRequestUrl = baseRequestUrl;
            if (nextPageToken != null) {
                currentRequestUrl += "&pageToken=" + nextPageToken;
            }

            // 构建并发送请求
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(currentRequestUrl))
                    .header("Authorization", "Bearer " + accessToken)
                    .GET()
                    .build();

            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            JsonObject responseJson = JsonParser.parseString(response.body()).getAsJsonObject();

            // 这里处理当前页的联系人数据,直接存入你的数据库即可
            System.out.println("当前页获取到" + responseJson.getAsJsonArray("connections").size() + "条联系人");

            // 获取下一页令牌,没有的话就结束循环
            nextPageToken = responseJson.has("nextPageToken") ? responseJson.get("nextPageToken").getAsString() : null;

        } while (nextPageToken != null);

        System.out.println("所有联系人已全部获取完成!");
    }
}

几个关键细节要注意:

  • 把pageSize固定设为1000(这是API允许的单次最大返回量),能减少请求次数,提高效率
  • 每次请求后解析返回的JSON,提取nextPageToken,只要这个令牌存在,就继续发起下一次请求
  • 建议在循环里直接把当前页的联系人存入数据库,不用等全部获取完再批量处理,避免内存占用过高

另外,虽然你已经确认过配额没问题,但还是提一句:2700个联系人只需要3次请求,完全在正常配额范围内,不用担心超限额的问题。

备注:内容来源于stack exchange,提问作者det

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:12:36