はじめに
Googleカレンダーのようなカレンダーアプリはたくさんあります。
サービス間でカレンダーを共有したい場合があります。icsファイルを利用して簡単に別のカレンダーサービスにインポートできます。
Node.jsにてicsモジュールを利用すると簡単にicsファイルが作成できます。
icsとは
The iCalendar generator
URL:https://github.com/adamgibbons/ics
インストール
npm install -S ics
サイトにあるサンプル
const fs = require("fs");
const ics = require("ics")
const event = {
start: [2018, 5, 30, 6, 30],
duration: { hours: 6, minutes: 30 },
title: 'Bolder Boulder',
description: 'Annual 10-kilometer run in Boulder, Colorado',
location: 'Folsom Field, University of Colorado (finish line)',
url: 'http://www.bolderboulder.com/',
geo: { lat: 40.0095, lon: 105.2669 },
categories: ['10k races', 'Memorial Day Weekend', 'Boulder CO'],
status: 'CONFIRMED',
organizer: { name: 'Admin', email: 'Race@BolderBOULDER.com' },
attendees: [
{ name: 'Adam Gibbons', email: 'adam@example.com', rsvp: true, partstat: 'ACCEPTED', role: 'REQ-PARTICIPANT' },
{ name: 'Brittany Seaton', email: 'brittany@example2.org', dir: 'https://linkedin.com/in/brittanyseaton', role: 'OPT-PARTICIPANT' }
]
}
ics.createEvent(event, (error, value) => {
if (error) {
console.log(error)
return
}
//valueの値をxxx.icsファイルに出力
...
})
普通のYYYYMMDDHHmm形式の日本語時間を入れると9時間差が出てます。
日付の9をマイナスする処理を追加で対応できます。
const moment = require("moment-timezone");
moment.locale("ja");
let start = moment.tz("201909071800", "YYYYMMDDHHmm", "Asia/Tokyo");
start = start.add(-9, "hours");
const event = {
start: [start.year(), start.month() + 1, start .date(), start.hours(), start.minute()],
...
}
また、一つicsファイルに複数イベントを作成することも可能です。
イベントオプション
https://github.com/adamgibbons/ics
のattributes部分を参照
以上