今朝の話
おうちの断捨離を進めているところなんですが、子供達の写真の管理の話になった。
アルバムを用意して物理で貯める、という案を夫が出してきたのでイヤイヤイヤ!ということでこの機会に電子化する方向に持っていくことにした。
構想
基本はどこかのアルバムサービスに依存するよりは、Googleドライブに入れたい
スキャンして保存、の流れが理想
スマホでスキャンもOK
うん、Googleドライブに普通にアップロードすれば良いよね。うちのスキャナーはフォルダ保存に対応しているし。
・・・・・
そういや夫はスキャナーからフォルダ保存覚えられないんだった!!まじかよ、、、
ということで、LINEに送ったものを自動で保存していくことにしました。
仕組み
ほぼほぼみんなやり尽くされているので簡単です。
- LINE Bot(MessageingAPI)でアクセスキーを取得
- GASのdoPostでWebHookを作る
前回やったときはwebhookはherokuで作ってたけど、最近はGASの方が慣れてきたので多分今やるならこちらの方が早い。
参考にしたのはここ
変更箇所
- Momentライブラリは使わずにUtilitiesを使用
var date = new Date(); //現在日時を取得
var formattedDate = Utilities.formatDate(date, "JST", "yyyyMMdd-HHmmss");
- ルートフォルダ以下に年(YYYY)ごとのフォルダを作成し、貯めるべきフォルダIDを取得するメソッドを新設。
// 年ごとのフォルダIDを作成する
function getFolderPathOfYear(year){
folder = DriveApp.getFolderById(ROOT_FOLDER_ID);
childFolders = folder.getFolders();
while(childFolders.hasNext()){
childFolder = childFolders.next()
if(year == childFolder.getName()){
Logger.log(childFolder.getId())
return childFolder.getId()
}
}
//見つからない場合作る
newfolder = folder.createFolder(year)
Logger.log(newfolder.getId())
return newfolder.getId()
}
- 夫とのLINEのやりとりにLINE Botを招待したいため、画像じゃない場合にアラートは不要なので削除
- doPostだとLogger.logが出てくれないのでスプレッドシートにlogを吐き出す。(毎度やるもの)これじゃなくてログを出す方法があるなら教えて欲しい
function logSpreadsheet(memo){
// 現在開いているスプレッドシートを取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// 現在開いているシートを取得
var sheet = spreadsheet.getSheetByName("log")
let lastRow = sheet.getLastRow();
// 指定したセルの値を変更する
Logger.log(lastRow+1, memo)
sheet.getRange(lastRow+1,1).setValue(memo);
}
全量 & 導入方法
多分以下の流れでそのまま使えるはず、、、、
- スプレッドシートに「log」を用意
- スプレッドシートから作成したAppScriptに全量コピペ
- LINE Developersからアクセストークンを取得
- 取得したトークンをAppScriptに貼り付け
- ドライブにルート用のフォルダを作成
- ルートフォルダのIDをAppScriptに貼り付け
- GAS公開
- URLをLINE Developersのwebhookに貼り付け
補足
過去の紙媒体のものは普通にスキャナーから保存するつもり。
(というか、私はLINE経由せずにスキャナーから保存するような気がする)
携帯で撮った写真をLINEで送り合ったのが勝手にたまるのを期待しています。
上手くいけばいいな。