GoogleSheet APIで読み込み、書き込みをしてみるよ。


こんばんは:relaxed:　
全然関係ないんだけれど、普段vimで作業していると、QiitaとかGoogleAppsScriptとかWebとかでもついつい:w連打しちゃうよね。
これってあるあるなのかな？:relaxed:


これまではGoogleChatのAPIをお試ししてきたね。
今まではちょこちょこお試しだったけれど、実際に使えるBOTにしていくよ。
作りたいBOTはこんな感じだよ。

![ink.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/5e0b3058-b2b0-4b98-8bc3-5774bca848c0.png)

ねこちゃんやわんちゃんやうさちゃんからHelpのDMがきたら、:relaxed:のいるチャットルームにスレッド分けされた状態で転送されて、
そのスレッドに返事をしたら、BOTからねこちゃんやわんちゃんやうさちゃんに返事をしてくれるようにしたいよ。
有り体にいっちゃうと問い合わせ受付してくれるBOTだね。


ステップとしてはこんな感じかな。
1.BOTにDMを送ったら、チャットルームへの転送がされる。　(
2.チャットルーム内でのユーザーごとのthread名を保持し、同じユーザーからのDMは同じスレッドに書き込まれる。
3.スレッドに:relaxed:から書き込みをしたら、対象のユーザーにDMが送られる。
4.（余力があれば）よくある質問集みたいな一覧を作ってBotが自動返答してくれる。


今日からは、**2.チャットルーム内でのユーザーごとのthread名を保持し、同じユーザーからのDMは同じスレッドに書き込まれる。　**をすすめていくよ。


### GoogleSheetAPIのクイックスタートを動かしてみよう。
スレッド分けに必要な情報をGoogleSheetで管理することにするよ。
そのためには、GoogleSheeaAPIに詳しくならないといけないね。

まずはいつも通り公式のテンプレートを使って、APIを使えるところまでやってみよう。

>Google Sheet API
>https://developers.google.com/sheets/api

この中の、[GoogleAppsScriptバージョンのクイックスタート](https://developers.google.com/sheets/api/quickstart/apps-script)を動かしてみるよ。
ほぼほぼ公式の通りなので、詳細は書かないけれど、:relaxed:が引っかかったところだけお伝えするね。

Step 1: Create the script
 権限の関係なのか、用意されているSheetを参照することができなかったよ。マイドライブ内にコピーを作成し、指定しているspreadsheetIdを変更したよ。

Step 2: Turn on the Google Sheets API
特に問題なかったよ。

Step 3: Run the sample
実行したら「ReferenceError: 「Sheets」が定義されていません。 at logNamesAndMajors(コード:165)」というエラーが発生したよ。
公式のトラブルシューティングにも書いてあったけれど、GoogleAppsScript内でSheetを有効にしなければならないらしいよ。

該当scriptのリソース＞Googleの拡張サービス..をクリック。
![スクリーンショット 2020-07-24 10.29.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/7383a3ed-2046-0719-8247-31d0436c13a1.png)

GoogleSheetAPIをONして、OK。
![スクリーンショット 2020-07-24 10.29.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/391cae0c-c071-135d-422c-1069dc64aa0c.png)

で解消したよ。



で、どーん。ばっちりデータをとってきたよ！簡単だね！
![スクリーンショット 2020-07-24 10.32.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/4654e839-bdcb-ec38-77e5-ed262b06cc08.png)




ソースをみてみると、

```
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;　 
```
の形式で、特定のスプレッドシートの特定の行の値をとってきているのがわかるね。


### 値の書き込みをしてみよう。
読み込みができたから、次は書き込みをしてみたいね。
ここを参考にするよ。

>Appending　values
>https://developers.google.com/sheets/api/guides/values#appending_values


```
function insertDateToSheet() {

  //挿入したいデータを書くよ。
  var values = [
    ["relaxed:)", "Male", "1. Freshman", "CA","Art","Track & Field"]
  ];
 
  // XXXXXXには書き込みたいスプレッドシートのIDをいれてね。URLのおしりだよ。
  var spreadsheetId = 'XXXXXXXX';

  var valueRange = Sheets.newRowData();
  valueRange.values = values;

  var appendRequest = Sheets.newAppendCellsRequest();
  appendRequest.sheetId = spreadsheetId;
  appendRequest.rows = [valueRange];

  //新しい行を挿入したいシートの名前を設定するよ。  
  var range = 'test';

  var result = Sheets.Spreadsheets.Values.append(valueRange, spreadsheetId,range , {
    // ROW　か　USER_ENTEREDをセットするよ。　ROWだとValuesの値がそのまま、
USER_ENTEREDだと数式は数式として実行されるよ。
    //Valuesで["Totals", "=SUM(B2:B4)", "=SUM(C2:C4)", "=MAX(D2:D4)"]とかセットしたい場合は、USER_ENTEREDにするよ。
    valueInputOption: "ROW"
  });
}

```

これを実行するよ、はいどーん。

![スクリーンショット 2020-07-24 19.56.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482103/6a52ed3a-7f7f-904e-7af7-d446431a12db.png)

追加されたね！


今日はここまで！
次回ははChatAPIと連携させて、Messageの情報をスプレッドシートで管理するようにするよ:relaxed:


##　参考にさせていただいたもの
[Google Sheet API](https://developers.google.com/sheets/api)

:relaxed: は公式とサンプルコードが大好きだからね。ありがとう。