Як через API керувати програмою ZennoPoster

ZennoPoster – це програма для автоматизації роботи, різної роботи яка пов’язана з файлами на комп’ютері, так і роботою пов’язаною з даними в інтернеті. А що робити тоді, коли є декілька ліцензій на ZennoPoster і потрібно керувати його процесами, наприклад добавляти завдання на виконання, змінювати кількість одночасних виконаннь завданнь? Правильно! Потрібно написати шаблон, який буде виконувати цю роботу!

Також, може бути зручно натиснувши кнопку на телефоні одержати інформацію про те, скільки саме завданнь було виконано і в скільки потоків в даний момент виконуються завдання. Ідеї, що саме може бути потрібно, у кожного свої. А принцип залишається незмінним – потрібно використовувати API програми ZennoPoster.

Проте API буває різним… І в нашому випадку хотілось би мати щось подібне до REST API, щоб була зручна панелька з описом і прикладами управління, наприклад Swagger UI. А в реальності замість цього нам доступний один клас Zennoposter у просторі імен бібліотеки ZennoLab.CommandCenter.dll. Тобто іншими словами віддаленне управління програмою Zennoposter не було передбачено розробниками цієї програми, і маючи локальне API потрібно написати свою реалізацію віддаленого управління. Як би це не виглядало, але кожний власник програми ZennoPoster самостійно чи за допомогою фрілансерів вирішує цю проблему, якщо бачить що в нього є така потреба.

Всі доступні команди, які можна виконати локально із свого шаблона запущеного в програмі ZennoPoster, можна знайти в офіційній документації за посиланнями:

https://zennolab.atlassian.net/wiki/spaces/RU/pages/495058994/
https://help.zennolab.com/en/v5/zennoposter/5.40.0.0/webframe.html#topic723.html
https://help.zennolab.com/en/v7/zennoposter/7.1.4/webframe.html#topic756.html

Але щоб постійно не ходити і не шукати, я зробив собі табличку, в якій перечислив ті методи, які відносяться до управління програмою ZennoPoster (власне скоріше шаблонами і завданнями, тому що доступу до налаштуваннь самої програми у нас немає).

Метод Опис
AddTask Добавити шаблон в програму ZennoPoster
RemoveTask Видалити шаблон з програми ZennoPoster
AddTries Добавити завдання для шаблона в програмі ZennoPoster
ExportInputSettings Експортувати вхідні налаштування шаблона в програмі ZennoPoster
ImportInputSettings Імпортувати вхідні настройки в шаблон який працює в програмі ZennoPoster
SetMaxThreads Встановити максимальну кількість одночасних виконаннь завданнь для шаблона який працює в ZennoPoster
SetTries Добавляє завдання для виконання шаблона який добавлений в ZennoPoster
GetTaskInfo Одержати інформацію про шаблон який добавлений в ZennoPoster
StartTask Запускає на виконання задачі шаблона який добавлений в ZennoPoster
StopTask Зупиняє процес запуску нових задач на виконання для шаблона працюючого в ZennoPoster
InterruptTask Жорстко перервати роботу задачі які виконуються для шаблона який працює в програмі ZennoPoster
SetExecutionSettings Встановити параметри виконання завдання для шаблона в ZennoPoster
SetSchedulerSettings Встановити налаштування планувальника для шаблона добавленого в ZennoPoster
ClearSuccess Очистити список успішно виконаних завданнь в програмі ZennoPoster
ClearFails Очистити список не успішно виконаних завданнь в програмі ZennoPoster

Так ось, принцип налаштування віддаленого доступу такий – потрібно написати шаблон, який буде запускатись на виконання наприклад кожну хвилину. Цей шаблон повинен відправляти запит наприклад до нашого сервісу REST API, який потрібно заздалегідь написати, налаштувати і запустити. І коли він на свій запит одержить задачу на виконання – він повинен її виконати – наприклад зупинити виконання якогось шаблона.

Коли часу немає на придумування і реалізацію свого API сервіса – то альтернативним варіантом може бути наприклад створення свого Telegram бота. В цьому випадку ми можемо з телефона відправляти завдання – а наш шаблон який працює в ZennoPoster буде звертатись час від часу до API Telegram використовуючи API ключ, і як тільки одержить повідомлення, зможе відреагувати на нього шляхом виконання потрібної команди.

Як бачимо, у будь-якому випадку все зводиться до того, що в ZennoPoster потрібно добавити свій шаблон, який буде мати необхідний нам функціонал, і вже з його допомогою можливо одержати доступ до управління іншими шаблонами.

Звичайно, що такий спосіб потребує затрат часу на реалізацію, і мабуть правильніше було-б, щоб розробники програми самостійно реалізували такий функціонал, давши можливість звертатись до ZennoPoster звичайними POST чи GET запитами. Проте, мені здається що вони і подумати ніколи не могли, що у людей може появитись така необхідність – адже щоб звертатись по прямому URL потрібно щоб на компьютері був білий IP адрес, щоб був відкритий порт на роутері і у файрволі, а такі умови можливі далеко не на всіх компьютерах. Тому, щоб запропонувати таке API розробники повинні на своїй стороні підняти сервер з API, який міг би бути посередником, між клієнтами і їх ZennoPoster (такий собі Cloud, хмара). А на рівні ZennoPoster опитувати цей сервіс раз у декілька хвилин, чи навіть тримаючи з’єднання використовуючи WebSocket. І коли була відправлена команда – ця команда була б автоматично принятою на рівні ZennoPoster. Крім того клієнти автоматично могли б одержати адміністративну панель, в якій в режимі онлайн було б видно всі їх програми, було б зрозуміло що саме і на якому сервері відбувається, і можливо єдине місце з шаблонами, які можна було б запускати з адмін панелі.

Але це все мої фантазії, тому що скоріш за все ніхто займатись реалізацією такого сервісу не буде – затрати на обслуговування і хмарні технологіх будуть суттєвими – а це означає що потрібно тоді додатково вводити абоненську плату за користування поверх ліцензії. Одночасно може виявитись що не всім користувачам буде потрібен такий функціонал (звичайно його потрібно робити таким, щоб його можна було відключати). Із-за чого реалізація Web API для ZennoPoster на рівні розробників, думаю так і залишиться у ідеях користувачів, а керувати віддалено виконанням шаблонів в програмі ZennoPoster получиться тільки реалізувавши свій проєкт який буде виконувати цю роботу і одержуючи завдання від своїх окремих API сервісів чи Telegram ботів.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *