Ich führe ein Google Apps-Skript mit meiner C# App etwa alle 1,5 Minuten aus. Das Apps-Skript verschiebt Inhalte zwischen Tabellenkalkulationen und Bearbeitungsblättern. Ich benutze auch die Drive API.Google apps Skriptausführung API-Dienst Autorisierung schlägt einmal pro Stunde fehl
Mein Skript läuft über lange Zeiträume, außer für die Tatsache, dass ich eine Autorisierungsfehler für 5 Minuten jede Stunde bekomme.
Hier ist mein Code, die Zulassung behandelt:
class Authentication
{
public static ScriptService ScriptsAuthenticateOauth(UserCredential credential)
{
try
{
ScriptService service = new ScriptService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "MyApp",
});
return service;
}
catch (Exception ex)
{
Console.WriteLine(DateTime.Now.ToString("HH:mm") + ": An authentication error occurred: " + ex.InnerException);
return null;
}
}
public static UserCredential getCredential(string clientId, string clientSecret, string userName)
{
string[] scopes = new string[] { DriveService.Scope.Drive, // view and manage your files and documents
DriveService.Scope.DriveAppdata, // view and manage its own configuration data
DriveService.Scope.DriveAppsReadonly, // view your drive apps
DriveService.Scope.DriveFile, // view and manage files created by this app
DriveService.Scope.DriveMetadataReadonly, // view metadata for files
DriveService.Scope.DriveReadonly, // view files and documents on your drive
DriveService.Scope.DriveScripts, // modify your app scripts
ScriptService.Scope.Drive,
"https://www.googleapis.com/auth/spreadsheets",
"https://spreadsheets.google.com/feeds",
"https://docs.google.com/feeds"};
return GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret }
, scopes
, userName
, CancellationToken.None
, new FileDataStore("Google.Sheet.Sync.Auth.Store")).Result;
}
public static DriveService DriveAuthenticateOauth(UserCredential credential)
{
try
{
DriveService service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "MyApp",
});
// Console.WriteLine("Auth success");
return service;
}
catch (Exception ex)
{
// Console.WriteLine(ex.InnerException);
Console.WriteLine(DateTime.Now.ToString("HH:mm") + ": An authentication error occurred: " + ex.InnerException);
return null;
}
}
}
ich so meine Dienste erhalten:
var credential = Authentication.getCredential(CLIENT_ID, CLIENT_SECRET, Environment.UserName);
DriveService driveService = Authentication.DriveAuthenticateOauth(credential);
ScriptService scriptService = Authentication.ScriptsAuthenticateOauth(credential);
Aber um das Ende der Stunde, wirft der apps Skriptaufruf folgende Fehlermeldung:
Script error message: Authorization is required to perform that action.
Nur um klar zu sein, es funktioniert zu allen anderen Zeiten, nur nicht in diesen 5 Minuten n Ohr das Ende der Stunde. Ich habe Google Drive API sowohl auf meiner Entwicklerkonsole als auch unter Ressourcen> Erweiterte Google-Dienste im Apps-Skript-Editor aktiviert.
Also, was ist los? Kann das behoben werden?
scheint, dass Sie ein abgelaufenes Zugriffs-Token übergeben. Wenn ja, lesen Sie über oauth2 und wie man mit Refresh- und Access-Token umgeht. –