С помощью встроенных средств OS X.
Продолжаем осваивать замечательное приложение Automator. Это уже четвертая статья цикла. А вот три предыдущие:
- Создаем «волшебные» папки в OS X для автоматической обработки картинок
- Три быстрых трюка для автоматизации работы с PDF в OS X
- 4 полезных инструкции по работе с Finder
Эти материалы были «на разогрев», а теперь мы плавно приступаем к познанию истинной мощи Automator.
Чтобы делать реально полезные автоматизации, а не изобретать велосипеды наподобие скрипта для склевания pdf, бывает необходимо использовать внешние файлы с данными: адресные книги, таблицы с информацией о товарах, списки ссылок для парсинга и т. п.
Удобно хранить такую информацию в обычной реляционной базе данных и считывать оттуда SQL-запросами. В этом материале мы научимся делать это с помощью Automator.
Перед тем как использовать базу данных в автоматизирующих скриптах, ее надо где-то достать. Обычно, в подобных статьях прилагается файл с готовой базой для скачивания. Но я пойду другим путем и воспользуюсь случаем, чтобы рассказать об одной очень интересной фиче OS X.
Знали ли вы, что на маках есть возможность создавать базы данных SQLlite и делать к ним запросы из командной строки, без установки дополнительных программ?
Инструкция. Создаем базу данных SQLlite
1. Запускаем Программы -> Утилиты -> Терминал:
2. Создаем и открываем новую базу данных. Набираем:
sqllite3 my_contacts
Нажимаем Enter:
3. Создаем новую таблицу. Набираем:
create table problem_clients(first name text, surname text, email text);
Нажимаем Enter:
4. Добавляем в таблицу записи. Набираем:
insert into problem_clients values(“Иван”,”Иванов”,”[email protected]”),(“Петр”,”Петров”,”[email protected]”),(“Сидор”,”Сидорович”,”[email protected]”),(“Денис”,”Денисов”,”[email protected]”);
Нажимаем Enter:
5. Просматриваем записи в таблице. Набираем:
select * from problem_clients;
Нажимаем Enter:
Готовый файл с базой данных хранится в корневом каталоге активного пользователя:
Его мы будем использовать для нашей автоматизации.
А теперь с помощью Automator создадим программу, которая будет считывать из базы адреса проблемных клиентов и отправлять их на нужный адрес электронной почты.
Пример очень упрощенный и надуманный, но после ознакомления с ним легко понять, каким образом Automator взаимодействует с базами данных.
Это понимание поможет вам организовать использование БД в собственных автоматизациях.
Инструкция. Как в Automator использовать данные из базы SQLlite
1. Открываем Программы->Automator и выбираем пункт меню Файл->Новый:
2. Перетаскиваем на основное поле действие Получить указанные объекты Finder:
3. Нажимаем на кнопку Добавить и выбираем файл с нашей базой:
4. Перетаскиваем на основное поле действие Выполнить SQL и вводим SQL-запрос для выбора email-адресов из базы:
select email from problem_clients;
5. Перетаскиваем на основное поле действие Получить значение переменной и в поле для указания имени переменной набираем mail_body (вы можете выбрать другое имя):
6. Перетаскиваем на основное поле действие Новое сообщение Почты. Указываем адрес получателя и тему письма:
7. Перетаскиваем на основное поле действие Отправка исходящих сообщений:
8. Запускаем скрипт и проверяем, отправилось ли письмо:
Для начала достаточно этой простой инструкции. К теме использования баз данных для автоматизаций мы еще не раз вернемся, когда будем говорить о написании скриптов для OS X на JavaScript, Apple Script и Shell Script.
Приложение. Отвечаем на вопросы читателей
В комментариях к прошлой статье об Automator читатели задали два очень интересных и актуальных вопроса, ответы на которые будут интересны не только им. Поэтому расскажем об их решение в завершение статьи:
К сожалению, дату создания файла скриптами не поправишь (в справочнике это свойство описано как read only). А вот дату изменения можно ставить какую угодно. Предполагаю, что дату создания Вам нужно знать для фильтрации и сортировки картинок в поиске. И Вы с тем же успехом сможете использовать для этого дату изменения.
Вот один из вариантов решения проблемы:
1. Открываем Программы->Утилиты->Редактор скриптов. Выбираем язык JavaScript (по умолчанию выбран Apple Script).
И вставляем следующий код:
[jscript]
Finder = Application("Finder");
fileArray = new Array();
// Здесь должен быть путь к папке с фотографиями
fileArray = Finder.startupDisk.folders.byName("Users").folders.byName("irina").folders.byName("cards").documentFiles;
// Перебираем все фотографии
for(i=0;i<=fileArray.length-1;i++)
{
// Записываем дату создания в комментарий
fileArray[i].comment = String(fileArray[i].creationDate());
}
[/jscript]
Запускаем скрипт и проверяем результат:
УРА! Теперь дата создания записана в комментарий.
После этого можно скопировать фотографии в новое место хранения и запустить код для приписывания файлам нужных дат изменения:
[jscript]
Finder = Application("Finder");
fileArray = new Array();
// Здесь должен быть новый путь к папке с фотографиями
fileArray = Finder.startupDisk.folders.byName("Users").folders.byName("irina").folders.byName("new_cards").documentFiles;
// Перебираем все фотографии
for(i=0;i<=fileArray.length-1;i++)
{
// Ставим нужную дату изменения из комментария
fileArray[i].modificationDate=new Date(fileArray[i].comment());
}
[/jscript]
А вот вопрос от одного из авторов iPhones.ru:
Артем, у твоей задачи тоже есть решение на JavaScript.
Вот небольшая программка перебирает каждый файл в выбранной папке и проверяет, не влезет ли он на диск. И если место для него есть, то перемещает файл:
1. Открываем Программы->Утилиты->Редактор скриптов. Выбираем язык JavaScript (по умолчанию выбран Apple Script).
И вставляем следующий код:
[jscript]
Finder = Application("Finder");
// Надо будет посмотреть через консоль какой id у флешки твоей и заменить. 0 – это Macintosh HD
fleshka=Finder.disks[0];
myFilms = new Array();
// Тут надо адрес папки с фильмами записать
myFilms=Finder.startupDisk.folders.byName("Users").folders.byName("irina").folders.byName("new_cards").documentFiles();
// Массив считается с единицы, так как 0 – DS_Store)
for(i=1;i<=myFilms.length-1;i++)
{
if(fleshka.freeSpace()>myFilms[i].size())
{
Finder.move(lastFilm, {to: fleshka});
// Обновляем массив, чтобы цикл не проходил по несуществующим элементам
myFilms=Finder.startupDisk.folders.byName("Users").folders.byName("irina").folders.byName("new_cards").documentFiles();
}
}
[/jscript]
Вот и все на сегодня. Продолжение следует. Если у вас есть какие-то задачи в OS X, которые вы хотите автоматизировать, пишите о них в комментариях, пожалуйста.
Источник: