Automator: Извлечение иконки программы из App Store

Вместо искусственных примеров использования средств автоматизации на Маке, вот вам реальная программная служба, которой пользуются некоторые авторы «МакРадара», в частности, при подготовке картинок для обзоров приложений. Благодаря этой службе загрузка иконки любого приложения, доступного в App Store или Mac App Store, становится удобной и быстрой.

👌 В телеграм-канале «Лайфхакер» лучшие статьи о том, как сделать жизнь проще.

Для примера возьмем iOS-программу «Купи батон». Что раньше редакторы делали вручную… Сначала в браузере открывалась страница программы в App Store, и из адреса этой страницы копировался 9-циферный идентификатор (у каждой программы он свой), который затем подставлялся в адрес http://itunes.apple.com/lookup?id=. Например, если адрес страницы «Купи батон» в App Store — https://itunes.apple.com/ru/app/id725418306 (код программы выделен жирным), то редактор посредством «копи-паста» загружает в окно браузера страницу http://itunes.apple.com/lookup?id=725418306.

Красным выделены те фрагменты служебной информации о программе, которые необходимы для загрузки иконки с помощью нижеописанной службы

Содержимое этой страницы — исчерпывающая информация о соответствующей программе как о товарной единице в App Store. Все данные представлены в виде структуры, основа которой — парные значения вида «ключ–значение». Если в тексте страницы найти «ключ» artworkUrl512, то за ним вы увидите его значение — длинный веб-адрес, по которому находится иконка нашей программы в максимальном разрешении. Остается только скопировать этот адрес, вставить его в адресную строку — и получить требуемую картинку.

Даже если сохранить весь этот порядок действий — зачем его выполнять вручную, если можно автоматизировать? Призовем на помощь Automator!

Сначала составим алгоритм

Изложенная выше последовательность действий очень простая, но к «ехать» хочется еще добавить немного «шашечек»: исключительно для пользовательского удобства дополним нашу последовательность еще парой шагов:

  1. Из адреса загруженной страницы App Store извлекаем и запоминаем идентификатор программы.
  2. Запускаем в браузере серверный сценарий itunes.apple.com/lookup, передаем ему код программы из шага 1, и запоминаем полученный поток текстовых данных.
  3. В полученном на шаге 2 потоке данных по ключу trackName ищем название программы и запоминаем его.
  4. В полученном на шаге 2 потоке данных по ключу artworkUrl512 ищем адрес иконки и запоминаем его.
  5. Берем адрес иконки, полученный на шаге 4, и по нему загружаем картинку на рабочий стол.
  6. Загруженный файл-картинку переименовываем по названию программы, полученному на шаге 3.
  7. PROFIT.

Теперь строим службу

Приступим к сборке нашего алгоритма в «Автоматоре». Создайте новый процесс типа Служба, и в заголовке области создания программы выберите: в первом выпадающем списке значение <нет входных данных>, а во втором списке выберите программу Safari (увы, другие браузеры Automator поддерживает постольку-поскольку).

Здесь показаны все необходимые для службы действия. Красные отметки указывают соответствие действий шагам приведенного выше алгоритма

Пойдем четко по нашему алгоритму.

Шаг 1. Берем идентификатор программы и формируем адрес обращения к сценарию lookup

Из раздела Интернет в боковой области библиотеки «Автоматора» перетащите в основную область окна программы действие Получить текущую страницу из Safari. Настраивать это действие никак не нужно. Результат этого действия: веб-адрес текущей страницы в «Сафари» (предполагаем, что это страница App Store), который будет передан следующему действию.

Из раздела Утилиты добавьте действие Запустить shell-скрипт, обязательно выбрав в выпадающем списке Передать ввод: пункт как аргументы. Поскольку сценарий я составил на языке «Питон», в выпадающем списке Shell выбрал пункт /usr/bin/python. Этот простой код принимает от первого действия веб-адрес, из которого, с помощью механизма регулярных выражений (поиск фрагмента строки по заданному шаблону), извлекает фрагмент, состоящий исключительно из девяти цифр. Результат этого действия: девятизначный идентификатор приложения, который будет передан следующему действию.

Шаг 2. Получаем от сервера Apple данные о программе

Из раздела Интернет добавьте действие Получить текст из веб-страницы, выбрав в выпадающем списке Получить пункт Простой текст. Результат этого действия: текст, который сгенерирует сервер Apple и в котором мы будем искать имя программы и путь к иконке.

Полученный текст нам еще понадобится, и чтобы повторно не обращаться к серверу Apple, этот текст можно сохранить в переменную. Для этого из раздела Утилиты добавьте действие Установить значение переменной. В выпадающем списке Переменная выберите пункт Новая переменная — в появившемся синем окошке введите имя переменной lookup и нажмите кнопку Готово. Результат этого действия: полученный от предыдущего действия текст будет сохраняться в переменной lookup.

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

Шаг 3. Ищем название программы

Предыдущее действие передает полученный ранее текстовый массив в исходном состоянии, поэтому мы сразу можем «прицепить» следующее действие — Запустить shell-скрипт из раздела Утилиты. Параметры этого действия такие же, как у аналогичного действия, второго сверху: /usr/bin/python в первом выпадающем списке и как аргументы — во втором. Сценарий в этом действии тоже использует механизм регулярных выражений, причем дважды: сначала находится ключ и значение (“trackName”:“Buy Me a Pie! — Grocery Shopping List”), а затем из полученной строки обрезаются все лишние символы, чтобы осталось только название программы. Результат этого действия: получается полное название программы, в данном примере это Buy Me a Pie! — Grocery Shopping List — оно и передается следующему действию.

Сейчас название программы нам не будет нужно — оно понадобится потом. Поэтому его нужно сохранить в новую переменную. Из раздела Утилиты добавьте действие Установить значение переменной и повторите те же манипуляции, что и с предыдущим аналогичным действием — только в этот раз создайте переменную с именем appName. Результат этого действия: до конца выполнения всего алгоритма в переменной appName будет храниться название программы, полученное в предыдущем действии.

Шаг 4. Ищем веб-адрес иконки

«Автоматор» так устроен, что результат работы предудыщего действия передается следующему. Но нам сейчас нужно не название программы, а исходная текстовая информация о ней, где мы будем искать адрес иконки. Поэтому из раздела Утилиты добавьте действие Получить значение переменной — сразу щелкните правой кнопкой мыши на заголовке этого действия и в появившемся меню выберите команду Игнорировать ввод. Теперь действие, с которым вы сейчас работаете, никогда не будет учитывать результат работы предыдущего действия, чтобы там ни происходило. В выпадающем списке Переменная выберите пункт lookup. Результат этого действия: следующему действию будет передано значение переменной lookup, в котором ранее мы сохранили текстовую информацию о программе.

Из раздела Утилиты добавьте действие Запустить shell-скрипт с такими же параметрами, что и одноименные действия на второй и пятой позициях в нашем алгоритме. Сценарий в этом действии аналогичен тому коду, который в пятом «скриптовом» действии искал название программы: находится пара ключа и значения (“artworkUrl512”:“http://a1013.phobos.apple.com/us/ r30/Purple6/v4/c7/9d/77/c79d778f–89a1-a925-b424–0e43819dfbba/mzl.xsxlaekt.png”), из которого убираются все кавычки, двоеточия и название ключа. Результат этого действия: получаем веб-адрес иконки, который передается следующему действию.

Шаг 5. Загружаем иконки на рабочий стол

Из раздела Интернет добавьте действие Загрузить URL, и в выпадающем списке Где укажите папку рабочего стола. Результат этого действия: по полученному от предыдущего действия адресу на рабочий стол будет загружен файл иконки.

Шаг 6. Задаем загруженному файлу имя программы

Посмотрите еще раз на веб-адрес иконки, указанный двумя абзацами выше: файл будет загружен с именем mzl.xsxlaekt.png. Конечно, можно оставить и так, но чтобы было красивее, это имя можно заменить на название программы, которое мы уже нашли и сохранили в переменную appName.

Из раздела Файлы и папки добавьте действие Переименовать объекты Finder и настройте его таким образом. В основном выпадающем списке выберите Имя единичного объекта, а выпадающем списке Имя выберите пункт Только основное имя. Теперь текстовое поле до — перетащите в него переменную appName, которая доступна в общем списке переменных в нижней части окна «Автоматора». Результат этого действия: загруженный ранее файл будет переименован с сохранением расширения. В нашем примере получится готовая картинка в виде файла Buy Me a Pie! — Grocery Shopping List.png.

Шаг 7. Еще кое-что…

Чтобы все было совсем красиво, можно добавить всплывающее уведомление — эта возможность появилась в «Автоматоре» с выходом OS X 10.9. Из раздела Утилиты добавьте действие Показать уведомление. В первый заголовок введите название почти готовой службы — Загрузить иконку приложения, а в поле Сообщение введите короткий текст типа: «Иконка загружена на ваш рабочий стол».

Шаг 8. PROFIT

Все, наша служба готова к труду и обороне. Сохраните ее под именем Загрузить иконку приложения и сразу переходите к Safari. Открыв в нем какую-нибудь страницу из App Store или Mac App Store, найдите в меню Safari > Службы новый пункт Загрузить иконку приложения — и, щелкнув на нем, запустите только что сохраненную службу. Через секунду-две, в зависимости от мощности вашего Мака, вы увидите уведомление — и иконку на рабочем столе, которую можно запросто использовать в дальнейшей работе.

«Да это сложно для меня!»

На самом деле в описанном выше процессе ничего сложного. Я сам не программист (хотя основы программирования после института еще помню), но достаточно было потратить часа три на неспешные поиски решения отдельных промежуточных задач (например, я не знал синтаксис регулярных выражений в «Питоне» — пришлось изрядно погуглить) — и дело в шляпе. Мне приятно, что хотя бы несколько человек в нашей команде находят такой способ получения иконок приложений более удобным.

Для удобства вы можете скачать уже готовую службу по кнопке, расположенной ниже. Открыв workflow-объект в «Автоматоре» можно внимательно изучить содержимое и настройки каждого действия, чтобы все изложенное было понятнее.

Скачать службу (ZIP-архив, 413 КБ)

Если кто-то из вас знает, как оптимизировать приведенный выше алгоритм, или может подсказать способ попроще — прошу в комментарии. :)
*Деятельность Meta Platforms Inc. и принадлежащих ей социальных сетей Facebook и Instagram запрещена на территории РФ.

Это упрощённая версия страницы.

Читать полную версию
Если нашли ошибку, выделите текст и нажмите Ctrl + Enter
Александр Журович
05.02.14 02:29
Ниже подсказывают, что в пути к значку нужно заменить jpg на png — и получится уже готовая иконка в форме суперэллипса. Но, увы, форма получается с зазубренными краями. Так что графический редактор все равно понадобится.
Sergey Pimenov
05.03.14 19:43
Александр, добрый день. Я был так впечатлён вашей статьёй, что попросил наших программистов сделать публичным нам внутренний инструмент по получению любых ресорсов из App Store и iTunes Store — иконки, обложки, скриншоты и тд. Это работает через Apple Search Api и там всегда актальные данные. Буду рад, если вам это поможет в работе. http://applifto.ru/resource
Александр Журович
05.03.14 19:46
Круууто! :) Спасибо, Сергей. Поделюсь ссылкой у себя в твиторе.
Deavy
23.03.14 15:18
Мне достаточно 175х175px, которые можно найти на странице приложения в App Store, и веб-инспектора в Chrome/Safari.
Читать все комментарии