やること
LINEにテキストを入力したら、Google Spreadsheetに日付+テキストの行として追記するようにしてみます。
背景
いままで、ライフログというと大げさですが、家計簿的に使ったお金や、筋トレ回数、ランニングのペースや距離などを記録しようとしてきました。
自動記録されるようなアプリでも、自分で何かを入力する必要があったりすると、いちいちアプリを選んで入力するのが面倒で、長続きしなかったり、入力が不正確になったりしてしまってました。
ちょっとしたデータならスプレッドシートに記録すればよいですが、スマホからスプレッドシートを開いて入力するのも面倒で、こちらも長続きしません。
入力が簡単ならもう少し長続きするのではと思って、インタフェースとしてお手軽なLINEを使ってGoogle Spreadsheetに入力するようにしてみました。
利用するもの
- Google Spreadsheet
- Google App Script
- LINE Messaging API
設定のステップ
ちょっと端折り気味ですが、設定方法を説明します。
1. Google Spreadsheetを用意する
記録したいスプレッドシートを選ぶ or 作り、そのスプレッドシートIDをメモします。
そのスプレッドシートの中で、LINEからの入力を書き込むシートを作り、その名前をメモします。
2. Google App Script上でコードを書いて公開する
Google App Scriptでプロジェクトを作り、以下のコードを貼り付けて保存します。
var SPREADSHEET_ID = 'ここにSpreadsheet IDを指定します';
var SHEET_NAME = 'ここにスプレッドシートのシート名を指定します';
function record(event) {
var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/M/d');
var messageText = '(テキスト、位置情報以外のメッセージ)';
if(event.message.type == 'text') {
messageText = event.message.text;
} else if(event.message.type == 'location') {
messageText = event.message.address;
}
// シートへの追記
var ss = SpreadsheetApp.openById(SPREADSHEET_ID);
var sheet = ss.getSheetByName(SHEET_NAME);
sheet.appendRow([today, messageText]);
}
function doPost(e) {
// LINEからのメッセージ取得
var evtArray = JSON.parse(e.postData.contents).events;
evtArray.forEach(function(event) {
// メッセージタイプの場合にスプレッドシートに記録
if(event.type == "message") {
record(event);
}
});
return JSON.stringify({});
}
コード内の SPREADSHEET_ID、SHEET_NAME に、「1. Google Spreadsheetを用意する」でメモしたものを指定します。
そのあと、「公開」⇒「ウェブアプリケーションとして導入」を行います。
「アプリケーションにアクセスできるユーザー」は「全員(匿名ユーザーを含む)」に設定しておきます。
公開されるとその URLが表示されます。
3. LINE Messaging APIの設定を行う
いろいろなところに設定方法が出ているので、詳細は割愛します。
「プロバイダー」を作って、その下に今回のアプリ用の「Channel」をつくります。
- 今回のアプリはフリーの範囲で動きます
- アクセストークンの「再発行」をクリックします
- 「Webhook送信」は「利用する」にします
- Webhook URLに、Google App Scriptで公開した URLを指定し、「接続確認」を行います
- 「自動応答メッセージ」は「利用しない」にします
以上の設定を行ったら、このChannel基本設定ページの下にあるQRコードを、スマホ等のLINEアプリから読み込めば利用可能になります。
おわりに
LINEに何か入力して応答するというプログラムではないので、一般的なBotアプリとは趣が異なりますが、こんな使い方もありうるということで、紹介してみました。