将Google SpreadsheetsService与服务帐户配合使用

时间:2014-08-21 16:04:02

标签: c# .net gdata google-spreadsheet-api google-api-dotnet-client

我需要对Google云端硬盘中的现有电子表格进行一些更改。我希望使用预定流程定期执行此操作。因此我决定使用服务帐户身份验证,此处将对此进行说明https://developers.google.com/drive/web/delegation

示例工作正常,我可以连接到Plus API,但是我需要连接到Google Spreadsheet API。问题是SpreadsheetsService似乎不像DriveService那样使用p12文件或Initializer类。

SpreadSheetsService只有2种身份验证方法,似乎不需要提供url - SetAuthenticationToken()和setUserCredentials()。没有明显的方法可以将p12文件传递给SpreadsheetService。

有人解决了这个问题吗?我对任何"脏"像解密p12文件这样的解决方案(以为我不认为谷歌为此提供密码)或将认证标题从DriveService放到SpreadsheetService。有人解决了这个问题吗?

或者也许C#的第三方库支持通过服务帐户登录Spreadsheet API?

感谢。

1 个答案:

答案 0 :(得分:1)

请参阅How to use SpreadsheetsService authenticated by ServiceAccountCredential?

ServiceAccountCredential credential = new ServiceAccountCredential(
  new ServiceAccountCredential.Initializer(ServiceAccount) {
    Scopes = new[] {DriveService.Scope.Drive,"https://spreadsheets.google.com/feeds"}
  }.FromCertificate(certificate)
);
bool success = credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Result;

....

SpreadsheetsService spreadsheetsService = new SpreadsheetsService(applicationName);
var requestFactory = new Google.GData.Client.GDataRequestFactory(applicationName);
  requestFactory.CustomHeaders.Add(string.Format("Authorization: Bearer {0}", credential.Token.AccessToken));
  spreadsheetsService.RequestFactory = requestFactory;