Perl から Google Sheet を読み書きする・・・ための3種の TOKEN を手に入れる
いやもう、ほんと大変だったわ・・・(以下おっさんの一人語りが続くのでカット)
「かつての自分」に教えるつもりで「APIを利用する前」から始めます。
その1:Google Cloud Platform で CLIENT ID と CLIENT SECRET を手に入れる
Google Cloud Platform にログインできている、というところから始めます。(画像右上の「コンソール」というリンク)
Google Cloud Platform にログイン後、左上のロゴの右にあるグループ名、またはプロジェクト名をクリックする
プルダウンメニュー右上にある「新しいプロジェクト」をクリックする
プロジェクト名を入力し(最初から入力されているものでも良い)、請求先アカウントを選択して「作成」ボタンを押す
少し待つと、プロジェクト作成が完了する
ロゴ横のプロジェクト名をクリックし、作成したものを選択する
ロゴをクリックし、左側メニュー「ホーム」、さらに「ダッシュボード」を選択する
「APIとサービスを検索」の入力欄に
sheets
と入力すると、Google Sheets API が表示されるのでクリックした上で「有効にする」をクリックして選択するロゴをクリックし、左側メニューの「APIとサービス」、さらに「OAuth同意画面」をクリックする。
組織で運用している場合には、組織内部ユーザーだけが利用するものか、外部のユーザも利用できるものかを選択する画面が出る。
今回はテスト運用するので「内部」を選択し「作成」をクリックする
「OAuth同意画面」の設定を行う
アプリケーション名:アプリケーション名、または自分がわかりやすいもの
Google API のスコープ:「スコープを追加」ボタンをクリックし以下のものにチェックを入れて右下の「追加」をクリックする
Scope: ../auth/spreadsheets
説明: Google ドライブのスプレッドシートの表示、編集、作成、削除
画面下にある「保存」ボタンを押す
左側メニュー「認証情報」をクリックする
画面上部にある「認証情報を作成」から「OAuth クライアント ID」を選択する
アプリケーションの種類を選択するプルダウンメニュー が出てくるので、ここでは「デスクトップアプリ」を選択し、「作成」ボタンをクリックする
おめでとう!ここでやっと CLIENT ID と CLIENT SECRET が発行されました!!
- ここで控えておく
- 控えなくても、左側メニューの「APIサービス」から「認証情報」を選び、OAuth 2.0 クライアントID 欄にあるユーザー右の 鉛筆マークから再確認ができる
その2:モジュールを使って REFRESH TOKEN を入手する
先に取得した CLIENT ID と CLIENT SECRET を用いてGoogle から REFRESH TOKEN の取得に必要な URL を返してもらいます。
ここでの手続きには認可のプロトコルである OAuth2 が用いられています。もちろんここはモジュールに頼ります。
様々なモジュールがありますが、今回は Net::Google::OAuth
を利用します。
いつもの $ cpanm Net::Google::OAuth
でインストール。
以下のスクリプトに以下の情報を埋めた上で実行します。
$CLIENT_ID
:その1で入手したものを利用$CLIENT_SECRET
:その1で入手したものを利用$SCOPE
:今回はspreadsheets
$EMAIL
:Google Cloud Platform でログインした時のメールアドレス
use strict; use warnings; use Net::Google::OAuth; my $CLIENT_ID = ""; my $CLIENT_SECRET = ""; my $SCOPE = 'spreadsheets'; my $EMAIL = 'hogehoge@sironekotoro.com'; my $oauth = Net::Google::OAuth->new( -client_id => $CLIENT_ID, -client_secret => $CLIENT_SECRET, ); $oauth->generateAccessToken( -scope => $SCOPE, -email => $EMAIL, ); print "This is REFRESH TOKEN:\n"; print "=" x 20 . "\n"; print $oauth->getRefreshToken() . "\n"; print "=" x 20 . "\n";
そして、ターミナルから実行すると・・・謎の長いURLが表示されます。
改行いれてURLが分かりやすくしてますが、今回はこんな感じ
$ perl net_google_oauth.pl Please open this URL in your browser: https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&client_id={CLIENT ID}&login_hint=hogehoge@sironekotoro.com&nonce=89497-868562-391621&redirect_uri=http%3A%2F%2Flocalhost%3A8000&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets&state=uniq_state_32316 Insert redirected address from browser here:
このターミナルの画面は後で使うので、閉じずに開いておいてください。
この真ん中のURL部分をコピペしてブラウザに貼り付けて実行するとー?
サービスやお仕事とかでたまーに出てくる認証画面が出ました。よし!と許可すると・・・
ページを表示できない?localhost:8000?え?手元にウェブサーバ立てるの・・・?
となったんですが(少なくとも自分はそうなった)、ここで重要なのはURLです。
この時点のブラウザのURL欄はこのようになっているはずです。
http://localhost:8000/?state=uniq_state_32316&code=4/0AfDhmriDKniEEcVnKYQsaux_qTkOwTQGP8KFMeDDPLfoQQFCPSCGnasgiIylr-TRgNMTjA&scope=https://www.googleapis.com/auth/spreadsheets
このURLの中にあるcode=
に続く文字列、これが REFRESH_TOKEN を取得するための鍵になります。上の例だと
4/0AfDhmriDKniEEcVnKYQsaux_qTkOwTQGP8KFMeDDPLfoQQFCPSCGnasgiIylr-TRgNMTjA
です。
先に開いたままにしているターミナルに、この code が含まれている URL をまるっと貼り付けると・・・最後の鍵、REFRESH TOKEN が手に入ります。
次回に続く
さて、ここまでの長い旅路で Google Sheets API を利用するために必要な3つのキーが揃いました。
- CLIENT ID
- CLIENT SECRET
- REFRESH TOKEN
では実際に Google Sheet の編集にチャレンジします・・・ってところで、すでにもう十分長いので次回に続きます。