Wie richte ich den Golang-Client für die Google Kalender-API mithilfe eines Dienstkontos ein? Dies ist ein häufiges Problem, auf das viele Entwickler bei der Verwendung der Google Kalender-API stoßen. In diesem Artikel stellt Ihnen der PHP-Editor Banana ausführlich vor, wie Sie mithilfe eines Dienstkontos den Golang-Client konfigurieren, damit Sie reibungslos mit der Google Calendar API interagieren können. Unabhängig davon, ob Sie Anfänger oder erfahrener Entwickler sind, bietet Ihnen dieser Artikel eine klare Anleitung, die Ihnen den schnellen Einstieg in den Prozess erleichtert. Lasst uns gemeinsam erkunden!
Ich habe viel Dokumentation zum Google API-Client für Benutzer gesehen, aber nur sehr wenig über die Verwendung von Dienstkonten. Dies stellt nicht den Benutzer dar, ich möchte lediglich, dass der Client die Kalender-API mit einer Client-ID und einem Client-Geheimnis verwendet, die mir über Umgebungsvariablen bereitgestellt werden (ich möchte nicht mit einer Datei beginnen).
Das habe ich bisher:
package main import ( "context" clientcredentials "golang.org/x/oauth2/clientcredentials" google "golang.org/x/oauth2/google" calendar "google.golang.org/api/calendar/v3" apioption "google.golang.org/api/option" ) func main() { config := &clientcredentials.config{ clientid: "<my_id>", clientsecret: "-----begin private key-----\n...", tokenurl: google.endpoint.tokenurl, } ctx := context.background() client := config.client(ctx) service, _ := calendar.newservice(ctx, apioption.withhttpclient(client)) calendarlist, err := service.calendarlist.list().do() }
Aber ich erhalte die folgende Fehlermeldung:
Get "https://www.googleapis.com/calendar/v3/users/me/calendarList?alt=json&prettyPrint=false": oauth2: cannot fetch token: 400 Bad Request Response: { "error": "unsupported_grant_type", "error_description": "Invalid grant_type: client_credentials" }
Jede Hilfe hier ist sehr willkommen! Ich bin neu bei Golang, Oauth2 und Google API :)
@tanaikes Antwort hat mich auf den richtigen Weg gebracht. Dies ist, was ich letztendlich verwendet habe:
package main import ( "context" "encoding/json" "fmt" googleoauth "golang.org/x/oauth2/google" calendar "google.golang.org/api/calendar/v3" apioption "google.golang.org/api/option" ) var service *calendar.service // note that some of the fields are optional: type googleauthconfig struct { type string `json:"type"` projectid string `json:"project_id,omitempty"` clientemail string `json:"client_email"` clientid string `json:"client_id,omitempty"` clientsecret string `json:"private_key"` clientsecretid string `json:"private_key_id,omitempty"` authurl string `json:"auth_uri,omitempty"` tokenurl string `json:"token_uri,omitempty"` authprovidercerturl string `json:"auth_provider_x509_cert_url,omitempty"` clientcerturl string `json:"client_x509_cert_url,omitempty"` } func main() { authconfig := googleauthconfig{ type: "service_account", clientemail: "<a href="https://www.php.cn/link/89fee0513b6668e555959f5dc23238e9" class="__cf_email__" data-cfemail="82e3e1e1edf7ecf6b3b0b1c2f2f0ede8e7e1f6afb6b7b4acebe3eface5f1e7f0f4ebe1e7e3e1e1edf7ecf6ace1edef">[email protected]</a>", clientid: "1234", clientsecret: "-----begin private key-----\n...\n-----end private key-----\n", authurl: googleoauth.endpoint.authurl, tokenurl: googleoauth.endpoint.tokenurl, } authconfigjson, err := json.marshal(authconfig) ctx := context.background() service, err = calendar.newservice(ctx, apioption.withcredentialsjson([]byte(authconfigjson))) }
Beachten Sie, dass ich nach dem Hinzufügen des Dienstkontos zum Kalender keine domänenweite Delegation konfigurieren oder mich als Benutzer ausgeben musste; es hat einwandfrei funktioniert.
Nachdem die E-Mail-Adresse des Kontos zum Kalender hinzugefügt wurde, muss das Dienstkonto die Kalendereinladung noch annehmen. Dies kann erfolgen durch:
entry := calendar.CalendarListEntry{Id: calendarID} service.CalendarList.Insert(&entry).Do()
Das obige ist der detaillierte Inhalt vonSo richten Sie den Golang-Client für die Google Kalender-API mithilfe eines Dienstkontos ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!