最後はいつ?というトラッキングアプリはシンプルなUIで使いやすいが、カレンダーに対応していない。GASでカレンダー対応してみる。
「最後はいつ? - あなたの大切な出来事をトラッキング」をApp Storeで
"1年経過: トイレ掃除"といった内容のカレンダーイベントを作成するのが目標。
同期化の設定を有効にして、Dropboxに保存されるファイルをカレンダーの登録に利用する。
"Dropbox/アプリ/Last Time/MainStore.V2/baselines"に同期するために必要なファイルが保存されていた。
ファイルの中身はJSON形式で、以下のような内容が記載されている(関係ない要素は省いている)。
"changesByEntity": {
"Event": [
{
"properties": [
{
"propertyName": "lasttime",
"value": [
"date",
1537707955000
],
"type": 0
},
{
"propertyName": "name",
"value": "トイレ掃除",
"type": 0
},
],
},
]
}
}
nameプロパティにはイベント名、lasttimeプロパティには直近のイベント更新時のミリ秒のUNIX timeが記載されていた。
このファイルをDropboxの公開リンクからアクセスして、GASでカレンダ ー登録を処理する。
コードは以下の通り。
function getLastTimeJSON() {
var url = "Dropbox 公開リンクURL";
var response = UrlFetchApp.fetch(url);
var content = response.getContentText("UTF-8");
var json = JSON.parse(content);
return json;
}
function makeLastTimeEvent() {
var json = getLastTimeJSON();
var events = json.changesByEntity.Event;
var calendarEvents = [];
for (var i in events) {
var properties = events[i].properties;
var _name;
var _lasttime;
for (var j in properties) {
var property = properties[j];
if (property.propertyName == "name") {
_name = property.value;
}
if (property.propertyName == "lasttime") {
_lasttime = property.value[1];
}
}
var calendarEvent = {
name: _name,
lasttime: new Date(_lasttime)
};
calendarEvents.push(calendarEvent);
}
return calendarEvents;
}
function setLastTimeItem(toCalId) {
var calendarEvents = makeLastTimeEvent();
var targetCal = CalendarApp.getCalendarById(toCalId);
for (var i in calendarEvents) {
var next = new Date();
var lasttime = calendarEvents[i].lasttime;
var name = calendarEvents[i].name;
next.setTime(lasttime);
next.setYear(lasttime.getYear() + 1);
var title = "1年経過: " + name;
targetCal.createAllDayEvent(title, next);
}
var lastTimeCalId = "GoogleカレンダーID";
function main(){
setLastTimeItem(lastTimeCalId);
}