【enebular】Node-RED でGoogleスプレッドシートに読み書きする

Node-RED でGoogleスプレッドシート に読み書きする方法を毎回忘れるので、自分用備忘録を兼ねてここに書き留めておきます。


## Google Cloud Platform での設定

### API発行

Google Cloud Platform を開く
https://console.cloud.google.com/apis/dashboard

以下の画像の矢印のところをクリック
[![Image from Gyazo](https://i.gyazo.com/13f2604ea5db5e25bc2364c94d129866.png)](https://gyazo.com/13f2604ea5db5e25bc2364c94d129866)

「新しいプロジェクト」をクリック
[![Image from Gyazo](https://i.gyazo.com/7b2add2ac3508b881b74bef478b4b38f.png)](https://gyazo.com/7b2add2ac3508b881b74bef478b4b38f)

新しいプロジェクトができたら



「ＡＰＩとサービスの有効化」
[![Image from Gyazo](https://i.gyazo.com/8f17f2f9539e8ab34cbc77cf70601b65.png)](https://gyazo.com/8f17f2f9539e8ab34cbc77cf70601b65)

「Google Sheets API」 を検索し、「有効にする」をクリック
[![Image from Gyazo](https://i.gyazo.com/2f9cf13739d7b137d5790ec84f52ebd9.png)](https://gyazo.com/2f9cf13739d7b137d5790ec84f52ebd9)

認証情報 ＞ 認証情報を作成
[![Image from Gyazo](https://i.gyazo.com/513c790696909dbf537226d540b677e4.png)](https://gyazo.com/513c790696909dbf537226d540b677e4)

APIキーを選択
[![Image from Gyazo](https://i.gyazo.com/d1d04f295a90c770cfe7ed265148ac5a.png)](https://gyazo.com/d1d04f295a90c770cfe7ed265148ac5a)

APIキーができる。
[![Image from Gyazo](https://i.gyazo.com/666cd67663c2810029d09aab4a10bcaa.png)](https://gyazo.com/666cd67663c2810029d09aab4a10bcaa)

API キーを控えておく

<br>

### 鍵の作成

サービスアカウントの管理をクリック
[![Image from Gyazo](https://i.gyazo.com/3a42434adf5b7e8dfbaeb2622b427c39.png)](https://gyazo.com/3a42434adf5b7e8dfbaeb2622b427c39)

サービスアカウント作成をクリック
[![Image from Gyazo](https://i.gyazo.com/b8a62b9f4b1eb7fc59e431c6f82b18cd.png)](https://gyazo.com/b8a62b9f4b1eb7fc59e431c6f82b18cd)

サービスアカウント名を入力し、「作成して実行」をクリック
[![Image from Gyazo](https://i.gyazo.com/a71266b174b4994cb3c0e876c7522a99.png)](https://gyazo.com/a71266b174b4994cb3c0e876c7522a99)

サービス アカウントの権限（オーナーなど）を選択し、「続行」ボタンをクリックします。
[![Image from Gyazo](https://i.gyazo.com/4729c4c8f074ef669b3d85da1a44a32c.png)](https://gyazo.com/4729c4c8f074ef669b3d85da1a44a32c)

自分以外に許可する場合は入力だと思う。（違ったらすいません）

で、完了。
[![Image from Gyazo](https://i.gyazo.com/a923a5730b684c7bb1c74a52c7d2d95c.png)](https://gyazo.com/a923a5730b684c7bb1c74a52c7d2d95c)

鍵を管理をクリック
[![Image from Gyazo](https://i.gyazo.com/30ab1e1435ec208e34bd9259b47a0a10.png)](https://gyazo.com/30ab1e1435ec208e34bd9259b47a0a10)

鍵を追加　＞　新しい鍵を追加
[![Image from Gyazo](https://i.gyazo.com/2217e1fe400096895cd9d0af902aae3a.png)](https://gyazo.com/2217e1fe400096895cd9d0af902aae3a)

JSON　を選んで作成
[![Image from Gyazo](https://i.gyazo.com/f6720577f7594b84bd48fecdf06ecf21.png)](https://gyazo.com/f6720577f7594b84bd48fecdf06ecf21)

秘密鍵のJSONファイルがダウンロードされる。
あとで使うので保存場所を覚えときましょう。


そして、作成したサービスアカウントのメールアドレスを控えておきます。
[![Image from Gyazo](https://i.gyazo.com/4bc19aa906bfa5a768a0d4a39ce9b371.png)](https://gyazo.com/4bc19aa906bfa5a768a0d4a39ce9b371)


## Googleスプレッドシートの設定

Googleスプレッドシートの該当のファイルを開き、
「共有」をクリック
[![Image from Gyazo](https://i.gyazo.com/cf96b81a47bab9af805c06fabcc65d7b.png)](https://gyazo.com/cf96b81a47bab9af805c06fabcc65d7b)

「ユーザやグループを追加」に先ほどのサービスアカウントのメールアドレスを入力

[![Image from Gyazo](https://i.gyazo.com/f7b6d10f2470c70867c26e89331c4483.png)](https://gyazo.com/f7b6d10f2470c70867c26e89331c4483)

GoogleスプレッドシートのURLから、SpreadSheetIDを控える。　（後で使う）
以下のように、d/ と /edit の間がSpreadSheetIDです。

```
https://docs.google.com/spreadsheets/d/{SpreadSheetID}/edit#gid=0
```


<br>

## enebular

### Gsheetノードをインポート

ノードについての詳細はこちらを参照
https://flows.nodered.org/node/node-red-contrib-google-sheets

パレットの管理
[![Image from Gyazo](https://i.gyazo.com/1765ec56b5037b002f05ec5d5815eed7.png)](https://gyazo.com/1765ec56b5037b002f05ec5d5815eed7)

１、ノードを追加
２、「Gsheet」 で検索
３、ノードを追加
[![Image from Gyazo](https://i.gyazo.com/70f67a9e391ab461a2f3beeaffb52436.png)](https://gyazo.com/70f67a9e391ab461a2f3beeaffb52436)

追加
[![Image from Gyazo](https://i.gyazo.com/7156a0f3dab3f300362169b46d2d0b39.png)](https://gyazo.com/7156a0f3dab3f300362169b46d2d0b39)


「ノードをパレットに追加しました」とメッセージが出たらOK


### Googleスプレッドシートからデータを取得

まずは、以下のようにノードを繋げる。
[![Image from Gyazo](https://i.gyazo.com/96d366f044676e137507eb8b91162cc1.png)](https://gyazo.com/96d366f044676e137507eb8b91162cc1)


GSheet ノードをダブルクリック

以下の画像の鉛筆マークをクリック
[![Image from Gyazo](https://i.gyazo.com/faa0961b7971e7262d00f5443b51a72e.png)](https://gyazo.com/faa0961b7971e7262d00f5443b51a72e)

さきほど作成した鍵のJSON をメモ帳などエディターで開き、JSONの内容をすべてコピーして、Creds へペーストする。
[![Image from Gyazo](https://i.gyazo.com/3101359472755e907941bf6efac1e4d7.png)](https://gyazo.com/3101359472755e907941bf6efac1e4d7)

次にGSheetノードを以下のように編集する。

- Method :  Get Cells
- SpreadsheetID : さきほど控えたSpreadsheetID
- Cells : シート名＋セル
セルは複数選択できる。
（例）A2:A100 、　A2:E10

[![Image from Gyazo](https://i.gyazo.com/d02429584374ab5a22942de398fcb65f.png)](https://gyazo.com/d02429584374ab5a22942de398fcb65f)


これで、Injectノードを実行すると、デバッグウィンドウにGoogleスプレッドシートの値が表示されます。



### Googleスプレッドシートにデータを入力

Gsheet ノードのMethod を　Append Row にするだけ。

[![Image from Gyazo](https://i.gyazo.com/dfe41c6c543f648b274060df7864a508.png)](https://gyazo.com/dfe41c6c543f648b274060df7864a508)


Inject　ノードを実行すると、userシートのセルＡ２にタイムスタンプが書き込まれる。
Ａ２にすでになにかデータがある場合はＡ３に書き込まれる。

ちなみに、Update Cells だと、セルを上書きする。
Clear Cells だと、セルの情報を消去する。



以上、Googleスプレッドシートの読み書きは、コードを書くと結構面倒だけど、このノードのおかげで結構簡単にできる。