Дерево рішень

Перевіряти беклінки вашого сайту в n8n чи у звичайному Python?

Полотно з 25 нодами для триетапної задачі — це поширений вибір із жалем. Інший варіант — скрипт, який ніхто, крім вас, не зможе редагувати. Використовуйте дерево рішень.

Дерев’яне дерево рішень з двома чіткими шляхами в лісі

Дерево рішень, зверху вниз

  • Чи буде потік редагувати нетехнічна людина чи читати його логи? Обирайте n8n або Make.
  • Чи вміщується задача в 60 рядків і чи буде вона зберігатися в репозиторії? Обирайте Python.
  • Чи потрібен вам пост у Slack і рядок у таблиці, але без порівняння змін? Обирайте n8n з однією нодою HTTP Request.
  • Чи порівнюєте ви десятки доменів, зберігаєте історію чи юніт-тестуєте парсинг? Обирайте Python з SQLite.
  • Чи платить ваша команда за хмарні виконання в n8n? Порахуйте їх: цикл на 40 доменів може спожити весь ліміт тарифу.
  • Жоден із варіантів не підходить? Почніть з curl у shell-скрипті і подивіться, що саме буде болючим.

Коли візуальний потік виправдовує себе

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

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

Обирайте полотно для читача, а не для автора.

Хто читає потік

Маркетологи та відділ продажів читають потік через його результати, і їм потрібен останній запуск на виду. Полотно дає їм це без створення тикета. Вони читають результат, а не код. Скрипт дає їм лог-файл, який вони не відкриють.

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

Гілки, які видно оком

Нода IF на ok легко відстежувати. Три такі на одній сторінці все ще читабельні, якщо кожна гілка має зрозумілу назву. Далі лінії перетинаються, і рецензенту потрібно десять хвилин, щоб переконатися, яка гілка спрацює при порожньому результаті.

Де полотно стає тягарем

Цикли по багатьох доменах, спільний стан між запусками та юніт-тести — це типові точки напруги. Полотно вирішує кожну з них через обхідні шляхи, і кожен такий обхідний шлях — це місце, де потік може відхилитися від задуманого.

Якщо ви починаєте експортувати JSON, щоб виправити потік, задача вже переросла полотно. Перенесіть логіку в код, а полотно залиште для сповіщень.

Латунний ключ із червоною стрічкою, вставлений у дерев’яний дверний замок

Налаштування n8n у чотирьох рядках

Одна нода HTTP Request, метод GET, URL https://linkzoid.pro/api.php. Додайте параметри запиту action, q, key. Будь-хто, хто хоче перевірити беклінки вашого сайту таким чином, може скопіювати це за п’ять хвилин.

Зберігайте ключ у облікових даних, а не в ноді. Додайте ноду IF на ok і направте гілку false в робочий процес помилок, який сповістить вас.

Розділіть масив rows за допомогою ноди Item Lists або Split Out, потім запишіть дані в Google Sheets або Postgres. Слідкуйте за кількістю виконань, бо кожен елемент може рахуватися як крок на деяких тарифах.

Це вся задача. Вона ламається, коли з’являється пагінація: цикли в n8n працюють, але погано читаються після десяти нод.

Створіть потік n8n з п’яти нод

Кожна нода виконує одну задачу, і кожну з них можна протестувати окремо перед додаванням наступної.

01

Створіть ноду HTTP Request

Метод GET та URL https://linkzoid.pro/api.php. Додайте action, q та per як параметри запиту, а ключ залиште для наступного кроку.

02

Прикріпіть ключ як облікові дані

Збережіть його в облікових даних n8n та посилайтеся на нього з запиту. Ключ, введений прямо в поле URL, може потрапити в логи та експорти.

03

Блокування за прапорцем ok

Додайте ноду IF, яка читає ok. Направте гілку false в робочий процес помилок, який надішле тіло відповіді кудись, де ви її побачите.

04

Розділіть рядки

Використовуйте Split Out для масиву rows, щоб кожен домен став окремим елементом. Запишіть ці елементи в таблицю або базу даних, а не весь відповідь в одну клітинку.

05

Протестуйте спочатку на безкоштовній дії

Направте ноду на overview, яка не вимагає ключа, і переконайтеся у структурі відповіді, перш ніж переходити до платної дії.

Таблиця усунення неполадок

СимптомПричина в n8nПричина в Python
Приходить лише 10 рядківНе встановлено параметр per у нодіТе саме, перевірте рядок запиту
Запуск успішний, таблиця порожняРядки не розділені на елементиЗаписано об’єкт замість rows
402 після тижняРобочий процес зациклився на тригеріCron спрацював двічі
Ключ протік у логиВставлено в поле URLВиведено повний URL
Пропуски між місяцямиЗбереження виконань видалило старі запускаНіколи не зберігалася історія

Вартість за запуск

З нашого боку вартість однакова в обох випадках: 2 кредити за сторінку refdomains. Різниця у вартості виникає у творця.

Власний n8n безкоштовний у роботі. Хмарні тарифи рахують виконання. Звичайний скрипт на cron коштує нічого.

Який би ви не обрали, зберігайте датувану копію кожного запуску поза інструментом. Тижневі знімки в Actions — це зручне місце для цього, а порівняння пакетів пояснює, чому власна історія варта того.

Порахуйте виконання на домен

Цикл по сорока доменах — це сорок запусків на тарифі, який рахує виконання. Перевірте, як ваш тариф рахує цикл, перш ніж ставити його в розклад, бо рахунок йде за кількістю, а не за кредитами.

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

Власний хостинг має свої витрати

Власний n8n коштує сервер, оновлення та бекапи. База даних — ваша, щоб підтримувати її живою. Звичайний скрипт на маленькому сервері має менше рухомих частин, що є однією з причин обрати його для фіксованої місячної задачі.

Два терези, що зважують кімнатну рослину проти купи вільних каменів

Що зазвичала ламається першим

В n8n це пагінація та кількість елементів. В Python це те, що ніхто не протестував: порожній rows, таймаут, поле з іншою назвою, ніж ви припускали.

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

Змішані налаштування теж працюють. Нехай Python записує CSV за розкладом, а n8n читає файл і публікує його в Slack. Кожен інструмент робить те, що він виконує найкраще, і жоден потік не переростає десять кроків.

Збереження читабельності версії Python

Звичайний випадок для коду — те, що хтось інший має змінити його через пів року. Полегшіть це. Короткий скрипт з чіткими назвами та збереженою відповіддю кращий за хитромудрий одновірш, до якого ніхто не наважиться торкнутися.

Протестуйте парсер на збереженій відповіді

Збережіть одну реальну відповідь у файл і направте на неї юніт-тест. Парсер тоді працюватиме без витрати кредиту, а перейменоване поле зламається в тесті, а не в понеділок вранці.

Тримайте збережену відповідь невеликою, оскільки десятка рядків достатньо. Вкажіть дату, коли ви її взяли, щоб знати, коли востаннє змінилися назви полів.

Тримайте налаштування в одному місці

Домени, дії та розмір сторінки належать до невеликого блоку конфігурації, а не розкидані по всьому скрипту. Тоді колега зможе змінити список цілей, не торкаючись логіки парсингу рядків.

Тримайте секрети поза цим блоком. Завантажуйте їх з середовища, так само, як завантажується ключ.

Запустіть дворазовий пробний період перед фіксацією

Не вирішуйте це на папері. Створіть найменшу версію задачі в кожному інструменті, запускайте її щодня протягом двох тижнів і подивіться, яку з них ви будете відкривати без нагадування.

Подивіться, що ламається. Порахуйте кількість разів, коли вам довелося щось редагувати вручну, та кількість разів, коли результат був неправильним без помилки. Інструмент, який вимагає менше ручних виправлень, — той, якого варто залишити.

Логуйте кожне ручне виправлення

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

Запишіть, хто просив зміни

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

Обидві відповіді хороші, головне — мати посилання. Напишіть причину поруч із потоком або репозиторієм і переглядайте її, коли задача зростатиме.

Короткі відповіді для розробників

Чи працює Make або Zapier з цим API?
Так. Будь-що, що може надіслати HTTPS GET з параметрами запиту, працює, включаючи Make, Zapier, Pipedream та Apps Script. Використовуйте загальний HTTP-модуль, помістіть ключ у збережене з’єднання та прочитайте масив JSON rows на наступному кроці.
Чи може AI-агент викликати його замість цього?
Технічно так, оскільки це звичайний HTTP API. Для фіксованої місячної задачі скрипт дешевший і передбачуваніший, а агент додає рахунок за модель та шанс неправильного параметра. Використовуйте агента лише для разових запитів.
Який найдешевший спосіб почати?
Shell-скрипт з curl та безкоштовною дією overview, запущений з cron. Без ключа, без витрат, і ви вивчаєте структуру відповіді. Переходьте на Python, коли з’явиться перше незручне парсингування JSON.