reminders — iOSのリマインダーデータベースへのアクセス

 reminders モジュールは、iOSのリマインダーデータベースの読込/書込のアクセスを提供します。リマインダーは Reminder クラスで扱うことができ、またリマインダーのリストは Calendar クラスで取扱います。

 (注 最初にリマインダーにアクセスする関数を使用する際には、システムの確認ダイヤログが表示されます。アクセスを拒否した場合、多くの関数は空のデータを返します。後でアクセスを許可したくなったら、設定アプリのプライバシーからリマインダーへのアクセス許可ができます。

クイックスタート

既存リマインダーの検索

 データベースにあるリマインダーを検索する場合には、シンプルに get_reminders() を呼び出します。引数 completed の設定により、リマインダーの未了/完了の状況(チェックがオフになっているか)でリストにフィルターをかけることができます:

import reminders
todo = reminders.get_reminders(completed=False)
print('やることリスト')
print('=========')
for r in todo:
    print('[ ] ' + r.title)
done = reminders.get_reminders(completed=True)
print('完了済の予定')
print('====')
for r in done:
    print('[x] ' + r.title)

新しいリマインダーを追加する

 新しいリマインダーを追加するためには、シンプルにタイトルと期日などを設定し、リマインダーオブジェクトを生成します。そして、Reminder.save() メソッドを呼び出して保存します:

import reminders
r = reminders.Reminder()
r.title = 'Pythonista からの追加項目です。'
r.save()
print('リマインダーに追加しましたよ。')

 Reminders アプリの中のリマインダーのリストは複数設定できます。これらのリストは reminders モジュールの中の Calendar オブジェクトで表現されます。特別な指定をしない場合、リマインダーはデフォルトのリストまたはカレンダーに追加されます。デフォルトとは異なるリストにリマインダーを追加するためには、シンプルにリマインダーを生成する際に、対応する Calendar オブジェクトを渡します。

 次の例はカレンダー(リスト)から「Pythonista」という名称のものを探し、見つかった場合には、「Pythonista リストの新しいリマインダーです。」という新しいリマインダ=を追加します:

import reminders
all_calendars = reminders.get_all_calendars()
for calendar in all_calendars:
    if calendar.title == 'Pythonista':
        r = reminders.Reminder(calendar)
        r.title = 'Pythonista リストの新しいリマインダーです。'
        r.save()
        break
else:
    print('"Pythonista"というカレンダー(リスト)は見つかりませんでした。')

カレンダー(リスト)の追加

 新しいカレンダー(リスト)をプログラムで作成することもできます。以下の例では Pythonista という名称のカレンダーが無い場合に、新しく Pythonista というカレンダーを作成します:

import reminders
all_calendars = reminders.get_all_calendars()
for calendar in all_calendars:
    if calendar.title == 'Pythonista':
        print('"Pythonista" というカレンダーは既に存在します。')
        break
else:
    new_calendar = reminders.Calendar()
    new_calendar.title = 'Pythonista'
    new_calendar.save()
    print('新しいカレンダーを追加しました。')

アラームの追加

 リマインダーは、実際に何かをリマインドした際、すなわち、通知を表示すると便利さを実感できます。そのためには、一つないし複数の :class:'Alarm' をリマインダーに追加する必要があります。:class:'Alarm' は指定の時間になった時、または地理的な場所への到着/出発により起動します。

 まずは日付と時刻によるアラームについて見てみましょう。次の例は、現在から25分後に通知を表示する、新しいリマインダーを追加します:

import reminders
import datetime
r = reminders.Reminder()
r.title = '休憩にしませんか?'
minutes = 25
due = datetime.datetime.now() + datetime.timedelta(minutes=minutes)
# 注:ここでは締切日時にアラームを鳴らすよう設定していますが、
# 別の日時にすることもできます。
r.due_date = due
a = reminders.Alarm()
a.date = due
r.alarms = [a]
r.save()
print(' %i 分後にリマインダーが通知をします。' % minutes)

 地理的な場所に基づいたアラームを追加するには、タイトルと緯度、経度を設定する必要があります。指定地点を中心としたアラームを出すべきエリアの半径と、そのエリアに入った時に鳴らすか、エリアから出た時に鳴らすかも指定できます:

import reminders

r = reminders.Reminder()
r.title = '自撮りしよ!'

a = reminders.Alarm()
lat, lng = 37.332224, -122.030780
radius = 500 # metres
title = '1 Infinite Loop'
a.location = (title, lat, lng, radius)
a.proximity = 'enter'
r.alarms = [a]
r.save()

Functions

reminders.get_reminders(calendar=None, completed=None)

 引数 calendar で指定した(または全ての)カレンダーから全てのリマインダーを取得します。

 引数 calendar が省略された、あるいは None の場合、全てのカレンダーの全てのリマインダーが返されます。

 引数 completed の値によって、リマインダーをフィルターにかけます:

  • None (the default): 全てのリマインダーを返します。
  • True: 完了済みの(チェックが外された)リマインダーのみを返します。
  • False: まだ完了していないリマインダーのみを返します。

reminders.get_all_calendars()

 使用できる全てのカレンダー(Clendar オブジェクト)のリストを返します。カレンダーはリマインダーのリストを示します。 Return a list of all available calendars (Calendar objects). Calendars represent lists of reminders.

reminders.get_default_calendar()

 デフォルトで新しいリマインダーとして使用されるカレンダーを返します。

reminders.get_calendar(calendar_id)

 引数 calendar_id で指定したカレンダーを返します。該当するカレンダーが見つからなかった場合には、None を返します。

reminders.delete_reminder(reminder)

 データベースからリマインダーを削除します。

 削除できた場合には、True を、できなかった場合には False を返します。

reminders.delete_calendar(calendar)

 データベースからカレンダーを削除します。

 削除できた場合には、True を、できなかった場合には False を返します。

Calendar オブジェクト

class reminders.Calendar

 カレンダーオブジェクトはリマインダーのリストを示します。全てのリマインダーは1つのカレンダーに属し、get_reminders() 関数を使用して特定のカレンダーのリマインダーを検索することができます。新しいリマインダーのためにデフォルトのカレンダーを取得するには、get_default_calendar() を使用します。全てのカレンダーはいずれも get_calendar() 関数を使用して検索できるようなIDを持っており、カレンダーの名称(タイトル)が変更されても、このIDは変更されません。

Calendar の属性

Calendar.title

 リマインダーのリストのタイトルです。(文字列、ユニコード)

Calendar.identifier

 カレンダーのIDです。(読込専用、文字列)

 この IDは、特定のカレンダーを検索することに後で使用できます。なお、カレンダーの名称(タイトル)が変更されてもIDは変更されません。

Calendar メソッド

Calendar.save()

 変更内容をデータベースに保存します。(カレンダーのメタデータのみが保存され、カレンダーに含まれているリマインダーは個別に Reminder.save() メソッドにより保存が必要です。)

Reminder オブジェクト

class reminders.Reminder([calendar])

 Reminder オブジェクトはリストの中の単体のリマインダーを意味します。リマインダーには複数のアラームオブジェクトを付属させることができます。アラームオブジェクトには、システムがリマインダーを通知する時刻や場所の属性を持っています。

 リマインダーは、常にリマインダーのリストを意味するカレンダーの構成要素です。リマインダーを初期設定する際に特定のカレンダーを指定しない場合には、デフォルトのカレンダーが使用されます。

Reminder の属性

Reminder.alarms

 リマインダーに関連づけられたアラームオブジェクトのリストです。

 (注:値は複製されます。アラームの属性を再設定しない限り、このリストの変更をしてもアラームは変更されません。)

Reminder.completed

 リマインダーが既に完了済(チェックが外されているか)を示します。(論理型)

Reminder.completion_date

 リマインダーが完了した(チェックが外された)日付を示します。完了していない場合には None となります。

Reminder.due_date

 リマインダーの締切日を示します。

 (注:締切日はアラームを設定する日とは同じではありません。リマインダーアプリに締切日が表示されても、アラームの追加をしない限り、通知を受けることはできません。アラームの追加は、リマインダーのアラーム属性を設定することによって行います。

Reminder.notes

 リマインダーに追加する注釈です。(文字列、ユニコード)

Reminder.priority

 リマインダーの優先順位です。(0=優先順位付けなし、1=優先順位最高、9=優先順位最低)

Reminder.title

 リマインダーのタイトル(名称)です。(文字列、ユニコード)

Reminder.url

 リマインダーに関連づけた URL です。

Reminder メソッド

Reminder.save()

 修正した内容をデータベースに保存します。(例 リマインダーのタイトルや完了/未了の属性を変更した場合など)

Alarm オブジェクト

class reminders.Alarm

 Alarm オブジェクトは、リマインダーに関連づけられたアラームを意味します。アラームは、指定時刻、または指定地点への進入/退出の際に起動できます。 Reminder.alarms 属性を設定することでリマインダーとアラームを関連づけることができます。

Alarm の属性

Alarm.date

 アラームが予定されている日付です。(datetime オブジェクト)

Alarm.location

 地理的位置に基づいたアラームのタイトル(名称)、緯度、経度および半径です。位置は3要素または4要素のタプルで示されます。(タイトル、緯度、経度[、半径])半径はデフォルトで100mになっています。

Alarm.proximity

 場所に応じたアラームの、到着または退出といった起動の条件を指定します。'enter'、'leave'または'none'のいずれかの値に設定します。