Golangを使用して、URLを入力としてスプレッドシートにアクセスして更新するためのAWS Lambdaコードを書いています。これまでのところ、Googleガイド-https://developers.google.com/sheets/api/quickstart/goを実行することで、OAuthクライアントIDを使用してローカルでスプレッドシートにアクセスできます。
しかし、AWS Lambdaからコードを実行したいので、Googleサービスアカウントを使用して認証を実行したいと思います。サービスアカウントを作成し、以下の情報を含む認証情報を受け取りました。
{
"type": "service_account",
"project_id": "quickstart-1XXXXXXX806",
"private_key_id": "a1XXXXXXXXXXXXXXXXXXXXX3c3e5d8e",
"private_key": "-----BEGIN PRIVATE KEY-----\nMZ4C8......\nD\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "1XXXXXXXXXXXXXXXXX2",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/lambda%40quickstart-1573627656806.iam.gserviceaccount.com"
}
多くのドキュメントを読みましたが、Golangコードを使用したGoogleサービスアカウントを使用してGoogleスプレッドシートにアクセスするためのリファレンスが見つかりませんでした。すべてのドキュメントは次のGithubリンクを参照しています-https ://github.com/googleapis/google-api-go-clientしかし、最近Golangでの作業を開始したばかりなので、実装方法がよくわかりません。Googleガイドを読んだ後、次のようにサービスアカウントに必要なフローを理解しました-
しかし、私はまだこのためのGolangコードを書くことができません。誰かがいくつかの参照を共有できれば幸いです:)
@ZektorHの回答は、このコードを完成させるのに役立ちました。以下は、サービスアカウントを使用してGoogleスプレッドシートからデータを取得するための完全な実用例です。
package main
import (
"fmt"
"log"
"golang.org/x/oauth2"
"golang.org/x/oauth2/jwt"
"google.golang.org/api/sheets/v4"
)
func main() {
// Create a JWT configurations object for the Google service account
conf := &jwt.Config{
Email: "[email protected]",
PrivateKey: []byte("-----BEGIN PRIVATE KEY-----\nxxxxxx\n-----END PRIVATE KEY-----\n"),
PrivateKeyID: "a1a6xxxxxxxxxxxxxxxxxxxxxxxe5d8e",
TokenURL: "https://oauth2.googleapis.com/token",
Scopes: []string{
"https://www.googleapis.com/auth/spreadsheets.readonly",
},
}
client := conf.Client(oauth2.NoContext)
// Create a service object for Google sheets
srv, err := sheets.New(client)
if err != nil {
log.Fatalf("Unable to retrieve Sheets client: %v", err)
}
// Change the Spreadsheet Id with yours
spreadsheetId := "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
// Define the Sheet Name and fields to select
readRange := "Sheet1!A2:B"
// Pull the data from the sheet
resp, err := srv.Spreadsheets.Values.Get(spreadsheetId, readRange).Do()
if err != nil {
log.Fatalf("Unable to retrieve data from sheet: %v", err)
}
// Display pulled data
if len(resp.Values) == 0 {
fmt.Println("No data found.")
} else {
fmt.Println("Name, Major:")
for _, row := range resp.Values {
fmt.Printf("%s, %s\n", row[0], row[1])
}
}
}
また、次のようなエラーが発生した場合も注意してください。
googleapi:エラー403:呼び出し元に権限がありません、禁止されています
その後、おそらくあなたはあなたのグーグルアカウントにそのスプレッドシートにアクセスする許可を与えていません。もしそうなら
ブラウザで、操作したいGoogleシートに移動するだけです。
画面右上の共有に移動します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加