多くのスケジュール(カレンダー)のアプリケーションで使用されるデータ形式に,iCalendarフォーマットがある。
ファイルの拡張子は.icsで,テキストファイルになっている。
フォーマット仕様は,RFC2445として規定されている。(更新バージョンRFC-5545)
Googleカレンダーに登録しているスケジュールをWindowsのデスクトップに表示するような目的で,GoogleカレンダーのデータをiCalendar形式で取得してみる。
GCALDaemonはJavaアプリケーションで,WindowsやLinuxマシン等で使用できるGPLアプリケーション。
このGCALDaemonを使用すると,GooogleカレンダーのデータをicsファイルとしてローカルPCにダウンロード出来,さらにicsファイルを更新することで,Googleカレンダーのデータを更新するということも出来ていた。
しかし,2014/11/17にGoogleはGCALDaemonが動作するCalendar API v2のサポートを突然廃止し,代わりにCalendar API v3(認証にOAuth 2.0を使用する)に移行した。
このことでGCALDaemonはうまく動作しなくなってしまって,しばらくして上記のGCALDaemonのサイトもなくなってしまった
その後しばらくして,Calendar API v3で動作できるGCALDaemonが修正バージョンとして公開された。いまのところ問題なく動作している。
Calendar API v3に対応したGCALDaemonをインストールするには,GCALDaemonからgit cloneするなりして,任意のディレクトリにダウンロードする。
次にGCALDaemonがGoogle Calendar APIにアクセスできるように,Google Developper ConsoleでGoogle Calendar APIを有効にする必要がある。
WEBブラウザーでGoogle Developper Consoleにログインして,以下の作業をする。
その後,GCALDaemonの設定をする。
config-editor-new.batを実行して,File synchronizerで使用するGoogleカレンダーとローカルのicsファイルの場所とファイル名を登録する。
これでGCALDaemonを使用する準備が出来たので,インストールしたディレクトリあるbin\sync-now-new.batを実行してGoogle Calendarからデータが設定したicsファイルに保存できているか確認する。
問題なければbin\sync-now-new.batでのGoogleカレンダーとicsファイルを手動での同期は出来ているので,タスクスケジューラーで定期実行するようにすればOK。
残念ながら,GCALDaemonではGoogle Tasksのデータはサポートされていない。
会社で使われているDesknet's NEOのスケジュールデータをical形式で取得する。
http://<Desknet's NEOのURL>/scripts/dneoical/dneoical.exe?userid=xxxxx&_word=yyyyyy&from=今からどのくらい前(月単位)&to=いまからどのくらいあと(月単位)
のようにすれば,Desknet's NEOのスケジュールデータがical形式で取得できます。(xxxxxはアカウントID,yyyyyyはパスワード)
以下のようなBATファイルを作って,
wget -O todo.ics "http://<Desknet's NEOのURL>/scripts/dneoical/dneoical.exe?userid=xxxxx&_word=yyyyy&from=2&to=2"
Windowsのタスクスケジューラーに登録しておけば,定期的にスケジュールデータを取り出せます。
残念ながらこの方法では,Desknet's NEOのスケジュールへiCalendar形式のファイルを使ってデータを直接登録することは出来ません。
Desknet's NEOのdneoical.exeから出力されるiCalendar形式のデータはUID(RFC2445に規定されている)項目が出力されない。
このため,ほとんどのiCalendar形式に対応しているアプリでもDesknet's NEOが出力したデータを上手く利用出来ない。
Desknet's NEOを販売しているところで,仕様通りに出力するようにプログラムを修正して貰えればいいのですが・・・
しょうが無いんで,UID項目を追加することにします。
上記のようにして,Desknet's NEOから自分のスケジュールデータをdesknets_temp.icsというファイルに出力したとして,
awk '/DTEND/{print $0; print "UID:y-ueno"NR"@hogehoge.co.jp";} ! /DTEND/{print $0;}' desknets_temp.ics" > desknets.ics rm desknets_temp.ics"
とかして,UIDを追加すれば他のアプリでも利用できます。
上記のデータ取得手順とともにBATファイルにしてタスクスケジューラーに登録して,定期的に実行して利用している。
BATファイルの例:get_desknet.bat(desknet'sの予定表をtodo.icsに保存する)
@echo off rem desknet'sの予定表をダウンロードする wget -O "desknets_temp.ics" "http://<Desknet's NEOのURL>/scripts/dneoical /dneoical.exe?userid=xxxxx&_word=yyyyy&from=1&to=3" awk '/DTEND/{print $0; print "UID:zzzzz"NR"@hogehoge.co.jp";} ! /DTEND/{print $0;}' "desknets_temp.ics" > "desknets.ics" rm "desknets_temp.ics"
ファイル名は,実際にはフルpath。
NextcloudはDropboxのようなオンラインストレージを自前のサーバーで構築できるサーバーアプリケーション。
このNextcloudのアドインアプリとしてCalendarというスケジュール管理を追加するものがある。(Googleカレンダーの機能を自前で用意できる)
PCのWEBブラウザやスマホの専用アプリからCalendarデータを登録・利用することが出来る。データはTodoリストと共有のようだ。
以下のようなBATファイルでデータをicsファイルに取得できる。
@rem nextcloudからCalendar/Todoデータをダウンロードする wget --no-check-certificate --http-user="xxxxx" --http-password="yyyyyy" -O "todo.ics" "https://<nextcloudが動作しているサーバー>/nextcloud/remote.php/dav/calendars/<アカウントID>/personal?export"
CalendarデータだけでなくTodoリスト(Tasks)データも同時にダウンロード出来るようだ。
Microsoft365(Outlook)予定表データをiCalendar形式のファイルとして取得すると,他のアプリケーションで利用ができ便利になる。
以下のようなBATファイルを作成する。
wget -O "保存したいファイル名" "ICSのURL"
そして,そのBATファイルをタスクスケジューラーに登録しておけば,定期的に予定表データをicsファイルとして取得出来る。
残念ながらこの方法ではMicrosoft365の予定表にデータを登録することは出来ません。
Rainlendarは。Windowsのデスクトップにスケジュールを表示したり編集したりすることが出来るアプリケーション。
無料で使用できるLiteバージョンと有料のProバージョン(9.95EUR)がある。
ProバージョンだとGoogleカレンダーやGoogle Tasks,Microsoft365/Office365やCalDAV,Remember The Milk,Toodledo等のクライアントして動作も出来るんで,上記のように苦労してローカルPCにicsファイルをいちいち作成する必要は無い。
Liteバージョンを使用している身なので,上記のようにしてGoogleカレンダーのデータをicsファイルのダウンロードして,それを利用することでGoogleカレンダーのスケジュールを表示している。
便利なことにRainlendar Liteでicsファイルのスケジュールを更新して,GCALDaemonを使用してGoogleカレンダーを更新することが出来る。
Todoリストやタスク管理をしているデータを,カレンダーデータと同様にiCalendar形式で取得できると,いろいろなアプリケーションで利用出来て便利になります。
Google tasksは,GMailの中でTodoリストとして使用されている。
以前は,Google Task Porterで上手く取得できていたが,2012/10あたりのGoogle tasksの仕様変更で取得できなくなった。
Google Tasks Backupが使えそうなんだけど・・・
Google Tasks Backupは,Python/Google App Engine,Apache License 2.0のOSS。
他の方法としては,https://mail.google.com/tasks/android を使うとシンプルにTodoが表示されるので,ここからicsファイルに変換するようなプログラムを作れば良い気がするが・・・
いまだに良い方法が見つかっていない。
TickTickは,シンプルで便利なTodoリストタスク管理アプリ。
PCのWEBブラウザやスマホの専用アプリからTodoデータを登録・利用することが出来る。
@echo off @rem ticktickからTodoデータをダウンロードする wget -O "ticktick_tmp.ics" http://ticktick.com/pub/calendar/feeds/xxxxxxxxxxxx/basic.ics
TickTickのURLは,すべてのリストにアクセスできるURL(設定画面から確認出来る)。 注意することとして,期限を登録したTodoデータでないと,ダウンロードしたicsファイルにデータが入らない。
また,icsファイルのデータは,VEVENTタグになっているので,他のTodoアプリでもTodoデータとして利用できるようにVTODOタグに変更する。
awk '{sub("VEVENT", "VTODO"); print $0;}' "ticktick_tmp.ics" > "ticktick.ics" rm ticktick_tmp.ics
こんなようにしてうまく利用できるようにした。
remenber The milkは,シンプルで便利なTodoリストタスク管理アプリ。
PCのWEBブラウザやスマホの専用アプリからTodoデータを登録・利用することが出来る。
新しくコメントをつける