GoogleAPIのClientログインがサポート終了したため、これまでのソースで認証しようとすると下記のエラーが出てしまいます。
Execution of authentication request returned unexpected result: 404
これまでのソース
program.cs
var service = new SpreadsheetsService("ApplicationName");
service.setUserCredentials("hoge@gmail.com", "password");
//対象のスプレッドシートを検索
var query = new SpreadsheetQuery();
query.Title = "spreadsheetName";
var feed = service.Query(query);
var spreadsheet = (SpreadsheetEntry)feed.Entries[0];
OAuth2認証
具体的なソースは下記参照。
NuGetで「Google.Apis.Auth」を追加しておく必要があります。
下記ソース内に登場するClientId、ClientSecretはデベロッパーコンソールで取得します。
https://console.developers.google.com/project
具体的には、左メニューのAPIs&auth → Credentials → OAuth →Create new Client IDをクリックし、
Installed application、Otherを選択してOKをクリックすると作成されます。
このコンソールアプリを実行すると、ブラウザが立ち上がって認証を求められるので、認証することでAPIにアクセスできるようになります。
直したソース
program.cs
var clientId = "ClientId";
var clientSecret = "ClientSecret";
var userCredential = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = clientId,
ClientSecret = clientSecret
},
new[]
{
"https://spreadsheets.google.com/feeds"
},
"hoge@gmail.com",
CancellationToken.None,
new FileDataStore("folderName")
).Result;
var auth = new OAuth2Parameters
{
ClientId = clientId,
ClientSecret = clientSecret,
RedirectUri = "urn:ietf:wg:oauth:2.0:oob",
Scope = "https://spreadsheets.google.com/feeds",
AccessToken = userCredential.Token.AccessToken,
RefreshToken = userCredential.Token.RefreshToken,
TokenType = userCredential.Token.TokenType,
};
var requestFactory = new GOAuth2RequestFactory(null, "ApplicationName", auth);
var service = new SpreadsheetsService("ApplicationName")
{
Credentials = new GDataCredentials(userCredential.Token.TokenType + " " + userCredential.Token.AccessToken),
RequestFactory = requestFactory
};
//更新対象のスプレッドシートを検索
var query = new SpreadsheetQuery();
query.Title = "spreadsheetName";
var feed = service.Query(query);
var spreadsheet = (SpreadsheetEntry)feed.Entries[0];