Tuesday, February 28, 2017

#1 2012-08-16 07:56:35 am

kevin.atkins
Member
Registered: 2010-06-07
Posts: 60

Reminders.app

Has anyone scripted Mountain Lion's Reminders app yet?

I'm trying to make an automated system to create a series of reminders from input text, and possibly an email, if it works.

K@


K@
The long dark tunnel at the end of the light

Offline

 

#2 2012-08-17 12:32:33 pm

sroeper
Member
From: Germany
Registered: 2012-05-07
Posts: 10
Website

Re: Reminders.app

Scripting Reminder is pretty much the same then scripting iCal Todos.

As a starter...

Applescript:


tell application "Reminders"
   make new list with properties {name:"Test"}
   set mylist to list "Test"
   tell mylist
       make new reminder with properties {name:"Test Reminder", body:"New Reminder"}
   end tell
end tell

Offline

 

#3 2012-08-21 07:13:54 am

kevin.atkins
Member
Registered: 2010-06-07
Posts: 60

Re: Reminders.app

Thanks sroeper, that worked a treat.

I was expecting it to be more obscure!


K@
The long dark tunnel at the end of the light

Offline

 

#4 2017-02-04 05:15:17 am

amelchi
Member
Registered: 2010-12-05
Posts: 10

Re: Reminders.app

hello,

what I don't understand is how to go from a text line:

"tomorrow at ten call Bob, about his new book"

where the first part is the name of the reminder
where the second part is the body of the reminder

to the actual reminder...

how does it work
make new reminder with properties {name:"Test Reminder", body:"New Reminder"} ??

how do I get them from a text line as the one shown above?

TIA

sorry for the dummy question

please help

amelchi@gmail.com

Offline

 

#5 2017-02-04 12:44:23 pm

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 2829

Re: Reminders.app

Not a dummy question.

I hope that you will get every wanted infos in the script below :

Applescript:

tell application "Reminders"
   set theLists to get every list
   repeat with aList in theLists
       properties of aList
   end repeat
   set theNames to name of every list
   repeat with aList in theLists
       reminders of aList
   end repeat
   set theReminders to every reminder
   repeat with aReminder in theReminders
       tell aReminder
           due date --> missing value
           modification date --> date "samedi 4 février 2017 à 19:01:40"
           body --> "New Reminder"
           completed --> false
           creation date --> date "samedi 4 février 2017 à 19:01:40"
           name --> "Test Reminder"
           completion date --> missing value
           priority --> 0
           remind me date --> missing value
       end tell
   end repeat
   set testReminders to every reminder whose name starts with "Test"
   --> {reminder id "x-apple-reminder://AEE217B6-57CE-4882-AD00-868A5D63A28C"}
   repeat with aReminder in testReminders
       tell aReminder
           due date --> missing value
           modification date --> date "samedi 4 février 2017 à 19:01:40"
           body --> "New Reminder"
           completed --> false
           creation date --> date "samedi 4 février 2017 à 19:01:40"
           name --> "Test Reminder"
           completion date --> missing value
           priority --> 0
           remind me date --> missing value
       end tell
   end repeat
   
   if not (exists (first reminder whose name is "call Bob")) then
       tell me # Required because we can't work upon dates in the tell application "Reminders" block
           set dueDate to (date (get short date string of (current date))) + (1 * days) + (10 * hours)
       end tell
       tell list "Test"
           set newReminder to make new reminder with properties {name:"call Bob", body:" about his new book", due date:dueDate}
       end tell
   else
       set newReminder to (first reminder whose name is "call Bob")
   end if
   tell newReminder
       name --> "call Bob"
       due date --> date "dimanche 5 février 2017 à 10:00:00"
       body --> " about his new book"
   end tell
end tell

Yvan KOENIG running Sierra 10.12.3 in French (VALLAURIS, France) samedi 4 février 2017 19:38:33

Online

 

#6 2017-02-05 03:22:07 am

amelchi
Member
Registered: 2010-12-05
Posts: 10

Re: Reminders.app

Thanks Yvan, but...

the script keep running with no result...

Offline

 

#7 2017-02-05 05:11:22 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 2829

Re: Reminders.app

no result or error message ?

Here, as I deleted the list "Test" after posting here, now I logically get : error "Erreur dans Reminders : Il est impossible d’obtenir list \"Test\"." number -1728 from list "Test".

So, I added the instructions borrowed from message #1 of this thread :

Applescript:

tell application "Reminders"
   
   make new list with properties {name:"Test"}
   set mylist to list "Test"
   tell mylist
       make new reminder with properties {name:"Test Reminder", body:"New Reminder"}
   end tell
   
   set theLists to get every list
# continue

With these instructions I got what I got the events which  I got yesterdays :

Applescript:


# DON'T OPEN THIS ONE, IT's NOT A SCRIPT, IT's THE EVENTS LOG !!

tell application "Reminders"
   make new list with properties {name:"Test"}
       --> list id "FD27DB70-23F5-4D08-B395-4E8DFAA9D0C4"
   get list "Test"
       --> list id "FD27DB70-23F5-4D08-B395-4E8DFAA9D0C4"
   make new reminder with properties {name:"Test Reminder", body:"New Reminder"}
       --> reminder id "x-apple-reminder://hidden"
   get every list
       --> {list id "ECFE80A2-BCAA-4677-9881-51BCFB58144D", list id "FD27DB70-23F5-4D08-B395-4E8DFAA9D0C4"}
   get properties of list id "ECFE80A2-BCAA-4677-9881-51BCFB58144D"
       --> {name:"Sports", class:list, id:"ECFE80A2-BCAA-4677-9881-51BCFB58144D", container:missing value}
   get properties of list id "FD27DB70-23F5-4D08-B395-4E8DFAA9D0C4"
       --> {name:"Test", class:list, id:"FD27DB70-23F5-4D08-B395-4E8DFAA9D0C4", container:missing value}
   get name of every list
       --> {"Sports", "Test"}
   get every reminder of list id "ECFE80A2-BCAA-4677-9881-51BCFB58144D"
       --> {}
   get every reminder of list id "FD27DB70-23F5-4D08-B395-4E8DFAA9D0C4"
       --> {reminder id "x-apple-reminder://hidden"}
   get every reminder
       --> {reminder id "x-apple-reminder://hidden"}
   get due date of reminder id "x-apple-reminder://hidden"
       --> missing value
   get modification date of reminder id "x-apple-reminder://hidden"
       --> date "dimanche 5 février 2017 à 12:05:31"
   get body of reminder id "x-apple-reminder://hidden"
       --> "New Reminder"
   get completed of reminder id "x-apple-reminder://hidden"
       --> false
   get creation date of reminder id "x-apple-reminder://hidden"
       --> date "dimanche 5 février 2017 à 12:05:31"
   get name of reminder id "x-apple-reminder://hidden"
       --> "Test Reminder"
   get completion date of reminder id "x-apple-reminder://hidden"
       --> missing value
   get priority of reminder id "x-apple-reminder://hidden"
       --> 0
   get remind me date of reminder id "x-apple-reminder://hidden"
       --> missing value
   get every reminder whose name starts with "Test"
       --> {reminder id "x-apple-reminder://hidden"}
   get due date of reminder id "x-apple-reminder://hidden"
       --> missing value
   get modification date of reminder id "x-apple-reminder://hidden"
       --> date "dimanche 5 février 2017 à 12:05:31"
   get body of reminder id "x-apple-reminder://hidden"
       --> "New Reminder"
   get completed of reminder id "x-apple-reminder://hidden"
       --> false
   get creation date of reminder id "x-apple-reminder://hidden"
       --> date "dimanche 5 février 2017 à 12:05:31"
   get name of reminder id "x-apple-reminder://hidden"
       --> "Test Reminder"
   get completion date of reminder id "x-apple-reminder://hidden"
       --> missing value
   get priority of reminder id "x-apple-reminder://hidden"
       --> 0
   get remind me date of reminder id "x-apple-reminder://hidden"
       --> missing value
   exists reminder 1 whose name = "call Bob"
       --> false
end tell
tell current application
   current date
       --> date "dimanche 5 février 2017 à 12:05:31"
end tell
tell application "Reminders"
   make new reminder with properties {name:"call Bob", body:" about his new book", due date:date "lundi 6 février 2017 à 10:00:00"}
       --> reminder id "x-apple-reminder://hidden2"
   get name of reminder id "x-apple-reminder://hidden2"
       --> "call Bob"
   get due date of reminder id "x-apple-reminder://hidden2"
       --> date "lundi 6 février 2017 à 10:00:00"
   get body of reminder id "x-apple-reminder://hidden2"
       --> " about his new book"
end tell
Résultat :
" about his new book"

Yvan KOENIG running Sierra 10.12.3 in French (VALLAURIS, France) dimanche 5 février 2017 12:11:13

Last edited by Yvan Koenig (2017-02-05 08:48:11 am)

Online

 

#8 2017-02-05 05:24:16 am

amelchi
Member
Registered: 2010-12-05
Posts: 10

Re: Reminders.app

yes error message

expected end of line, etc. but found unknown token

Offline

 

#9 2017-02-05 11:00:05 am

ccstone
Member
Registered: 2009-02-07
Posts: 399

Re: Reminders.app

amelchi wrote:

yes error message

expected end of line, etc. but found unknown token

Hey @amelchi,

Sometimes these unknown token errors can be as simple as a non-breaking-space.

This script has worked reliably for me for over a year now:

Applescript:


-------------------------------------------------------------------------------------------
# Auth: Christopher Stone
# dCre: 2015/10/26 04:49
# dMod: 2016/02/23 16:09
# Appl: Reminders, Safari
# Task: Create Reminder from front Safari page.
# Libs: None
# Osax: None
# Tags: @Applescript, @Script, @Reminders, @Safari, @Create, @Make
-------------------------------------------------------------------------------------------

do shell script "open -ga Reminders"

set _date to (current date) + (1 * days)
set listName to "Reminders - iCloud"

tell application "Safari"
   tell front document
       set _url to its URL
       set _name to its name
   end tell
end tell

tell application "Reminders"
   activate
   show list listName
   tell list listName
       set newReminder to make new reminder with properties {name:_name, body:_url, remind me date:_date}
       show newReminder
   end tell
end tell

--
Chris
··················································································
{ MacBookPro6,1 · 2.66 GHz Intel Core i7 · 8GB RAM · OSX 10.12.3 }

Online

 

#10 2017-02-05 11:02:21 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 2829

Re: Reminders.app

Which OS version are you running ? Here it's 10.12.3.
Which version of Reminders are you using ? Here it's version 4.0 (441.9)

Yvan KOENIG running Sierra 10.12.3 in French (VALLAURIS, France) dimanche 5 février 2017 18:02:17

Online

 

#11 2017-02-05 11:15:05 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 2829

Re: Reminders.app

@ChristopherStone

Hello
When I executed the script which is in my first message this morning, I got the message :
error "Erreur dans Reminders : Il est impossible d’obtenir list \"Test\"." number -1728 from list "Test"

because yesterdays I removed the list which I didn't need.

When I added the lines listed in my second message, everything behaved well.

No way to get : expected end of line, etc. but found unknown token

The format used in the asker's question :
"tomorrow at ten call Bob, about his new book"
let me think that he use an old version of the app.
I didn't ran Reminders with old systems but I faced a resembling change in Notes where old versions used two lines when current one use three ones (at least if my memory is right).

As the asker gave its mail address in his message I asked him for details but have no answer at this time.

Yvan KOENIG running Sierra 10.12.3 in French (VALLAURIS, France) dimanche 5 février 2017 18:13:33

Online

 

#12 2017-02-05 05:05:14 pm

amelchi
Member
Registered: 2010-12-05
Posts: 10

Re: Reminders.app

hello

Sierra 10.2.4
reminders 4

in the end I wrote this...

Applescript:


-- Created based on code found in these sources:
-- https://discussions.apple.com/thread/3956557?start=0&tstart=0
-- https://discussions.apple.com/thread/3678943?start=0&tstart=0

-- ask the user for a file:
-- set theFile to (choose file)

-- read the file contents:
set theFileContents to (read file "Users:alessandromelchiorre:Dropbox:Reminders.txt")

--Change this to the path to your downloaded text file with your tasks in it! (Note the : instead of a / between folders) Or, just name them Reminders.txt and put them in your downloads folder

-- break out the lines/paragraphs of text:
set theLines to paragraphs of theFileContents

set AppleScript's text item delimiters to ": "

-- now iterate through those lines, one by one:
repeat with eachLine in theLines
   tell application "Fantastical 2"
       activate
       parse sentence (text item 1 of eachLine) notes (text item 2 of eachLine) with add immediately
       delay 2
   end tell
   --set AppleScript's text item delimiters to ""
end repeat

what do you think?

Offline

 

#13 2017-02-06 03:33:13 am

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 2829

Re: Reminders.app

Are you really using the application Reminders.app ?

I found no file named Reminders.txt on my machine.

Yvan KOENIG running Sierra 10.12.3 in French (VALLAURIS, France) lundi 6 février 2017 10:32:32

Online

 

#14 2017-02-06 03:40:51 am

amelchi
Member
Registered: 2010-12-05
Posts: 10

Re: Reminders.app

dear Yvan,

in this case I use fantastical because of its parse capabilities of natural language...
the file "Reminders.txt" is to be created by you: it is a simple txt file with a reminder per line.
My goal is to have in one line not only a reminder but also its note as in the following example:

"tomorrow at ten call Bob, about his new book"

where the first part "tomorrow at ten call Bob" is the name of the reminder
where the second part "about his new book" is the body of the reminder

it seems simple but actually at least for me is not

salut à Vallauris, beautiful village!

amlechi

Offline

 

#15 2017-02-07 11:28:10 am

amelchi
Member
Registered: 2010-12-05
Posts: 10

Re: Reminders.app

dear Yvan

another useful script is

Applescript:


set theFileContents to (read file "Users:alessandromelchiorreib:Dropbox:Reminders.txt")

--Change this to the path to your downloaded text file with your tasks in it! (Note the : instead of a / between folders) Or, just name them Reminders.txt and put them in your downloads folder

set theLines to paragraphs of theFileContents

repeat with eachLine in theLines
   tell application "Reminders"
       set mylist to list "Inbox" -- Change this to your Reminders list name
       tell mylist
           make new reminder at end with properties {name:eachLine, due date:current date}
       end tell
   end tell
end repeat

(*
-- Properties that can be set for each task
name (text) : the name of the reminder
id (text, r/o) : the unique identifier of the reminder
body (text) : the notes attached to the reminder
completed (boolean) : Is the reminder completed?
completion date (date) : the completion date of the reminder
container (list, r/o) : the container of the reminder
creation date (date, r/o) : the creation date of the reminder
due date (date) : the due date of the reminder
modification date (date, r/o) : the modification date of the reminder
remind me date (date) : the remind date of the reminder
priority (integer) : the priority of the reminder
*)


and actually it works very well... my problem (cause I am a newbie smile ) is how to add properties in a proper way and how to declare the related variables (for instance note or completion date, etc.)
If you can please help,
Thanks

amelchi

Offline

 

#16 2017-02-07 01:26:49 pm

Yvan Koenig
Member
Registered: 2006-09-14
Posts: 2829

Re: Reminders.app

I apologizes but as far as I know, there is no note property in a reminder.
Below are some instructions borrowed from my script which try to define some complementary properties.

Applescript:

if not (exists (first reminder whose name is "call Bob")) then
       tell me # Required because we can't work upon dates in the tell application "Reminders" block
           set dueDate to (date (get short date string of (current date))) + (1 * days) + (10 * hours)
           set remindMeDate to dueDate - (2 * hours)
           set creationDate to currentDate
           set modificationDate to creationDate + (1 * minutes)
           set completionDate to currentDate + (5 * minutes)
       end tell
       tell list "Test"
           set newReminder to make new reminder with properties {name:"call Bob", body:" about his new book", due date:dueDate, remind me date:remindMeDate, priority:2, creation date:creationDate, modification date:modificationDate, completion date:completionDate, completed:true}
       end tell
   else
       set newReminder to (first reminder whose name is "call Bob")
   end if
   tell newReminder
       name --> "call Bob"
       due date --> date "mercredi 8 février 2017 à 10:00:00"
       body --> " about his new book"    
       priority --> 2
       creation date --> date "mardi 7 février 2017 à 19:34:32"
       modification date --> date "mardi 7 février 2017 à 19:34:32"
       completion date --> missing value
       completed --> false
   end tell

As you may see, we can't set modification date, completion date and completed.

Yvan KOENIG running Sierra 10.12.3 in French (VALLAURIS, France) mardi 7 février 2017 20:26:00

Online

 

Board footer

Powered by FluxBB

[ Generated in 0.060 seconds, 8 queries executed ]

RSS (new topics) RSS (active topics)