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
相关产品推荐
相关产品推荐

