Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8861

SteinでSpreadSheetからデータを複数条件(AND)でとって動的にメッセージを作成

$
0
0

「今日飲みに行きたい人」を募るLINE Botを作っています

タイトルを汎用的なものに言い換えると、
「DBからデータを抽出して、配列を作るよ。」
です。

飲みに行く人を誘いにくい状態が続きますが、
もう少し落ち着いたら、対策はしたうえで飲みに行くこともありそうですね。
社内など、知らない人もある程度混じっているコミュニティで、
「今日飲みたい」と思ったときに誘えるLINE Botを作っています。

こんなサービスを実際に誰かに動くところを見ていただきたくて、
使う人が「飲みに行きたい」とやったら、その人の名前(あらかじめ登録した)が出る。
という基本部分だけとりあえず動的に動くようにしました。

今までは、固定の人に対して送るようにしていましたが、
実際に自分の名前が出たほうが楽しくなるかと思い、今回の対応をしました。

ただ、飲みに行く人数は4人一組にしたかったのですよ。そこで、
image.png

このような形で、日にち・何番のグループ・何人目というデータを作りました。

// 最後に登録した人が所属するグループに入っている名前を取得して格納letuserNameList=awaitstore.read(tranSheet,{search:{date:today,group_no:groupNo.toString()}}).then(data=>{returndata}).catch(e=>console.log(e))

今日、かつ、グループNoを指定して、そのグループにいる人たちを取得します。
抽出した人たちを宛先にセットして、

letpushText;pushText+=" グループの飲みに行くメンバーは、"// 同じグループの人数分ループfor(vari=0;i<=userNameList.length-1;i++){pushText+=userNameList[i].user_name+"さん、";}pushText+="です!張り切っていきましょう!"

このような形でメッセージを作ります。そのメッセージを最終的にチャンネルに登録されている方たちに絵文字を文末につけて配信。

lettextLength=pushText.length;pushText+="$";// チャンネルに登録されている方たちに連絡awaitclient.broadcast([{"type":"text","text":pushText,"emojis":[{"index":textLength,"productId":"5ac1bfd5040ab15980c9b435","emojiId":"002"}]},{type:"sticker",packageId:"11537",stickerId:"52002745"}]).then(data=>console.log(data)).catch(e=>console.log(e))

構成

image.png

LINEでメッセージを送ると、Node.jsで受け取って処理する。
その際、Steinを使って、SpreadSheetをDB代わりに、
 append(INSERT) 飲みに行きたい人追加や名前登録
 search(SELECT) 今日飲みに行きたい人のグループを抽出
 delete キャンセル
 update 名前の更新

今回つまったポイント 複数条件の設定

Steinというサービスを使って、Google Spread Sheetをテーブルとして使ってデータを入れたり出したりしています。

参考URL Stein

複数条件指定したときに、なぜかデータが0件だったり、2つ目の条件が効いてないという現象が起きた。。
そもそものSteinのメソッドを呼び出すときの書き方の問題なのか、
複数条件を設定できない仕様なのか。(DBとしてそんなことはまずないだろうと思ってはいた。)

複数条件でデータ抽出できたメモ

気を付けよう。以下のポイント
・SpreadSheet とってくるときは文字列型。数値型で入れたのにな!!SpreadSheet上も数値のよう。右寄せなので。
・Node.js 数値型。次のグループNoなど足し算をしたかったので数値で取り扱っています。最初、何も気にしなかったら文字列型になっていて、2+1→21になっていた。笑

反省としてJavaScript特有?の型のあいまいさをどうするか考えていく

今回の考察として、そもそものSteinの構文で、
複数条件を指定した例がなかなか見つからなかった+公式ドキュメントを見ると書いてあるが、推測通りなのかわからなかった。
(たぶんJSONみたいな指定だから、2つ目の条件はカンマで区切って書くよな・・・と理解はしていた。)

そのため、別の理由で間違ってても構文が間違ってる!?と思い込んでしまっていた。
実際は、型が誤っていてデータをとれなかった。型をうまく変換できてなかったなどが理由だった。

今後の方針として、文字列型なのか数値型なのかは、ちゃんと都度値が取れているかで判断するか、明示的に型指定してから扱おう。
と学んだ。
この考え方はif文の条件とかでも使えそう。「==」で判断するのか、「===」で判断するのかの違い。
みなさんどうやってるんだろう。

今回全体のソースは長すぎるので、ひかえておきます。。。


Viewing all articles
Browse latest Browse all 8861

Trending Articles