Автоматизация рутины в OS X. Часть 8. Архивируем и анализируем записи из «Заметок»

Автоматизация рутины в OS X. Часть 8. Архивируем и анализируем записи из «Заметок»

Сегодня мы продолжим изучать Java Script OS X Automation и ознакомимся с основными классами и методами для работы с приложением Notes. Сегодняшний пример пригодиться людям, которые делают много заметок и начисто забывают о большей части записанного. К примеру, могут с удивлением обнаружить спустя пару месяцев, что важный контакт, который почему-то исчез из адресной книги вовсе не пропал бесследно, а был в спешке записан в «Заметках».

Что мы будем делать?

Напишем скрипт, который автоматически просмотрит записи из приложения «Заметки» на предмет номеров телефонов и скопирует текст заметок, содержащих подобные сведения в отдельный текстовый файл. Этот скрипт можно запускать раз в 1-2 недели, чтобы проверить не было ли записано чего-то важного в забытьи и спешке.

Куда писать Java Script код?

  1. Открыть программу «Редактор скриптов» (Программы -> Утилиты).
    Снимок экрана 2015-10-10 в 21.02.41
  2. В верхнем меню выбрать Файл -> Новый.Снимок экрана 2015-10-10 в 21.08.11
  3. На переключателе языков выбрать JavaScript.

Снимок экрана 2015-10-10 в 21.11.37

Как получить текст заметки?

Снимок экрана 2015-10-14 в 18.33.17Приложение «Заметки» самое простое с точки зрения установки взаимодействия с Java Script. Это будет наглядно видно, если сравнить нижеприведенные строчки с кодом из предыдущих статей:

// Кладем в переменную приложение заметки
var Notes = Application("Заметки");
// Считываем содержимое заметки с помощью метода body()
Notes.notes[0].body();

Снимок экрана 2015-10-14 в 18.33.03Если бы нам нужно было обратиться только к заголовку заметки, мы бы использовали метод name().

Как записать тексты нескольких заметок в один файл?

А теперь научимся взаимодействовать сразу с несколькими заметками:

//Создаем переменные для приложения заметки и для текстового редактора
var Notes = Application("Заметки");
var textEdit = Application("TextEdit");
//Создаем новый текстовый документ и присваиваем ему имя
var newDoc = textEdit.Document().make();
//Создаем пустую переменную чтобы складывать в нее тексты заметок
newDoc.name = "notes.txt";
var notesTexts ="";
//Обходим циклом четыре самые свежие заметки в приложении
for (i=0;i<=3;i++)
{
     //Кладем в общую переменную текст текущей заметки
   notesTexts = notesTexts +"\n" + Notes.notes[i].body();
}
//Записываем тексты заметок в текстовый файл
textEdit.documents["notes.txt"].text = notesTexts;

Как скриптом обработать все имеющиеся заметки?

Предыдущий код подразумевает, что пользователь знает сколько заметок он хочет использовать скрипте. А как быть, если нужно использовать все записи, но неизвестно точное их количество? Все заметки хранятся в массиве notes[] и количество элементов в нем можно узнать с помощью привычного Java Script метода length:

//Создаем переменные для приложения «Заметки» и текстового редактора
var Notes = Application("Заметки");
var textEdit = Application("TextEdit");
//Создаем текстовый документ и присваиваем ему имя
var newDoc = textEdit.Document().make();
newDoc.name = "notes.txt";
//Обходим по циклу все заметки от самой последней до самой первой
for (i=0;i<=Notes.notes.length-1;i++)
{
//Записываем содержимое текущей заметки в общую переменную
var notesTexts = notesTexts +"\n" + Notes.notes[i].body();
}
//Записываем текст всех заметок в текстовый файл
textEdit.documents["notes.txt"].text = notesTexts;

Как обработать заметки сделанные после определенной даты?

В первом абзаце статьи мы собирались писать скрипт, который будет обрабатывать заметки сделанные в последнею неделю. Каким образом осуществить такой отбор? Нам надо перебирать заметки начиная с самой последней и проверять у каждой свойство modification_date. В случае если оно меньше даты X, необходимо прекратить перебор:

//Создаем переменные для приложения Заметки и текстового редактора
var Notes = Application("Заметки");
var textEdit = Application("TextEdit");
//Создаем новый текстовый файл и присваиваем ему имя
var newDoc = textEdit.Document().make();
newDoc.name = "notes.txt";
//Создаем дату меньше текущей даты ровно одну неделю
today = new Date();
lastWeek = today.setDate(today.getDate() - 7);
for (i=0;i<=Notes.notes.length-1;i++)
{
//Проверяем на этой ли неделе была сделана заметка
if (Notes.notes[i].modificationDate() > lastWeek)
{
var notesTexts = notesTexts +"\n" + Notes.notes[i].body();
}
else
{
break;
}
}
//Записываем заметки, сделанные на этой неделе в файл
textEdit.documents["notes.txt"].text = notesTexts;

Как отфильтровать заметки содержащие номера телефонов?

Теперь перейдем к самой интересной части нашего скрипта. Отфильтруем только те заметки, в которых есть номера телефонов или другие длинные последовательности цифр. Здесь нам на помощь придут регулярные выражения:

// Создаем переменную для приложения Заметки и текстового редактора
var Notes = Application("Заметки");
var textEdit = Application("TextEdit");
// Создаем новый текстовый документ и присваиваем ему имя
var newDoc = textEdit.Document().make();
newDoc.name = "notes.txt";
// Создаем переменную содержащую дату на одну неделю меньше сегодняшней
today = new Date();
lastWeek = today.setDate(today.getDate() - 7);
//Создаем регулярное выражение для проверки есть ли в строке цифры (d) и подсчета сколько их (g)
var regExp = /\d/g;
//Перебираем заметки
for (i=0;i<=Notes.notes.length-1;i++)
{
//Проверяем не старше ли они одной недели
if (Notes.notes[i].modificationDate() > lastWeek){
   //Есть ли в них последовательности из более чем четырех цифр подряд
    if(Notes.notes[i].body().match(regExp).length>4)
    {
     //Если заметка удоволетворяет всем условиям, кладем ее в общую переменную
       var notesTexts =notesTexts +"\n" + Notes.notes[i].body();
   }

}
else
{
break;
}
}
//Записываем все собранные заметки в текстовый файл
textEdit.documents["notes.txt"].text = notesTexts;

С помощью метода match и регулярных выражений можно искать емейлы, номера банковских карт, ip-адреса и многое другое. Но эта тема отдельного цикла статей.

Предыдущие публикации из цикла «Автоматизация рутины в OS X» вы можете найти по следующим ссылкам:

Смотрите также:


✅ Подписывайтесь на нас в Telegram, ВКонтакте, и Яндекс.Дзен.



Добавить комментарий