1

我正在努力让它发挥作用。当我使用客户端登录方法(用户名/密码)时它工作正常,但使用 oath 它不起作用。我想知道为什么。

我正在使用Java 语言指南 (v1.4)中的这段代码

按路径检索页面

如果您知道 Google 站点中某个页面的相对路径,则可以使用 path 参数来获取该特定页面。此示例将返回位于 http://sites.google.com/site/siteName/path/to/the/page的页面:

ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl()));
query.setPath("/path/to/the/page");
ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
for (BaseContentEntry<?> entry : contentFeed.getEntries()) {
  System.out.println(" title: " + entry.getTitle().getPlainText());
}

如果我使用客户端登录方法一切正常。但是,当我使用 Oath (Two-legged) 时,我得到以下响应:

com.google.gdata.util.AuthenticationException: Token invalid - Invalid token:
<HTML>
<HEAD>
<TITLE>Token invalid - Invalid token: </TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Token invalid - Invalid token: </H1>
<H2>Error 401</H2>
</BODY>
</HTML>

这个版本工作正常:

SitesService client = new SitesService("Test");
client.setUserCredentials(USER_NAME, PASSWORD);

ContentQuery query = new ContentQuery(new URL(
    "https://sites.google.com/feeds/content/" + DOMAIN + "/" + SITE_NAME + "/"));

query.setPath("/7D502A5D7080697F65F838D56C4C4A09");
ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
for (BaseContentEntry entry : contentFeed.getEntries()) {
    System.out.println("Title: " + entry.getTitle().getPlainText());
}

这个版本抛出错误:

SitesService client = new SitesService("Test");
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setScope("https://sites.google.com/feeds/content/");
client.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer());

ContentQuery query = new ContentQuery(new URL(
    "https://sites.google.com/feeds/content/" + DOMAIN + "/" + SITE_NAME + "/"
    + "?xoauth_requestor_id=" + USER_NAME));


query.setPath("/7D502A5D7080697F65F838D56C4C4A09");
ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
for (BaseContentEntry entry : contentFeed.getEntries()) {
    System.out.println("Title: " + entry.getTitle().getPlainText());
}

我还注意到,当我删除该行时:

query.setPath("/7D502A5D7080697F65F838D56C4C4A09");

错误不会被抛出,但显然它会返回站点中的所有页面。

4

1 回答 1

0

你的网站是公开的吗?或者您是否启用了页面级别权限,并且该特定页面的查看/编辑权限人数有限?
这可能是原因。

于 2013-12-24T07:28:49.190 回答