MacでCalrndar.appのエントリを取得したい気分になるじゃろ?MacだからAppleScriptを使えば良いと思うじゃろ?死ぬほど遅いんじゃ。JXAでもやっぱり死ぬほど遅いぞい。
Core Dataうんぬんかんぬん詳しいことはおいといて、ちゃっちゃとカレンダーエントリを読みたいときには、SQLiteなキャッシュを読むのが手っ取り早いようです。
[takada-s@MBA Calendars]$ pwd
/Users/takada-s/Library/Calendars
[takada-s@MBA Calendars]$ ls -l Calendar\ Cache*
-rw-r--r--@ 1 takada-s staff 6156288 3 28 13:30 Calendar Cache
-rw-r--r--@ 1 takada-s staff 32768 3 24 15:34 Calendar Cache-shm
-rw-r--r--@ 1 takada-s staff 576832 3 28 14:44 Calendar Cache-wal
[takada-s@MBA Calendars]$ file Calendar\ Cache
Calendar Cache: SQLite 3.x database
shmとwalはメタデータ的なものらしいので、ここではとりあえず気にしないことにしましょう。
このSQLiteファイルに対して、次のようなSQLをぶっこむと、極めて高速に指定期間内のカレンダーエントリ一覧を取得することができます。
SELECT
ZNODE.ZTITLE, ZCALENDARITEM.ZTITLE, ZSTARTDATE, ZENDDATE
FROM
ZCALENDARITEM, ZNODE
WHERE
ZCALENDARITEM.ZCALENDAR = ZNODE.Z_PK
AND
ZCALENDARITEM.ZSTARTDATE > ?
AND
ZCALENDARITEM.ZENDDATE < ?
と思うじゃろ?時刻はUnixEpochと思いきや、2001/01/01 00:00:00を0とする謎エポックなんじゃ。これもCoreDataの仕様らしいぞい。というわけで、978,307,200秒のオフセットを考慮する必要があるようです。参考: http://stackoverflow.com/questions/10705062/behind-the-scenes-core-data-dates-stored-with-31-year-offset