iOSのオートメーションを使ってイトーヨーカドーのネットスーパーの配達予定日時を自動でカレンダーに登録するようにしてみたのでやり方をメモ。
前提整理
まず、イトーヨーカドーのネットスーパーでの買物の手順を整理しておく(厳密にすると登場人物はもっと細かく分類できそうだが、簡単のためにここでは「ユーザー」と「ネットスーパー」という単純化した整理にしておく)。
- ユーザーがネットスーパーで買物をする。このときに受取時間帯(2時間幅)を合わせて指定する。
- ネットスーパーからユーザーに「注文完了のお知らせ」メールが届く。このとき、配達予定日時はまだ確定していない。
- 受取時間帯の数時間前になると、ネットスーパーからユーザーに「配達予定日時のお知らせ」メールが届く。このメールには最新のお届け予定日時(30分程度の幅)が確認できるURLが記載されており、ユーザーはこのURLにアクセスすることで配達予定日時の更新を知ることができる。配達予定日時は時々刻々更新される。
- 受取時間帯が近付き配達が開始されると、ネットスーパーからユーザーに「配達開始のお知らせ」メールが届く。このメールも「配達予定日時のお知らせ」とほぼ同じ内容で、最新のお届け予定日時が確認できるURLが記載されている。
- ユーザーは自宅でネットスーパーの商品を受け取る。
- ネットスーパーからユーザーに「配達完了のお知らせ」メールが届く。
図にするとこんな感じ。
上記手順の3, 4でメールを見逃したり、ついうっかり5の受取時間に外出してしまうといったことを防ぐために、配達予定日時を自動でカレンダーに登録し、通知が来るようにしておきたい。
やったこと
iOSのショートカットアプリでオートメーションを作成する。以下iOS 17.4.1での場合。
-
ショートカットアプリ
を開く -
オートメーション
を選択する - 右上の
+
からオートメーションを作成する。個人用オートメーション
>メール
を選択する。 -
差出人
をお知らせメールの送信メールアドレスにする。 -
件名が次を含む
にお知らせメールの件名をコピペする。今回は「配達予定日時のお知らせ」をトリガーにしたので、「配達予定日時のお知らせ」メールの件名をコピペする。 -
すぐに実行
を選択する。 - オートメーションの本体を記述する。
オートメーションの本体は下記の通り。
- メールを入力として受け取る
- 変数
本文
をコンテンツ
に設定 -
本文
でhttps://www\.logistics\.iy-net\.jp/notice/[0-9a-f]+
に一致 - 変数
url
を一致
に設定 -
url
の内容を取得 -
URLの内容
でお届け予定時間\s*:\s*[0-9/: ]+〜[0-9/: ]+
に一致 - 変数
お届け予定
を一致
に設定 -
お届け予定
で[0-9/: ]+〜
に一致 -
一致
から日付を取得 - 変数
開始
を日付
に設定 -
お届け予定
で〜[0-9/: ]+
に一致 -
一致
から日付を取得 - 変数
終了
を日付
に設定 -
開始
から終了
までのネットスーパー受け取り
という名前の予定を追加 -
新規予定
のURL
をurl
に設定
こうしておくことで、「配達予定日時のお知らせ」メールを受信すると自動でオートメーションが実行され、カレンダーに配達予定日時が登録される。
メール本文もお届け予定日時のWebページも機械可読性は特に考えられていないので、とにかく正規表現でどうにかする。URLは末尾がIDのようなので先頭部分でひっかける。日時の取得は正規表現でおおざっぱにひっかけて、細部は「日付を取得」にお任せする。Webページに改行が含まれることがあるため、正規表現で半角空白ではなく\s
を使わなければいけなかったりといったところはハマリどころだろうか。
改善できそうなところ
上記では「配達開始のお知らせ」ではなく「配達予定日時のお知らせ」をトリガーにしているため、カレンダーに作成される予定の日時は最終的な配達予定日時とはズレることがある。これは、できるだけ早くカレンダーに予定を作成し、配達予定に気づくチャンスを少しでも多くするためである。カレンダーの日時をより正確にするためには、「配達開始のお知らせ」をトリガーに配達予定日時を再度取得し更新するといったことも考えられるだろう。
とはいうものの、現在はそこまではせず、カレンダーのURL欄にお届け予定日時のWebページのURLを設定しておき(オートメーションの「新規予定
のURL
をurl
に設定」の部分)、必要に応じて人手で簡単に予定を確認・更新できるようにするに止めている。