Программирование без кода: разбираемся как в Shortcuts создавать свои сценарии

от
Soft   ios, shortcuts

Shortcuts — приложение для iOS, позволяющее пользователям выполнять задачи, связанные с приложениями. Меня заинтересовала эта тема и я на некоторое время погрузился в изучение работы с этим инструментом. В итоге я во всём разобрался и хочу рассказать как создавать свои сценарии на примере работы с API.

Задача
По нажатию на сценарий (я так буду называть шорткаты) отправлять играющую музыку в aNMusic. Видео, показывающее наглядно как это будет работать:


Принцип работы сценария
Сценарий состоит из последовательного набора действий. Действие может результат своей работы передать следующему действию, как pipeline в Linux. Пример:

pic.jpeg
Text используются для передачи произвольного текста следующему действию. Get Name of Emoji распознает наш эмоджи как "thinking face", и передаст следующему действию.

Это показывают линии, соединяющие действия. Если линия обрывается, значит действие не принимает входные данные. Пример:

pic.jpeg
Другой способ использовать результат других действий — переменные. Переменные задаются либо самими действиями, либо вручную. Пример:

pic.jpeg
Большинство действий имеют опции. Например, действие Alert имеет опцию Show Cancel Button. Её смысл в том, что если пользователь нажмёт Cancel, сценарий завершит работу.

Всё это написано в коротком описании действия прямо в приложении.

Отправление песни в aNMusic
Воспользуемся API-методом /nowplay.php. Список полей можно посмотреть здесь.

pic.jpeg
При нажатии на переменную можно указать какие именно данные мы хотим получить. Если это “Current Song” — можно узнать исполнителя, альбом, год, etc. Если файл — название файла, расширение, содержимое, размер, etc.

pic.jpeg
В программировании константы, которые могут измениться, выносят из кода на самый верх, чтобы их можно было сразу увидеть. Также и в этом сценарии можно логин и токен вынести в переменные на самый верх:

pic.jpeg
Теперь добавим обработку неуспешного ответа. Метод возвращает JSON с полем error в случае ошибки:

  1. {"error":"unknown token"}

Для работы с JSON нужно использовать тип Dictionary. Есть специальное действие “Get Dictionary from Input”, которое преобразует JSON на входе в Dictionary. После преобразования мы сможем проверить есть ли поле error. Если есть, кинем алерт и завершим работу сценария.

pic.jpeg
Отправление сообщения на форум
Кроме отправки песни в aNMusic можно сделать отправку сообщения на форум. Это потребует сохранения и обновления auth_token.

Нужно будет выполнить два API-метода:

  - /users/auth — если сценарий выполняется впервые или auth_token истёк
  - /forum/say — для отправки сообщения

Пробуем получить auth_token и auth_expires из iCloud (единственное место, где их можно сохранить). Если их там не будет, значит сценарий выполняется впервые. Если будут, то проверяем время истечения токена.

187376BB-9C04-478E-B8EE-5B4156B2F985.jpeg
Если этих файлов нет, сценарий выполняется впервые. Если есть, проверяем время истечения токена.

37E8DDD6-63DD-4136-8E5D-FE0221CA0BE0.jpeg
Для получения даты через Unix Time нужно установить дату в 00:00:00 Jan 1 1970 и прибавить секунды Unix Time.

Обновление токена можно было бы для упрощения алгоритма вынести в функцию, но функций нет. Поэтому обновление токена идёт после проверки наличия файлов и времени истечения токена, если выполнилось одно из этих условий. Для этого нужна переменная Need refresh access token.

Собственно, обновление токена:

21D0E8D2-AE52-4471-A99A-1430BBFC098E.jpeg
Осталось только отправить сообщение на форум:

1CCA61E7-E849-455E-94CB-D736307B3677.jpeg
Итог
Shortcuts идеально подходит для создания простых сценариев. Отправку песни в aNMusic получилось сделать за несколько минут.

Отправка на форум получилась сложнее из-за логики временного токена. Но это терпимо.

Минусы
Есть как минимум 2 действия, которые срабатывают неожиданным образом:

  - “Get Current Music” первый раз возвращает предыдущую песню
  - Сохранение файла в несуществующую папку вырубает сценарий без показывания ошибки

Готовый сценарий: aNMusic 1.shortcut
+7   7   0
524