sironekotoroの日記

Perl で楽をしたい

Perl から Google Sheet を読み書きする・・・ための3種の TOKEN を手に入れる

いやもう、ほんと大変だったわ・・・(以下おっさんの一人語りが続くのでカット)

「かつての自分」に教えるつもりで「APIを利用する前」から始めます。

その1:Google Cloud Platform で CLIENT ID と CLIENT SECRET を手に入れる

Google Cloud Platform にログインできている、というところから始めます。(画像右上の「コンソール」というリンク)

f:id:sironekotoro:20210528113746p:plain

  1. Google Cloud Platform にログイン後、左上のロゴの右にあるグループ名、またはプロジェクト名をクリックする

    f:id:sironekotoro:20201018141614p:plain

  2. プルダウンメニュー右上にある「新しいプロジェクト」をクリックする

    f:id:sironekotoro:20201018141730p:plain

  3. プロジェクト名を入力し(最初から入力されているものでも良い)、請求先アカウントを選択して「作成」ボタンを押す

    f:id:sironekotoro:20201018141903p:plain

  4. 少し待つと、プロジェクト作成が完了する

    f:id:sironekotoro:20201018142025p:plain

  5. ロゴ横のプロジェクト名をクリックし、作成したものを選択する

  6. ロゴをクリックし、左側メニュー「ホーム」、さらに「ダッシュボード」を選択する

  7. 左側メニューの「APIとサービス」、さらに「APIライブラリ」をクリックする

  8. APIとサービスを検索」の入力欄に sheets と入力すると、Google Sheets API が表示されるのでクリックした上で「有効にする」をクリックして選択する

    f:id:sironekotoro:20201018142345p:plain

  9. ロゴをクリックし、左側メニューの「APIとサービス」、さらに「OAuth同意画面」をクリックする。

    • 組織で運用している場合には、組織内部ユーザーだけが利用するものか、外部のユーザも利用できるものかを選択する画面が出る。

    • 今回はテスト運用するので「内部」を選択し「作成」をクリックする

    f:id:sironekotoro:20201018142218p:plain

  10. 「OAuth同意画面」の設定を行う

    • アプリケーション名:アプリケーション名、または自分がわかりやすいもの

    • Google API のスコープ:「スコープを追加」ボタンをクリックし以下のものにチェックを入れて右下の「追加」をクリックする

    • 画面下にある「保存」ボタンを押す

    f:id:sironekotoro:20201018142521p:plain

    f:id:sironekotoro:20201018142843p:plain

  11. 左側メニュー「認証情報」をクリックする

  12. 画面上部にある「認証情報を作成」から「OAuth クライアント ID」を選択する

    f:id:sironekotoro:20201018143147p:plain

  13. アプリケーションの種類を選択するプルダウンメニュー が出てくるので、ここでは「デスクトップアプリ」を選択し、「作成」ボタンをクリックする

    • 手元のローカル環境からクラウドにある Google Sheets API を叩くので・・・という理解

    • 名前はデフォルトのままで良い

    f:id:sironekotoro:20201018143441p:plain

  14. おめでとう!ここでやっと CLIENT ID と CLIENT SECRET が発行されました!!

    • ここで控えておく

    f:id:sironekotoro:20201018143647p:plain

    • 控えなくても、左側メニューの「APIサービス」から「認証情報」を選び、OAuth 2.0 クライアントID 欄にあるユーザー右の 鉛筆マークから再確認ができる

    f:id:sironekotoro:20201018144502p:plain

その2:モジュールを使って REFRESH TOKEN を入手する

先に取得した CLIENT ID と CLIENT SECRET を用いてGoogle から REFRESH TOKEN の取得に必要な URL を返してもらいます。

ここでの手続きには認可のプロトコルである OAuth2 が用いられています。もちろんここはモジュールに頼ります。

様々なモジュールがありますが、今回は Net::Google::OAuth を利用します。

いつもの $ cpanm Net::Google::OAuth でインストール。

metacpan.org

以下のスクリプトに以下の情報を埋めた上で実行します。

  • $CLIENT_ID:その1で入手したものを利用

  • $CLIENT_SECRET:その1で入手したものを利用

  • $SCOPE:今回はspreadsheets

  • $EMAILGoogle 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部分をコピペしてブラウザに貼り付けて実行するとー?

サービスやお仕事とかでたまーに出てくる認証画面が出ました。よし!と許可すると・・・

f:id:sironekotoro:20201018144721p:plain

ページを表示できない?localhost:8000?え?手元にウェブサーバ立てるの・・・?

f:id:sironekotoro:20201018144804p:plain

となったんですが(少なくとも自分はそうなった)、ここで重要なのは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 の編集にチャレンジします・・・ってところで、すでにもう十分長いので次回に続きます。