The Public Library Service here in Prince Edward Island has self-checkout machines in some branches: touch screens with barcode scanners that allow patrons to check books out themselves, similar to self-checkout machines in grocery stores. The machines come from D-Tech, and when you opt for an emailed receipt from at the end of your session, you receive an email like this from notifications@d-techinternational.com:
PEI Public Library Service
Self Service Receipt for Borrowed Items
Name: **********5366
Title
COVID chronicles : a comics anthology
Item ID
33392010658484
Due Back
8/10/2022
***************************
Date: 17/09/2022 4:41:31 PM
Thank you for visiting the Library!
To automatically parse this email and create macOS Reminders for each item, I wrote this AppleScript:
using terms from application "Mail"
on perform mail action with messages caughtMessages for rule catchingRule
repeat with caughtMessage in caughtMessages
try
-- Get the body text of the email message
set receipt to content of caughtMessage
-- Split the body text into individual lines
set theLinesList to paragraphs of receipt
-- Loop through each of the lines in the body text
repeat with a from 1 to length of theLinesList
-- Get the current line
set theCurrentListItem to item a of theLinesList
-- If the current line is "Title" then...
if theCurrentListItem as string is equal to "Title" then
-- The actual title of the book is the next line, so store this
set theTitle to item (a + 1) of theLinesList
-- If the title is not empty then...
if theTitle as string is not equal to "" then
-- The date due is 7 lines later in the body of the email
set theDateDue to item (a + 7) of theLinesList
-- Re-format the date from D/M/Y to M/D/Y
set command to "date -j -f '%d/%m/%Y' " & theDateDue & " +'%m/%d/%Y'"
set theFormattedDate to do shell script (command as rich text)
-- Create a reminder in the "Project" list of the Reminders app
tell application "Reminders"
set mylist to list "Projects"
make new reminder at end with properties {name:"'" & theTitle & "' is due", allday due date:date theFormattedDate}
-- Say the title out loud!
say theTitle
end tell
end if
end if
end repeat
end try
end repeat
end perform mail action with messages
end using terms from
This script looks for every book in the incoming email, grabs the title and the date due, and creates a reminder.
To connect it to Mail.app, save the script in /Users/peter/Library/Application Scripts/com.apple.mail/LibraryDateDueReminders.scpt.
Finally, create a new Mail.app Rule that looks for incoming email from notifications@d-techinternational.com and passes each email that matches to the AppleScript:
From this point, whenever a new email arrives from the self-checkout machine, a new reminder will be created. Like this one:
I am very much a home cook when it comes to AppleScript: most scripts I write by Googling things like “date conversion in AppleScript” and “parsing strings in AppleScript.” It’s forever a language just on the edge of my ability to perceive it logically; it’s “human-like” syntax always seems like more a hindrance than a help. But it’s also a powerful Swiss Army knife of amazement if you’re willing to put the time in to figure it out every time anew.
Comments
My son Alexander read this
My son Alexander read this and thought this was a cool project.
Add new comment