如何使用 java 客户端访问 Google 服务? [英] How do you access Google service using a java client?
问题描述
我正在开发一个名为searcegadget2"的 Java 应用程序,该应用程序在 Google Apps Engine (GAE) 上注册.我已经使用 OAuthHmacSha1Signer() 实现了3-legged OAuth.我正在正确地获得访问令牌&将其存储在 Session(会话已启用).
接下来,我将使用链接 onclick 事件调用 servlet.该 servlet 将使用访问令牌访问电子表格服务.我的代码是:
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);oauthParameters.setOAuthType(OAuthParameters.OAuthType.THREE_LEGGED_OAUTH);oauthParameters.setScope("https://spreadsheets.google.com/feeds/");oauthParameters.setOAuthToken(request.getSession().getAttribute("oauth_token").toString());oauthParameters.setOAuthVerifier(request.getSession().getAttribute("oauth_verifier").toString());oauthParameters.setOAuthTokenSecret(request.getSession().getAttribute("oauth_token_secret").toString());out.println("访问服务");GoogleService googleService = new GoogleService("wise", "searceapps-searcegadget2-1");out.println("
设置参数");googleService.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer());out.println("<br/>设置 URl");URL feedUrl = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");out.println("<br/>访问 ResultFeed");SpreadsheetFeed resultFeed = googleService.getFeed(feedUrl, SpreadsheetFeed.class);out.println("");out.println("响应数据:");out.println("====================================================");out.println("| 标题:" + resultFeed.getTitle().getPlainText());如果 (resultFeed.getEntries().isEmpty()) {out.println("| 未找到任何条目.");} 别的 {列表<电子表格条目>电子表格 = resultFeed.getEntries();for (int i = 0; i 我已经打印了所有的 oauthParameter 用于测试 &它们已正确设置.但是,在调用这个 servlet 时,我得到的唯一输出是:
<块引用>访问服务
我已经添加了 gdata-spreadsheet-3.0.jar 但它甚至不允许我创建服务对象!!!有什么问题?
另外,根据它给出的 此处,应用程序名称最好采用 [company-id]-[app-name]-[app-version] 格式.Google 服务器将使用该名称来监控身份验证来源."我不知道在哪里可以找到我的公司 ID,但我的应用程序名称是searcegadget2"&版本为1".
参考:Google 电子表格 API 开发人员指南:Java, 使用 Java 客户端库, Google 数据协议客户端库中的 OAuth
解决方案终于找到了,
I am developing a java application which is registered on Google Apps Engine (GAE) with the name "searcegadget2". I have implemented 3-legged OAuth with OAuthHmacSha1Signer(). I am getting the Access Token properly & storing it on Session (session is enabled).
Next, I am calling the servlet using a link onclick event. This servlet is to access the Spreadsheet service using the accesstoken. My code is :
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setOAuthType(OAuthParameters.OAuthType.THREE_LEGGED_OAUTH);
oauthParameters.setScope("https://spreadsheets.google.com/feeds/");
oauthParameters.setOAuthToken(request.getSession().getAttribute("oauth_token").toString());
oauthParameters.setOAuthVerifier(request.getSession().getAttribute("oauth_verifier").toString());
oauthParameters.setOAuthTokenSecret(request.getSession().getAttribute("oauth_token_secret").toString());
out.println("Accessing Service");
GoogleService googleService = new GoogleService("wise", "searceapps-searcegadget2-1");
out.println("<br/>Setting Parameter");
googleService.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer());
out.println("<br/>Setting URl");
URL feedUrl = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");
out.println("<br/>Accessing ResultFeed");
SpreadsheetFeed resultFeed = googleService.getFeed(feedUrl, SpreadsheetFeed.class);
out.println("<div id='feed'>");
out.println("Response Data:");
out.println("=====================================================");
out.println("| TITLE: " + resultFeed.getTitle().getPlainText());
if (resultFeed.getEntries().isEmpty()) {
out.println("| No entries found.");
} else {
List<SpreadsheetEntry> spreadsheets = resultFeed.getEntries();
for (int i = 0; i < spreadsheets.size(); i++) {
SpreadsheetEntry entry = spreadsheets.get(i);
System.out.println(" " + entry.getTitle().getPlainText());
}
}
out.println("=====================================================");
out.println("</div>");
I have printed all the oauthParameter for testing & they are properly set. But, while calling this servlet, the only output that I am getting is :
Accessing Service
I have added, gdata-spreadsheet-3.0.jar but still it is not even allowing me to create the service object !!! What is the problem ?
Also, as per it given here, "Application names should preferably have the format [company-id]-[app-name]-[app-version]. The name will be used by the Google servers to monitor the source of authentication." I don't know where I find my company id, but my app name is "searcegadget2" & version is "1".
For reference : Google Spreadsheets API Developer's Guide: Java, Using the Java Client Library, OAuth in the Google Data Protocol Client Libraries
解决方案 Finally found,
Google Service has dependency on : guava as it is mentioned here.
这篇关于如何使用 java 客户端访问 Google 服务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文