Google PhotosのAPIつかって自動アップロードするバッチつくってみたくて調べたところ、 GCPサービスみたくサービスアカウント使う、ってことはできないみたいだった
https://developers.google.com/photos/library/guides/authentication-authorization#service-accounts
OAuth 2.0の認証フローをたどる必要があるみたい。
とはいえバッチつくるとき、初回のみ認証→次からはrefresh tokenで再利用という流れになるんだろうけど 初回のみ認証の実装をケチりたかったので、refresh token取得まで簡単に取得できるツールみたいなの書いてみた。
GCPサイドバー->APIとサービス->認証情報 より、認証情報を作成->OAuthクライアントID を選択
用途に応じた種類を選ぶ。任意の名前をつける。JS生成元・リダイレクトURIは http://localhost:8080 を指定
認証情報一覧から、ダウンロードボタンを押す。client_secret_XXX.apps.googleusercontent.com..jsonのようなjsonファイルが手に入る。
token取得ツールインストール
go get github.com/abekoh/get-google-tokens
次を実行。例では、Google Photos APIにアップロードする権限のみ。
get-google-tokens -json client_secret_XXX.apps.googleusercontent.com.json -scope https://www.googleapis.com/auth/photoslibrary.appendonly
photoのスコープはここ参照 https://developers.google.com/photos/library/guides/authentication-authorization
実行するとURLが表示されるので、アクセス。そしてスコープを許可。「このアプリは確認されていません」と表示されても進める。
リダイレクトされてlocalhostに移った後、ターミナルのほうを確認。Access TokenとRefresh Tokenが表示されている。
仕組みとしては、リダイレクト時にURLパラメータにcode=
と認証コードが入るので、
それをWebサーバで受け取って、チャンネル送信して、POSTリクエストでトークン取得するという流れ。
Go久しぶり書きましたが、こんな感じでWebサーバー立ち上げ簡単にできる点、CLI化も楽な点がよいですね。