gpt4 book ai didi

java - Java 中的 Google Contacts v3 API 和 OAuth v2

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:57:57 27 4
gpt4 key购买 nike

在过去的几天里,我一直在尝试使用上述 API 获取 google 联系人列表。不得不说,没有成功。谷歌文档(如果我可以说是一团糟)对我的问题没有太大帮助。问题是,我不知道如何使用 OAuth v2 API 授权 ContactsService 对象。我已经下载了 Google OAuth2.0 库,同样,它没有合适的文档和/或没有适合像我这样的初学者的合适示例。

总而言之,有没有人有任何有效的“Hello world”类型的示例或针对上述问题的任何类型的“指导”?

附带说明一下,我确实设法使用 Scribe API 获取联系人,但您可能知道,响应采用 xml/json 格式,需要先进行解析,这不是我想要的。

谢谢

最佳答案

看来我终于有了一些进步。显然,问题是那里有一堆不同的 OAuth2 库,其中一些要么已被弃用,要么只是不能与 Contacts v3 一起使用,也就是说,生成的访问 token 将无效(这就是我的结论)。

因此,为了授权和生成访问 token ,我使用了 Google API Client 1.14.1(测试版),我的代码如下:

Servlet 1(生成授权 URL):

protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

GoogleAuthorizationCodeRequestUrl authorizationCodeURL=new GoogleAuthorizationCodeRequestUrl(CLIENT_ID, REDIRECT_URL, SCOPES);

authorizationCodeURL.setAccessType("offline");//For future compatibility

String authorizationURL=authorizationCodeURL.build();
System.out.println("AUTHORIZATION URL: "+authorizationURL);

response.sendRedirect(new URL(authorizationURL).toString());

}

Servlet 2(处理访问 token )

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();


out.println("<html>");
out.println("<head>");
out.println("<title>Servlet SignInFinished</title>");
out.println("</head>");
out.println("<body>");


HttpTransport transport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleAuthorizationCodeTokenRequest authorizationTokenRequest = new GoogleAuthorizationCodeTokenRequest(transport, jsonFactory, CLIENT_ID, CLIENT_SECRET, request.getParameter("code"), REDIRECT_URL);

GoogleTokenResponse tokenResponse = authorizationTokenRequest.execute();

out.println("OAuth2 Access Token: " + tokenResponse.getAccessToken());

GoogleCredential gc = new GoogleCredential();
gc.setAccessToken(tokenResponse.getAccessToken());

ContactsService contactsService = new ContactsService("Lasso Project");
contactsService.setOAuth2Credentials(gc);

try {
URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");

Query myQuery = new Query(feedUrl);
myQuery.setMaxResults(1000);

ContactFeed resultFeed = contactsService.query(myQuery, ContactFeed.class);

for (int i = 0; i < resultFeed.getEntries().size(); i++) {
out.println(resultFeed.getEntries().get(i).getTitle().getPlainText() + "<br/>");
}

} catch (Exception e) {
System.out.println(e);
}

out.println("</body>");
out.println("</html>");
}

注意:如果您使用 Web 应用程序的客户端 ID,REDIRECT_URL 必须是您在通过 Google 控制台注册应用程序时输入的重定向 URL 之一。

好吧,我希望这对你们中的一些人有所帮助:)。

关于java - Java 中的 Google Contacts v3 API 和 OAuth v2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16298827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com