iT邦幫忙

2

【我可以你也可以的Node.js】第二三篇 - 蛤!原來串接 Google Sheet API 那麼簡單?

最近工作為了寫測試想要敵不動我不動,敵欲動我先跑。
想要藉由抓 Google Sheet 資料來檢查目前系統參數是否正常,
但是又不想要每次如果系統一有改動我都還要...
開Ticket -> 改 Code -> Code Review -> Merge 。
那如果使用 Google Sheet,我就只要改上面的參數,旁邊紀錄一下就完事了~
頂多規定旁邊註記更動人,並且 Google 還幫你版控。
是不是方便很多!?

最初其實我本來就有串過 Google 官方提供的 Sheet API,不難...但是說實話什麼都要自己來滿累的,於是乎我去 npm 找了一下相關套件。
於是乎找到了這個
google-spreadsheet

先來看成果

範例資料

執行結果

目前個人使用體驗滿不錯的,今天也手把手教大家怎麼串。
基本上步驟只有三個~

  1. 申請憑證
  2. 開權限
  3. 串起來

申請一組憑證

  1. 先建立專案 (Google Developers Console連結)
    • 第一次使用的可能會看到這個,同意就好(X
    • 點選左上方選取專案
    • 建立一個專案
    • 確認切換專案成功
  2. 啟用 Google Sheet API
    • 點選 ENABLE APPS AND SERVICES
    • 找一下 google sheet
    • 啟用
  3. 新增憑證
    • 切換到憑證的頁面點選建立憑證服務帳戶
    • 沒有特殊需求就可以像我一樣直接按繼續(X
    • 這邊也是,沒有特殊需求就可以像我一樣直接按繼續(X
    • 建立完成後應該會有多一個服務帳戶點擊那個服務帳戶
    • 新增金鑰
    • 選擇 JSON
    • 他會自動幫你下載下來放進你專案的目錄裡

開啟 Google Sheet 權限

  1. 點選共用
  2. 輸入你剛剛申請的服務帳號信箱地址

串起來!

先來安裝一下剛剛講的套件,
老司機的你一定知道怎麼做。

npm install google-spreadsheet

直接開寫

// googleSheet.js

const { GoogleSpreadsheet } = require('google-spreadsheet');

/**
 * @param  {String} docID the document ID
 * @param  {String} sheetID the google sheet table ID
 * @param  {String} credentialsPath the credentials path defalt is './credentials.json'
 */
async function getData(docID, sheetID, credentialsPath = './credentials.json') {
  const result = [];
  const doc = new GoogleSpreadsheet(docID);
  const creds = require(credentialsPath);
  await doc.useServiceAccountAuth(creds);
  await doc.loadInfo();
  const sheet = doc.sheetsById[sheetID];
  const rows = await sheet.getRows();
  for (row of rows) {
    result.push(row._rawData);
  }
  return result;
};

module.exports = {
  getData,
};

Sheet 的 docID 和 sheetID 請參照以下網址規則。

https://docs.google.com/spreadsheets/d/<docID>/edit#gid=<sheetID>

./credentials.json 就是你剛剛下載的憑證,記得路徑和名字。

執行它

// test.js
const { getData } = require('./googleSheet.js');

(async () => {
  const resp = await getData('<docID>', '<sheetID>');
  console.log(resp);
})();

此篇到此結束~
希望對你有幫助~


另外這官方也有滿詳細的文件可供參考,可點擊以下連結看一下,如果是英文真的看不懂也可以與我私下討論或底下留言。
google-spreadsheet


尚未有邦友留言

立即登入留言