Nullable<T>

GoogleのSheetsAPIを叩く

February 04, 2019

SheetsAPIを叩く

  1. GCPにプロジェクトを作成する
  2. サービスアカウントを作成する
  3. スプレッドシートを作成し、共有する
  4. モジュールを落として、コードを書いて実行

上記が基本的な流れ。

OAuthではなくJWTでAPIを叩いてみる。

GoogleDevelopersのドキュメントにはOAuthのサンプルコードしか置いてなかったので備忘録という意味でも書き残しておく。

GCPにプロジェクトを作成するステップは割愛。

サービスアカウントを作成する

認証情報 => 認証情報を作成 => サービス アカウントキー

ScreenShot1

サービスアカウントキー を押すと入力画面が出てくる。

ScreenShot2

新しいサービスアカウントを選択する。

サービスアカウント名とサービスアカウントIDは適当でOK。

キーのタイプはJSONを選択する。

スプレッドシートを作成し、共有する

スプレッドシートを新規作成し、JSONの中身のメールアドレスをスプレッドシートで共有する

ScreenShot3

モジュールを落とす

# npm
$ npm intall googleapis --save-dev

# yarn
$ yarn add googleapis -D

JavaScriptを書く

const fs = require('fs');
const {google} = require('googleapis');

const SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly'];

fs.readFile('ダウンロードしたjsonファイルのパス', (err, content) => {
  if (err) return console.log('Error loading client secret file:', err);
  authorize(JSON.parse(content), listMajors);
});

const  authorize = (credentials, callback) => {
  const {client_email, private_key} = credentials;
  const jwtClient = new google.auth.JWT(
        clientEmail,
        null,
        privateKey,
        SCOPES,
        null);
  callback(jwtClient);
}

const listMajors = (auth) => {
  const sheets = google.sheets({version: 'v4', auth});
  sheets.spreadsheets.values.get({
    spreadsheetId: 'スプレッドシートID',
    range: 'シート名!セル:セル',
  }, (err, res) => {
    if (err) return console.log('The API returned an error: ' + err);
    const rows = res.data.values;
    if (rows.length) {
      console.log('Name, Major:');
      rows.map((row) => {
        console.log(`${row[0]}, ${row[4]}`);
      });
    } else {
      console.log('No data found.');
    }
  });
}

実行する

$ node ./script.js

おわりに

GoogleDevelopersのドキュメントってマジで書いてないことがあったりするから探すメンタルを保てない。


Written by Ryo @neer_chan

© 2018-2020 Nullable<T>