この記事を読むのに必要な時間は約 3 分20秒です。
こんにちわ。
以前こんな記事を記載しました。

その後、追加で○○さんが投稿したコメントがこれ、という情報を追加したい、というニーズが発生しました。
そこでどのようにユーザー情報を取得すれば良いのか?を調べて実装してみたのでその内容を投稿したいと思います。
やりたいこと
最初に記載しましたが、もう少し詳細に記載するとLINEグループ内で投稿された内容をスプレットシートにテキストとして残す+投稿者情報を取得する、という物になります。
スプレットシートシートのイメージ

以前作成したのはメッセージのみを記録する、という物でしたが、今回は投稿者と投稿者Idを追加で取得する、という物になります。
実装内容
- LINEグループに投稿された内容を取得
1 2 3 4 5 6 7 8 9 10 11 12 |
// メッセージ取得処理 function doPost(e) { // レスポンス取得 const responseLine = e.postData.getDataAsString(); // JSON形式に変換 const responseLineJson = JSON.parse(responseLine).events[0]; // メッセージデータの場合、次処理へ if (responseLineJson.type == 'message') { insert_ss(responseLineJson); } |
ちなみにこのrespoinseLineJsonで取得出来ているデータを見ればある程度分かりますが、ユーザー情報であったり、グループ情報がJSONの中に要素として存在します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ replyToken=トークン情報, type=message, mode=active, timestamp=投稿時刻, message={ type=text, id=id情報, text=おはよう }, source={ type=group, groupId=LINEグループID, userId=ユーザーID情報 } } |
そのためJSONから必要な各要素を取得すればメッセージを取得する事であったり、ユーザー情報を取得出来ます。今回は実施していませんが、投稿日時情報なんかも取得可能です。
- JSONから投稿内容と投稿者情報を取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
function insert_ss(responseLineJson) { // token情報 const token = "トークン情報" // テキスト取得 const message = responseLineJson.message; const input_text = message.text; // 投稿者ID取得 const source = responseLineJson.source; const input_userId = source.userId; // グループID取得 const groupId = source.groupId; // 投稿者名取得 var userName = UrlFetchApp.fetch("https://api.line.me/v2/bot/group/" + groupId + "/member/"+ input_userId, {"headers" : {"Authorization" : "Bearer " + token}}); const input_name = JSON.parse(userName).displayName; const sheet = SpreadsheetApp.openById('スプレットシートID'); // 空白行に対して記載する var dat = sheet.getDataRange().getValues(); var null_line = dat.length + 1; // スプレットシートの空白文字場所にデータを入れる var position = 'A' + null_line; sheet.getRange(position).setValue(input_text); var userPosition = 'B' + null_line; sheet.getRange(userPosition).setValue(input_name); } |
こちらは上記にも記載していますが、グループID情報とユーザーID情報がユーザ名を取得する事が出来ます。
1 2 3 4 5 6 7 8 9 10 11 |
UrlFetchApp.fetch("https://api.line.me/v2/bot/group/" + groupId + "/member/"+ input_userId, {"headers" : {"Authorization" : "Bearer " + token}}); /* // 上記取得結果のJSON { "userId":"ユーザーID", "displayName":"ユーザー名", "pictureUrl":"https://sprofile.line-scdn.net/hogehoge" } */ |
ちなみ余談ですが、こちらを利用するとユーザー名は取得出来ませんでした。
1 |
https://api.line.me/v2/bot/profile/{user_id} |
こちらの取得方法だと自分が作ったMessaging APIのアカウントをそのユーザが友だち登録していないといけない、という条件があるためになります。
しかし、今回利用した
1 |
https://api.line.me/v2/bot/group/{groupId}/member/{userId} |
については基本グループに参加している事を条件にユーザー情報は取得可能ですので、こちらを利用しました。
こちらは最近(2020年頃)?出来たようなので、要望が多かったのでしょうかね。
感想
テキストをスプレットシートに保存する際に、LINEで投稿された文章がどういうJSONデータであり、どういう情報要素があるのか?を最初にしっかりと確認しておけば良かったなと思っております(笑)
それとユーザ取得APIにも複数種類が存在し、グループ内のユーザー情報を取得するAPIであればユーザー情報を取得出来る事が分かった事が今回の実装してみて良かったなと思っている点です。
こちらのAPIについてややグレーな気もするのでLINE側で改悪されない事を願いつつ、今後も利用局面があれば利用していこうと思います。