Planifier un e-mail de rappel hebdomadaire avec AppleScript

Nous avons récemment expliqué comment utiliser deux composants très importants d’AppleScript: les instructions conditionnelles et les boucles de répétition. Lorsqu'ils sont combinés, la puissance de ces deux outils est incroyablement puissante. Nous allons maintenant utiliser ce que nous avons appris pour créer un flux de travail simple et pratique qui enverra automatiquement par courrier électronique une liste de vos tâches incomplètes à partir de l'application Rappels..


Étape 1. Créer un algorithme

Ce dont nous avons besoin, c’est d’une liste simple et claire d’étapes pour nous guider.

Avant de commencer à taper notre code, il est essentiel de comprendre ce que nous faisons. Nous avons déjà une bonne idée du résultat final que nous cherchons à atteindre, mais opter aveuglément pour atteindre cet objectif n'est pas le moyen le plus efficace d'y parvenir..

Au lieu de cela, nous voulons élaborer un algorithme de base qui servira de feuille de route pour la présentation de notre code. Ce dont nous avons besoin, c’est d’une liste simple et claire d’étapes pour nous guider.

La difficulté réside dans le fait que nous devons construire notre algorithme tout en gardant à l’esprit ce que nous savons du fonctionnement interne d’AppleScript. Nos étapes ne contiendront pas de code, mais elles doivent être conscientes du code. Sinon, on se retrouverait avec quelque chose comme ceci:

  • Obtenir des rappels
  • Mettre des rappels dans un email
  • Envoyer le message

C'est sans doute quelque peu utile, mais en réalité, nous pourrions suivre ce processus mentalement sans jamais épeler un algorithme spécifique. La réalité de la situation est que ce processus est beaucoup plus complexe et nécessite une réflexion plus approfondie sur la manière dont nous allons accomplir chaque pièce. Voici une tentative plus approfondie et utile d'un algorithme:

  • Obtenir tous les rappels dans une liste spécifiée
  • Cible uniquement les rappels qui ne sont pas terminés
  • Déterminez si le rappel a une date d'échéance
  • Si le rappel a une date d'échéance, saisissez le nom et la date d'échéance.
  • Si le rappel n'a pas de date d'échéance, saisissez simplement le nom
  • Convertir toutes les informations de rappel pertinentes en éléments de liste Applescript
  • Créer un nouveau message et définir ses propriétés
  • Produire nos éléments de liste dans le corps du message
  • Définir le destinataire du message
  • Envoyer le message
  • Programmer un message pour qu'il soit quotidien ou hebdomadaire

Nous parlons maintenant. Ceci est beaucoup plus spécifique et décrit efficacement la structure de notre code. Notre première tentative était d'une simplicité trompeuse et semblait pouvoir être réalisée en trois ou quatre lignes de code. Notre deuxième tentative représente un regard beaucoup plus réaliste sur la quantité de travail nécessaire à la réalisation de ce script..


Étape 2. App Rappels cible

Notre première tâche de codage consiste à faire communiquer AppleScript avec la nouvelle application Reminders dans Mountain Lion. Nous faisons bien sûr cela avec un bloc tell, comme si nous communiquions avec une autre application..

[applescript]
dire à l'application "Rappels"
fin dire
[/ applescript]

Notre bloc tell contiendra toutes les commandes que nous voulons lancer à l'application Rappels. Tout code placé entre ces deux lignes sera supposé être dirigé vers cette application spécifique.


Étape 3. Commencez une boucle de répétition

La tâche en haut de notre algorithme consiste à obtenir tous les rappels dans une liste spécifiée. Cependant, nous ne les voulons pas tous en même temps. Au lieu de cela, nous voulons en saisir un à la fois, tester pour voir s'il correspond à nos critères et procéder en conséquence..

Pour accomplir cet effet de cyclisme, nous pouvons utiliser une boucle de répétition, ce que nous avons appris dans un article précédent. Cette circonstance appelle un répéter avec boucle:

[applescript]
dire à l'application "Rappels"
répéter avec i de 1 à (compte de chaque rappel de la liste "Rappels")
fin de répéter
fin dire
[/ applescript]

Cela crée un bloc de code qui se répète une fois pour chaque rappel dans une liste intitulée "Rappels". Vous devriez en avoir un par défaut dans votre application Rappels.


La liste de rappels que nous ciblons.

Chaque fois que le bloc de code est exécuté, la variable je incrémentera jusqu'à ce qu'il soit égal au nombre d'éléments de notre liste de rappels.


Étape 4. Définissez vos variables

Nous allons ensuite créer un gâchis de variables. Certaines d'entre elles seront utilisées tout de suite, d'autres que vous ne verrez pas plus tard dans notre script, c'est juste une bonne idée de les éliminer en même temps..

[applescript]
--rendez-vous amoureux
définissez theDate sur "Rappels pour" et la chaîne de date de (date actuelle)

--variables vides
mettre theEntry à ""
mettre la liste à
paramétrez theOutput sur ""

dire à l'application "Rappels"
répéter avec i de 1 à (compte de chaque rappel de la liste "Rappels")

--variables de rappel
définir theReminder pour rappeler i de la liste "Rappels"
définissez reminderName sur le nom de theReminder

fin de répéter
fin dire
[/ applescript]

La première variable saisit la date actuelle. Nous faisons cela en nous référant à la "chaîne de date" de la date actuelle. Cela prend le format suivant: Vendredi 1 février 2012. En soi, la "date du jour" est beaucoup plus grande et contient l’heure ainsi que la date.

Après avoir la date, nous créons trois variables vides. Cela semble étrange, mais il y a une logique derrière tout cela. Fondamentalement, nous allons ajouter et manipuler ces variables dans notre répétition et si des blocs sont nécessaires et nous avons besoin d'un niveau de base d'existence avant de pouvoir le faire..

Enfin, à l'intérieur de notre boucle de répétition, nous créons deux autres variables. le rappel est tout simplement un raccourci pour que nous n'ayons pas à taper "rappel" je de la liste des rappels "un tas de fois. nom de rappel saisit le nom de chaque rappel au fur et à mesure que nous parcourons la liste.


Étape 5. Éliminer les articles terminés

Le problème de notre structure actuelle est que nous parcourons tout de vos rappels, même ceux qui ont été complétés. Ceux-ci ne nous intéressent pas vraiment, nous devons donc les filtrer avec une simple déclaration conditionnelle. Cela va à l'intérieur de la boucle de répétition juste après les variables de rappel de l'étape précédente.

[applescript]
--variables de rappel
définir theReminder pour rappeler i de la liste "Rappels"
définissez reminderName sur le nom de theReminder

--est complet?
si le rappel n'est pas terminé, alors
fin si
[/ applescript]

Comme vous pouvez le constater, c’est aussi simple qu’une déclaration si cible pas achevé des rappels. Maintenant, tout code que nous jetons à l'intérieur de ceci s'exécutera uniquement sur les rappels pertinents.


Étape 6. Créez une liste de rappels en attente

Maintenant que nous avons une instruction conditionnelle pour filtrer les éléments non terminés, nous devons trouver un moyen de remplir la liste avec le titre et la date d'échéance de chaque rappel en attente. La partie la plus délicate est que l’application Rappels n’exige pas de date d’échéance, ce qui signifie que certains rappels l’auront et d’autres pas..

Pour gérer cela, nous devons configurer deux scénarios différents. Tout d'abord, nous allons tester pour voir si une date d'échéance existe. Si c'est le cas, nous définirons l'entrée à la date d'échéance et le nom de rappel. Si une date d'échéance n'existe pas, nous ignorerons cette date et ajouterons simplement le titre à l'entrée. Enfin, nous ajouterons l'entrée à la liste. Encore une fois, ce processus s’appliquera à tous les rappels non terminés, en construisant progressivement la liste afin qu'il contienne toutes les informations dont nous avons besoin.

[applescript]
--est complet?
si le rappel n'est pas terminé, alors
--a date d'échéance?
si la date d'échéance du rappel existe, alors
définir date d'échéance à la date d'échéance du rappel
définissez theEntry sur reminderName & linefeed & dueDate
autre
définir theEntry sur reminderName
fin si
définir la liste à la liste et à l'entrée
fin si
[/ applescript]

Comme vous pouvez le constater, nous avons imbriqué une instruction conditionnelle dans une autre. Généralement, je m'éloigne de cela lorsque cela est possible pour que les choses restent simples et lisibles, mais dans ce cas, une couche d'imbrication est parfaitement acceptable. Notez également que j'ai placé un saut de ligne entre le nom de rappel et la date d'échéance afin qu'ils n'apparaissent pas sur la même ligne dans notre sortie finale.


Étape 7. Formatez la sortie

Nous avons à peu près tous fini avec le bloc de rappel de l'application Rappels. Ensuite, nous devons prendre tout le texte qui a été placé dans la liste et le formater bien pour la sortie dans un email.

Pour ce faire, nous devons toutefois avoir une idée de l’aspect actuel de notre production. Lorsque vous avez besoin de voir une valeur stockée, essayez d’utiliser une instruction return. Voici tout le code que nous avons écrit jusqu’à présent suivi d’une déclaration qui renvoie le contenu de la liste comme une chaîne de texte.

[applescript]
définissez theDate sur "Rappels pour" et la chaîne de date de (date actuelle)
mettre theEntry à ""
mettre la liste à
paramétrez theOutput sur ""

dire à l'application "Rappels"
répéter avec i de 1 à (compte de chaque rappel de la liste "Rappels")

--définir des variables
définir theReminder pour rappeler i de la liste "Rappels"
définissez reminderName sur le nom de theReminder

--est complet?
si le rappel n'est pas terminé, alors
--a date d'échéance?
si la date d'échéance du rappel existe, alors
définir date d'échéance à la date d'échéance du rappel
définissez theEntry sur reminderName & linefeed & dueDate
autre
définir theEntry sur reminderName
fin si
définir la liste à la liste et à l'entrée
fin si
fin de répéter
fin dire

retourne la liste sous forme de chaîne
[/ applescript]

Si nous le faisons, nous verrons beaucoup de texte apparaître dans la section "Résultat" de l'éditeur AppleScript. Ceci est le texte qui est stocké dans la liste, mais comme vous pouvez le voir ci-dessous, c'est un peu salissant!


La sortie de notre script jusqu'à présent.

Nous avons certainement des problèmes de saut de ligne. Nettoyons cela, allons-nous? La première chose à faire est de supprimer cette déclaration. C'était juste une astuce temporaire à des fins de test et n'a pas sa place dans notre script final.

Ensuite, insérez le morceau de code ci-dessous à la place de l'instruction return. Ce que nous faisons ici est de parcourir les articles dans la liste, ajout de sauts de ligne après chaque opération et insertion de quelques lignes en pointillés pour que tout soit beau.

[applescript]
répéter avec i de 1 à (nombre de chaque élément de la liste)
définissez theOutput sur (theOutput & item i de theList en tant que chaîne) & linefeed & "---" & linefeed
fin de répéter
[/ applescript]

Maintenant, si nous ajoutons une autre déclaration de retour temporaire pour vérifier le résultat, ce que nous voyons est beaucoup plus joli et facile à lire. Notez que notre script gère correctement les rappels avec et sans les échéances et sépare chaque rappel avec les tirets que j'ai mentionnés précédemment..


La sortie de notre script jusqu'à présent.

Étape 8. Envoyez l'email

Nous avons presque fini! Maintenant que nous avons une liste bien formatée des rappels actuels, nous avons juste besoin de recevoir cette information dans un courrier électronique et de l'envoyer..

C'est là que les choses se compliquent un peu. Scripting Mail est une tâche assez bizarre et vous avez simplement besoin de savoir comment cela fonctionne pour que tout se passe bien. Le dictionnaire AppleScript volonté aider, mais les choses ne sont pas aussi simples que dans d'autres applications, alors ne vous découragez pas si vous êtes confus.

Le processus de base est comme suit. Tout d'abord, vous devez définir une variable pour créer un nouveau message auquel vous affectez un ensemble de propriétés (visible, expéditeur, sujet et contenu). Ensuite, vous initiez un bloc tell sur cette variable (qui est le nouveau message sortant) et créer un nouveau destinataire. Ensuite, vous envoyez bien sûr le message. Voici à quoi cela ressemble dans la pratique:

[applescript]
--Envoyer un email
dire à l'application "Mail"
Activer
définissez theMessage pour créer un nouveau message sortant avec les propriétés visible: true, expéditeur: "[email protected]", sujet: theDate, contenu: theOutput
dites au message
créer un nouveau destinataire avec les propriétés address: "[email protected]"
envoyer
fin dire
fin dire
[/ applescript]

Notez que nous avons un expéditeur et un destinataire ici. Vous pouvez créer le même courrier électronique si vous souhaitez vous envoyer le message, ou peut-être que vous souhaitez inclure plusieurs membres de l'équipe afin que vous puissiez utiliser cet e-mail quotidien pour que tout le monde reste à la tâche. C'est à vous!

Nous avons également un sujet avec la date qui utilise notre la date variable d'avant. Le contenu du message est défini sur le résultat il ressemblera donc à ce que nous avons vu dans nos tests.

Notre script est maintenant terminé. Juste pour être sûr que vous avez tout, voici la chose complète:

[applescript]
définissez theDate sur "Rappels pour" et la chaîne de date de (date actuelle)
mettre theEntry à ""
mettre la liste à
paramétrez theOutput sur ""

dire à l'application "Rappels"
répéter avec i de 1 à (compte de chaque rappel de la liste "Rappels")

--définir des variables
définir theReminder pour rappeler i de la liste "Rappels"
définissez reminderName sur le nom de theReminder

--est complet?
si le rappel n'est pas terminé, alors
--a date d'échéance?
si la date d'échéance du rappel existe, alors
définir date d'échéance à la date d'échéance du rappel
définissez theEntry sur reminderName & linefeed & dueDate
autre
définir theEntry sur reminderName
fin si
définir la liste à la liste et à l'entrée
fin si
fin de répéter
fin dire

répéter avec i de 1 à (nombre de chaque élément de la liste)
définissez theOutput sur (theOutput & item i de theList en tant que chaîne) & linefeed & "---" & linefeed
fin de répéter

--Envoyer un email
dire à l'application "Mail"
Activer
définissez theMessage pour créer un nouveau message sortant avec les propriétés visible: true, expéditeur: "[email protected]", sujet: theDate, contenu: theOutput
dites au message
créer un nouveau destinataire avec les propriétés address: "[email protected]"
envoyer
fin dire
fin dire
[/ applescript]


Étape 9. Planification du script

Maintenant que le script est parfaitement fonctionnel, nous devons trouver un moyen de le programmer pour qu'il soit exécuté régulièrement, par exemple tous les lundis matins afin que vous puissiez avoir un aperçu de votre semaine. Pour ce faire, enregistrez le script en tant qu'application, placez-le où bon vous semble sur votre disque dur, puis ouvrez l'application Agenda..

À partir de là, vous voudrez probablement créer un nouveau calendrier spécialement pour les tâches automatisées (pour ne pas encombrer vos autres calendriers). Créez ensuite un nouvel événement qui se répète tous les lundis. Enfin, créez une alerte pour l'événement qui ouvre un fichier et choisissez votre application de script..


Planification du script dans le calendrier.

Avec cela en place, tous les lundis à 8h, que je sois ou non devant mon ordinateur, un email me sera envoyé contenant mes rappels pour la semaine.


Email de rappel

Fais le mieux!

Si vous avez suivi les étapes jusqu’à maintenant, félicitations, vous venez de créer un petit script génial qui vous aidera à rester productif cette année. Maintenant, il est temps de prendre ce que j'ai fait et de le modifier pour répondre à vos propres besoins. Comment pouvez-vous le rendre mieux adapté à votre flux de travail?