我使用服务帐户通过管理目录和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