LoginSignup
2
0

More than 1 year has passed since last update.

LINE×GAS|今日の調子をクイックリプライで回答し、スプレッドシートに記録

Last updated at Posted at 2022-10-04

本記事に記載のコードは全てを1から私が記載したわけではありません。
参考記事をもとに作成・追加改造を記録した記事です。

ゴール・完成形

LINE MessageAPI、GASを用いて、今日の調子をクイックリプライで回答し、スプレッドシートに記録するツールを作成。

LINE

LINE画面.gif

スプレッドシート

LINE→スプシ→notion_-_Google_スプレッドシート.png

コード
record_feeling_to_SpreadSheet.gs
// ------------------クイックリプライボタンを設定したメッセージを送る------------------ //
function askFeeling_quick_reply() {
	/* スクリプトプロパティのオブジェクトを取得 */
	const prop = PropertiesService.getScriptProperties().getProperties();
 
	/* クイックリプライボタンを設定したメッセージを送る */
	UrlFetchApp.fetch('https://api.line.me/v2/bot/message/push', {
		'headers': {
			'Content-Type': 'application/json',
			'Authorization': 'Bearer' + ' '+ prop.LINE_TOKEN, //
		},
		'method': 'POST',
		'payload': JSON.stringify({
			"to": prop.LINE_USER_ID, // 
			"messages": [
				{
        "type": "text", // ①
        "text": "今日の気分はどう?",
        "quickReply": { // ②
    "items": [
      {
        "type": "action", // ③
        "action": {
          "type": "message",
          "label": "晴れ",
          "text": "$Feeling:晴れ"
        }
      },
      {
        "type": "action",
        "action": {
          "type": "message",
          "label": "曇り",
          "text": "$Feeling:曇り"
        }
      },
      {
        "type": "action",
        "action": {
          "type": "message",
          "label": "",
          "text": "$Feeling:晴れ雨"
        }
      }
    ]
  }
}	],
			"notificationDisabled": false // trueだとユーザーに通知されない
		}),
	});
}



// ------------------クイックリプライで回答してスプレッドシートに記録する------------------ //
var sheet;

function doPost(e) {
  var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
   
  if(userMessage.match(/^\$/)) {
    userMessage = userMessage.substr(1);
  } else {
    return;
  }
   
  var spreadsheetId = "16NNUTPhqIUbSBYNoN4BsdhPIjxxMjknjHkPSJtQd-3E";
  var sheetName = "Line_to_SpreadSheet";
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  sheet = spreadsheet.getSheetByName(sheetName);
 
  // 書き込み処理
  setData(userMessage);

  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
 
}

function setData(msg)
{
  let data = msg.split(/\n/);
  let row = sheet.getLastRow() + 1;

  let playerNum = 30;
  let startCol = 2;
  let cells = sheet.getRange(1, startCol, 1, startCol + playerNum);

  // 日付
  let dateCell = sheet.getRange(row, 1);
  dateCell.setValue(new Date());

  // スコア書き込み
  data.forEach(function(key){
    let scores = key.split(/:/);
    let name = scores[0];
    let score = scores[1];
    let col = getPlayerCol(cells, name);

    setScore(col, row, score);
  });
}

function setScore(col, row, score)
{
  //  プレイヤー人数が想定を超えている
  if(col == 0){
    return;
  }

  let cell = sheet.getRange(row, col);
  cell.setValue(score);
}

function getPlayerCol(cells, name)
{
  let row = 1;
  for (var col = 1; col <= cells.getNumColumns(); col++) {
      var cell = cells.getCell(row, col);
      if (cell.getValue().match(name)) {
        return cell.getColumn();
      }else if(cell.getValue() == ""){
        // 新規プレイヤー
        cell.setValue(name);
        return cell.getColumn();
      }
  }
  return 0;
}
スクリプト プロパティ

LINE→スプシ→notion_-プロジェクトの設定-_Apps_Script.png

感想・課題

参考記事をもとにコードをいじってるのだが、想定している動きにならない。
コードが何をしているのかはわかるが、構文がわからないから、応用・改造がしんどい。。。。

本当はスプレッドシートに記録した内容をNotionに転記したい。

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0