Автоматизация рутины в 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, ВКонтакте, и Яндекс.Дзен.