iPhones.ru

Познай мощь Automator. Работаем с БД

Ирина Чернова avatar | 19
FavoriteLoading В закладки
Познай мощь Automator. Работаем с БД

С помощью встроенных средств OS X.

Продолжаем осваивать замечательное приложение Automator. Это уже четвертая статья цикла. А вот три предыдущие:

Эти материалы были «на разогрев», а теперь мы плавно приступаем к познанию истинной мощи Automator.

Чтобы делать реально полезные автоматизации, а не изобретать велосипеды наподобие скрипта для склевания pdf, бывает необходимо использовать внешние файлы с данными: адресные книги, таблицы с информацией о товарах, списки ссылок для парсинга и т. п.

Удобно хранить такую информацию в обычной реляционной базе данных и считывать оттуда SQL-запросами. В этом материале мы научимся делать это с помощью Automator.

Перед тем как использовать базу данных в автоматизирующих скриптах, ее надо где-то достать. Обычно, в подобных статьях прилагается файл с готовой базой для скачивания. Но я пойду другим путем и воспользуюсь случаем, чтобы рассказать об одной очень интересной фиче OS X.

Знали ли вы, что на маках есть возможность создавать базы данных SQLlite и делать к ним запросы из командной строки, без установки дополнительных программ?

Инструкция. Создаем базу данных SQLlite

1. Запускаем Программы -> Утилиты -> Терминал:
open_terminal

2. Создаем и открываем новую базу данных. Набираем:

sqllite3 my_contacts

Нажимаем Enter:

create_db

3. Создаем новую таблицу. Набираем:

create table problem_clients(first name text, surname text, email text);

Нажимаем Enter:

create_table

4. Добавляем в таблицу записи. Набираем:

insert into problem_clients values(“Иван”,”Иванов”,”[email protected]”),(“Петр”,”Петров”,”[email protected]”),(“Сидор”,”Сидорович”,”[email protected]”),(“Денис”,”Денисов”,”[email protected]”);

Нажимаем Enter:

insert_table

5. Просматриваем записи в таблице. Набираем:

select * from problem_clients;

Нажимаем Enter:

view_table

Готовый файл с базой данных хранится в корневом каталоге активного пользователя:

sqlite_base_in_finder

Его мы будем использовать для нашей автоматизации.

А теперь с помощью Automator создадим программу, которая будет считывать из базы адреса проблемных клиентов и отправлять их на нужный адрес электронной почты.

Пример очень упрощенный и надуманный, но после ознакомления с ним легко понять, каким образом Automator взаимодействует с базами данных.

Это понимание поможет вам организовать использование БД в собственных автоматизациях.

Инструкция. Как в Automator использовать данные из базы SQLlite

1. Открываем Программы->Automator и выбираем пункт меню Файл->Новый:

create_programm

2. Перетаскиваем на основное поле действие Получить указанные объекты Finder:

get_finder_object

3. Нажимаем на кнопку Добавить и выбираем файл с нашей базой:

select_database

4. Перетаскиваем на основное поле действие Выполнить SQL и вводим SQL-запрос для выбора email-адресов из базы:

select email from problem_clients;

execute_sql

5. Перетаскиваем на основное поле действие Получить значение переменной и в поле для указания имени переменной набираем mail_body (вы можете выбрать другое имя):
set_variable

6. Перетаскиваем на основное поле действие Новое сообщение Почты. Указываем адрес получателя и тему письма:

create_email

7. Перетаскиваем на основное поле действие Отправка исходящих сообщений:

send_emails

8. Запускаем скрипт и проверяем, отправилось ли письмо:

mail_is_sended

Для начала достаточно этой простой инструкции. К теме использования баз данных для автоматизаций мы еще не раз вернемся, когда будем говорить о написании скриптов для OS X на JavaScript, Apple Script и Shell Script.

Приложение. Отвечаем на вопросы читателей

В комментариях к прошлой статье об Automator читатели задали два очень интересных и актуальных вопроса, ответы на которые будут интересны не только им. Поэтому расскажем об их решение в завершение статьи:

osmanov_question

К сожалению, дату создания файла скриптами не поправишь (в справочнике это свойство описано как read only). А вот дату изменения можно ставить какую угодно. Предполагаю, что дату создания Вам нужно знать для фильтрации и сортировки картинок в поиске. И Вы с тем же успехом сможете использовать для этого дату изменения.

Вот один из вариантов решения проблемы:

1. Открываем Программы->Утилиты->Редактор скриптов. Выбираем язык JavaScript (по умолчанию выбран Apple Script).
choose_javascript

И вставляем следующий код:

[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]

Запускаем скрипт и проверяем результат:

date_in_comment

УРА! Теперь дата создания записана в комментарий.

После этого можно скопировать фотографии в новое место хранения и запустить код для приписывания файлам нужных дат изменения:

[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:

arthem_question

Артем, у твоей задачи тоже есть решение на JavaScript.

Вот небольшая программка перебирает каждый файл в выбранной папке и проверяет, не влезет ли он на диск. И если место для него есть, то перемещает файл:

1. Открываем Программы->Утилиты->Редактор скриптов. Выбираем язык JavaScript (по умолчанию выбран Apple Script).
choose_javascript

И вставляем следующий код:

[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, которые вы хотите автоматизировать, пишите о них в комментариях, пожалуйста.

1 Звезд2 Звезды3 Звезды4 Звезды5 Звезд (Проголосуйте первым за статью!)
undefined
iPhones.ru
С помощью встроенных средств OS X. Продолжаем осваивать замечательное приложение Automator. Это уже четвертая статья цикла. А вот три предыдущие: Создаем «волшебные» папки в OS X для автоматической обработки картинок Три быстрых трюка для автоматизации работы с PDF в OS X 4 полезных инструкции по работе с Finder Эти материалы были «на разогрев», а теперь...
Здесь можно оставить комментарий! Для этого авторизуйтесь или зарегистрируйтесь на iPhones.ru.

19 комментариев

Форум →
  1. Артём Суровцев avatar
    Артём Суровцев 26 февраля 2016
    0

    Спасибо! Буду пробовать.

    Ирина Чернова avatar
    Ирина Чернова26 февраля 2016
    0

    @Артём Суровцев, будут вопросы ты знаешь куда писать)

    dennis1 avatar
    dennis126 февраля 2016
    0

    @Ирина Чернова, честно сказать не знаю…

    MatveyYo avatar
    MatveyYo26 февраля 2016
    0

    @dennis1, 12 картинка сверху не считая заголовка.
    Хороший способ, но навертели с этими вещами, что вот не понятно откуда должен узнать что отельные файлы обрабатываются по-особому и для них есть особый редактор. Непанятна!

    dennis1 avatar
    dennis126 февраля 2016
    0

    @MatveyYo, спасибо за наводку…Ира..Ира уже бегу…)))

    Ирина Чернова avatar
    Ирина Чернова26 февраля 2016
    0

    @MatveyYo, что вы имеете ввиду под отдельными файлами?

    MatveyYo avatar
    MatveyYo26 февраля 2016
    0

    @Ирина Чернова, csv файлам тоже можно делать запрос.

    Войди на сайт, чтобы ответить
    Ответить
  2. Александр Бельцов avatar
    Александр Бельцов 26 февраля 2016
    0

    Ирина! Спасибо огромное! Очень интересно ! Буду с нетерпением ждать новых статей!

    Ирина Чернова avatar
    Ирина Чернова26 февраля 2016
    0

    @Александр Бельцов, рада, что Вам понравилось)

    Войди на сайт, чтобы ответить
    Ответить
  3. AnVS avatar
    AnVS 26 февраля 2016
    0

    @Ирина Чернова, почему JavaScript выбран, а не AppleScript?

    P.S. Спасибо за интересный материал.

    Ирина Чернова avatar
    Ирина Чернова6 марта 2016
    0

    @AnVS, вот тут в конце статьи ответ на Ваш вопрос https://www.iphones.ru/iNotes/541344

    Войди на сайт, чтобы ответить
    Ответить
  4. pupzem avatar
    pupzem 26 февраля 2016
    0

    Отлично. Из прошлой статьи я замутил скрипт для слияния пдф в один файл, прикольно!

    Ирина Чернова avatar
    Ирина Чернова26 февраля 2016
    0

    @pupzem, очень рада что вы нашли что-то полезное для себя)

    Войди на сайт, чтобы ответить
    Ответить
  5. bykoff avatar
    bykoff 26 февраля 2016
    0

    Я прямо чувствую МОЩЬ)) @Ирина Чернова, спасибо, продолжайте издавать статьи!
    И под шумок, стоит парой задача транслитерировать названия выделенных файлов (скопом), наверняка можно запилить службу на автоматоре, чтобы потом просто выделить несколько файликов правой кнопкой нажать и в транслит их имена махом? ;)

    Войди на сайт, чтобы ответить
    Ответить
  6. z0ne avatar
    z0ne 26 февраля 2016
    0

    Подскажите пожалуйста, есть ли возможность забиндить сочетание клавишь для быстрой блокировки мака?

    Войди на сайт, чтобы ответить
    Ответить
  7. Цугур avatar
    Цугур 27 февраля 2016
    0

    Ирина, чтобы сделать скриншот конкретного окна:
    1. CMD+Shift+4
    2. Включится режим вырезания скриншота
    3. Нажатием “Пробела” в этот момент вы переключите комп в режим скриншота окна
    И скрины так получаются красивые, с тенью и прозрачным фоном)

    theppd avatar
    theppd27 февраля 2016
    0

    @Цугур, Это не спортивно, надо скриптом!

    Войди на сайт, чтобы ответить
    Ответить
  8. Klimonka avatar
    Klimonka 27 февраля 2016
    1

    Здравствуйте! Подскажите, пожалуйста, есть какой нибудь адекватный скрипт для экпорта фотографий из приложения Фото на mac, следующим образом:
    при выборе “моментов” запустить скрипт, который каждую фотографию переименовывал в “название момента”_ХХ, и сохранял их в отдельную папку с названием момента с сохранением всей информации о фотографии.

    В настоящее время экпорт в Фото работать в таком режиме не может. Цель сего действия сделать адекватную картотеку для просмотра на ОС Windows.

    Войди на сайт, чтобы ответить
    Ответить
  9. Osmanov avatar
    Osmanov 2 марта 2016
    0

    Спасибо большое, Ирина! Ваш ответ не завставил себя долго ждать ;) попробую, как будет время

    ps вопрос из предыдущего комментария из моей же серии. Интересно

    Войди на сайт, чтобы ответить
    Ответить
Помни о правилах — если начал оффтопить, то не удивляйся потом.

Нашли орфографическую ошибку в новости?

Выделите ее мышью и нажмите Ctrl+Enter.