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

Сегодня мы продолжим изучать Java Script OS X Automation и ознакомимся с основными классами и методами для работы с приложением Notes. Сегодняшний пример пригодиться людям, которые делают много заметок и начисто забывают о большей части записанного. К примеру, могут с удивлением обнаружить спустя пару месяцев, что важный контакт, который почему-то исчез из адресной книги вовсе не пропал бесследно, а был в спешке записан в «Заметках».
Что мы будем делать?
Напишем скрипт, который автоматически просмотрит записи из приложения «Заметки» на предмет номеров телефонов и скопирует текст заметок, содержащих подобные сведения в отдельный текстовый файл. Этот скрипт можно запускать раз в 1-2 недели, чтобы проверить не было ли записано чего-то важного в забытьи и спешке.
Куда писать Java Script код?
- Открыть программу «Редактор скриптов» (Программы -> Утилиты).

- В верхнем меню выбрать Файл -> Новый.

- На переключателе языков выбрать JavaScript.

Как получить текст заметки?
Приложение «Заметки» самое простое с точки зрения установки взаимодействия с Java Script. Это будет наглядно видно, если сравнить нижеприведенные строчки с кодом из предыдущих статей:
// Кладем в переменную приложение заметки
var Notes = Application("Заметки");// Считываем содержимое заметки с помощью метода body() Notes.notes[0].body();
Если бы нам нужно было обратиться только к заголовку заметки, мы бы использовали метод 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» вы можете найти по следующим ссылкам:
- Автоматизация рутины в OS X. Урок 1. Пакетная обработка изображений
- Автоматизация рутины в OS X. Урок 2. Генерация слайдов для презентаций
- Автоматизация рутины в OS X. Урок 3. Рассылаем спам
- Автоматизация рутины в OS X. Урок 4. Простейший парсинг почтового ящика
- Автоматизация рутины в OS X. Урок 5. Пакетная конвертация текстовых файлов
- Автоматизация рутины в OS X. Урок 6. Простейший парсинг веб-страниц
- Автоматизация рутины в OS X. Урок 7. Пакетная конвертация видео и аудио
Смотрите также:
- Почему iPhone выключается на холоде
- Как передавать фото и видео между iPhone
- Как выключить функцию «Найти iPhone»
✅ Подписывайтесь на нас в Telegram, Max, ВКонтакте, и Яндекс.Дзен.
