Автоматизация парсинга объявлений облегчает поиск и мониторинг объектов: коммерческой недвижимости, автомобилей, товаров. Ниже описан процесс построения бота, который получает данные из API, фильтрует их в n8n, сохраняет в NocoDB и отправляет уведомления в Telegram.
- 1. Источник данных: API объявлений
- 2. Обработка данных в n8n
- 2.1. Задачи в n8n
- 2.2. Пример кода для разборки данных
- 3. Сохранение в NocoDB
- 3.1. Актуальная вставка через v2 API
- 3.2. Пакетная вставка
- 4. Отправка сообщений в Telegram
- 4.1. Форматирование текста
- 4.2. Фото-заглушка
- 4.3. Ограничения Telegram
- 5. Ключевые слова для фильтрации
- Заключение
1. Источник данных: API объявлений
API возвращает данные в формате JSON и поддерживает фильтрацию по категориям, цене, городу и другим параметрам. Пример запроса:
GET https://ads-api.ru/main/api?user=EMAIL&token=TOKEN&category_id=7&city=Москва&limit=100
Основные параметры:
category_id
— категория (например, коммерческая недвижимость);q
— поиск по заголовку;price1
/price2
— фильтр по цене;city
— города;withcoords
— объявления с координатами;is_actual
— актуальность (11, 1, 0).
2. Обработка данных в n8n
2.1. Задачи в n8n
- Получение данных из API.
- Разворачивание JSON в массив объявлений.
- Удаление дубликатов по
id
. - Подготовка данных для NocoDB и Telegram.
2.2. Пример кода для разборки данных
Используется в узле Function для разворачивания массива и фильтрации:
// Получаем все входные данные
const items = $input.all();
let results = [];
// Проверяем: объявления могут быть в поле data или сразу в объекте
for (const item of items) {
if (Array.isArray(item.json.data)) {
results.push(...item.json.data);
} else {
results.push(item.json);
}
}
// Убираем дубликаты по ID
const seen = new Set();
const unique = results.filter(ad => {
if (!ad.id) return false;
if (seen.has(ad.id)) return false;
seen.add(ad.id);
return true;
});
// Возвращаем ID и заголовок
return unique.map(ad => ({
json: {
id: ad.id,
title: ad.title
}
}));
3. Сохранение в NocoDB
3.1. Актуальная вставка через v2 API
В версии v2 нет отдельного метода для bulk insert. Отправляется массив объектов через POST /records
:
POST https://example.com/api/v2/tables/{tableId}/records
Content-Type: application/json
xc-auth: {API_TOKEN}
[
{ "id": 123, "title": "Объявление 1" },
{ "id": 456, "title": "Объявление 2" }
]
3.2. Пакетная вставка
Для стабильной работы API разбивайте данные на пакеты по 50–100 записей:
function chunkArray(arr, size) {
const res = [];
for (let i = 0; i < arr.length; i += size) {
res.push(arr.slice(i, i + size));
}
return res;
}
const ads = $input.all().map(i => i.json);
return chunkArray(ads, 50).map(batch => ({ json: { records: batch } }));
Каждый пакет отправляется в HTTP Request node методом POST.
4. Отправка сообщений в Telegram
4.1. Форматирование текста
Пример форматированного сообщения с HTML-разметкой:
🏢 <b>Офис, 500 м²</b>
💵 300 000 ₽ в месяц
🌎 Москва, ул. Пушкина, 10
🔗 https://site.ru/item/12345
Описание помещения, обрезанное до 600 символов...
Источник: avito.ru
4.2. Фото-заглушка
При отсутствии фото можно подставить универсальную заглушку:
https://upload.wikimedia.org/wikipedia/commons/9/9a/Нет_фото.png
4.3. Ограничения Telegram
- Лимит — не более ~30 сообщений в секунду.
- При отправке фото с подписью рекомендуется задержка 3–5 секунд между сообщениями.
- При ошибке
Too Many Requests
используйте заголовокretry_after
для паузы.
5. Ключевые слова для фильтрации
Для выделения подходящих объектов используйте ключевые слова:
офис, помещение свободного назначения, здание...
Слова можно применять в фильтрах API или перед сохранением в NocoDB.
Заключение
Комбинация API, n8n и NocoDB позволяет автоматизировать сбор и отправку объявлений без сложных скриптов. Такой бот гибко масштабируется: подходит для коммерческой недвижимости, транспорта или любых других категорий, где требуется быстрая обработка новых данных.