我正在使用服务帐户通过管理员目录和Google+域名API成功模拟管理员用户,但我无法确定网站是否可以使用服务帐户。它甚至可能吗?我指的是允许您创建和删除网站的API,而不是用于管理内容的网站站长工具API等。
答案 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]您可以"创建新网站或复制现有网站"用它。
答案 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}}你自己。