つかえる自動化/効率化 「スプレッドシートからLINEへメッセージ」- プログラム解説編
【つかえる自動化/効率化 「スプレッドシートからLINEへメッセージ」- 登録があったらLINEで知りたいよね✨】のプログラム解説編です。
⬇️ 詳細はこちら ⬇️
上記の note では、スプレッドシートに記載した内容(メッセージやスタンプ)を LINE に送る!という内容でした。
「プログラム解説編」では、実際にどのように実現しているか、プログラムの解説を行っていきたいと思います。
プログラミングしてみたい
少しだけ改良してもっと使いやすくしてみたい
スキルアップしたい
プログラミングを学んで活躍の場を増やしたい
などなど、考えているあなたのための一助となるよう頑張ってみます😁
スプレッドシートからデータの読み取り
// 開いているスプレッドシート
const ss = ssc.getSpreadSheet();
// 開いているシート
const sheet = ss.getActiveSheet();
// 行番号を取得
const row = sheet.getActiveCell().getRow();
// 行全体を選択
const range = sheet.getRange(row,1,1,sheet.getLastColumn());
// 行全体のデータを取得
let values = range.getValues();
// 1行目のみを取得
let value = values[0];
スプレッドシートを開く
シートを開く
シート内のエリアを指定する
指定したエリアのデータを取得する
という手順でデータを取得します。
今回は、1行のデータを処理しますので、1行ずつデータを取得しています。
⬇️ 以下は使用しているクラス ⬇️
入力内容の確認
LINE に限らずですが、外部のサービスを利用する場合、あまりおかしなデータを送り続けると "悪質なアタック" ととらえられないとも限りません。
そのため、正常なデータのみを送るようにした方がベターです。
そこで、今回は一定の入力確認を行って、異常なデータが入力されていた場合は送らない、というようにしています。
function checkDetail(values)
{
let res = true;
switch(values[INDEX_KIND])
{
case "テキスト":
// メッセージは空ではダメ
if(values[INDEX_MESSAGE]===""){...}
break;
case "スタンプ":
// メッセージは空ではダメ
if(values[INDEX_MESSAGE]===""){...}
// パッケージID と スティッカーID が空ではダメ
else if(values[INDEX_DATA1]===""||values[INDEX_DATA2]===""){...}
// パッケージID と スティッカーID は半角数字でないとダメ
else if(typeof(values[INDEX_DATA1])!="number"||typeof(values[INDEX_DATA2])!="number"){...}
break;
case "画像":
// メッセージは空ではダメ
if(values[INDEX_MESSAGE]===""){...}
// 画像ID が空ではダメ
else if(values[INDEX_DATA1]===""){...}
else
{
try
{
// Googleドライブ内に画像が存在するかどうか
const file = DriveApp.getFileById(values[INDEX_DATA1]);
}
catch{...}
}
break;
default: ... break;
}
メッセージは必須なので、空では無いかどうか
パッケージID と スティッカーID は、空では無いかどうか
パッケージID と スティッカーID は、半角数字かどうか
画像ID は、空では無いかどうか
画像は、Googleドライブ内に存在するかどうか
など、入力内容に問題がないかどうかチェックしています。
コード内の … の部分は各種のエラー処理です。
見やすさのために、今回は … にしましたが、提供しているスプレッドシートにはそれぞれのエラー出力用コードが記載されていますので、ご参照ください。
⬇️ 以下は使用しているクラス ⬇️
LINE への送信
// リクエストデータ
let options =
{
"method" : method,
"muteHttpExceptions" : true,
"headers" : {
"Authorization": "Bearer "+this.token,
"Content-Type" : "application/x-www-form-urlencoded"
},
};
// 取得情報を保存
const response = UrlFetchApp.fetch(this.base+url,options);
LINE へは、外部サービスにリクエストを送るための関数 UrlFetchApp.fetch()関数を使用します。
⬇️ 以下は使用しているクラス ⬇️
LINE側でどのようにリクエストを送信して欲しいか、といったルールが決められていますので、それに従って送信します。
⬇️ LINE Notify のドキュメント ⬇️
送信が完了すると、response に HTTPレスポンスステータスコードが返ります。
HTTPレスポンスステータスコードとは、HTTPリクエスト が正常に完了したかどうかを示すステータスコードです。
⬇️ 詳しくは以下をご参照ください。⬇️
どのようなステータスコードを返すかも、LINE Notify ドキュメントに記載されていますので、ご確認ください。
⬇️ 通知の際のレスポンスステータスコード例 ⬇️
LINE Notify に限らず、"200" が返ってくれば OK です。
メニューの作成
// UIオブジェクトの取得
const ui = SpreadsheetApp.getUi();
// メニューの作成
let menu = ui.createMenu(list["menuName"]);
// アイテムの追加
menu = menu.addItem("メッセージ送信","sendMessage");
// UIオブジェクトにメニューを設定
menu.addToUi();
様々な機能を GAS で追加していますので、それらを使用するために独自メニューを追加しています。
⬇️ 以下は使用しているクラス ⬇️
サポート窓口
プログラミングのこと、実現方法(仕様や実装)のこと、あなたの実現したいこと、など困ったことがあれば、LINE公式アカウントにて質問してください。
サポートさせて頂きます。
⬇️LINE公式アカウントに登録してご連絡ください⬇️