可以将Google服务帐户与Sites API一起使用

时间:2013-11-26 13:53:43

标签: google-api google-api-java-client google-sites

我正在使用服务帐户通过管理员目录和Google+域名API成功模拟管理员用户,但我无法确定网站是否可以使用服务帐户。它甚至可能吗?我指的是允许您创建和删除网站的API,而不是用于管理内容的网站站长工具API等。

3 个答案:

答案 0 :(得分:1)

您可以将服务帐户与Sites API一起使用。您需要做的就是使用SignedJwtAssertionCredentials,从后台模拟用户并访问GData API。

以下是代码段:

credentials = SignedJwtAssertionCredentials(
      SERVICE_ACCOUNT_EMAIL,
      file(SERVICE_ACCOUNT_PEM_FILE_PATH, "rb").read(),
      scope=["https://sites.google.com/feeds/"],
      prn=userEmailYouWantToImpersonate
    )

http = httplib2.Http()
http = credentials.authorize(http)

sitesClient = gdata.sites.client.SitesClient(source='mycompany', site='mySite', domain='mydomain')
sitesClient.auth_token = TokenFromOAuth2Creds(credentials)
feed = sitesClient.GetContentFeed()

class TokenFromOAuth2Creds:
    def __init__(self, creds):
        self.creds = creds
    def modify_request(self, req):
        if self.creds.access_token_expired or not self.creds.access_token:
            self.creds.refresh(httplib2.Http())
        self.creds.apply(req.headers)

答案 1 :(得分:0)

Google协作平台API页面显示[1]您可以"创建新网站或复制现有网站"用它。

[1] https://developers.google.com/google-apps/sites

答案 2 :(得分:0)

是的,这是可能的。这是一个代码示例:

SitesService sitesService = new SitesService("MyApplication");
final GoogleCredential credential = new GoogleCredential.Builder()
                .setTransport(new NetHttpTransport()).setJsonFactory(new JacksonFactory())
                .setServiceAccountId("XXXX.apps.googleusercontent.com")
                .setServiceAccountScopes(Collections.singleton(SERVICE_SCOPES))
                .setServiceAccountPrivateKeyFromP12File(new File("key.p12"))
                .setServiceAccountUser("mysiteowner@domain.com").build();
sitesService.setOAuth2Credentials(credential);

唯一需要注意的是,某些SitesService方法可能无法正确刷新令牌,在这种情况下,您必须抓住SessionExpiredException并刷新{ {1}}你自己。