可以使用带有站点API的谷歌服务帐户



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

您可以使用网站API的服务帐户。您所需要做的就是使用SignedJwtAssertionCredentials,从后台模拟用户并访问GDataAPI。

以下是代码片段:

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)

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

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并自己刷新Credential

Google Sites API页面表示[1]您可以使用它"创建新网站或复制现有网站"。

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

相关内容

  • 没有找到相关文章

最新更新