Чтение разделов сайта
Делает карту адресов (как map) и сразу читает найденные страницы: адрес, заголовок и текст до 20 000 символов на страницу. Один вызов вместо цепочки «нашёл ссылку → прочитал → нашёл следующую» - так собирают содержимое раздела или каталога целиком.
https://srezai.ru/api/v1/crawlПример запроса
curl -X POST https://srezai.ru/api/v1/crawl \
-H "Content-Type: application/json" \
-H "Authorization: Bearer srz_live_ВАШ_КЛЮЧ" \
-d '{
"url": "https://all-events.ru",
"limit": 5,
"selectPaths": ["organizers"],
"search": "конференция"
}'Параметры тела
Тело запроса - JSON. Обязателен только url; неизвестные или недопустимые поля игнорируются, а не роняют запрос.
urlstringобязательныйСайт или любая его страница, http/https. Схема и хост берутся из адреса, якоря и хвостовой слэш отбрасываются.
limitnumberнеобязательныйСколько страниц прочитать, от 1 до 20 (по умолчанию 5). Страницы читаются параллельно, поэтому вызов с limit: 20 длится заметно дольше, чем с 5. Карта при этом запрашивается шире - чтобы фильтры не оставили вас без запрошенного числа страниц.
searchstringнеобязательныйОставить страницы, в тексте или заголовке которых есть эти слова. Здесь фильтр сравнивается с содержимым прочитанного, а не с адресом, - именно поэтому search: "конференция" работает: слово есть в тексте события и почти никогда - в его адресе.
selectPathsstring[]необязательныйЧитать только страницы, адрес которых содержит любую из этих подстрок (до 10). Это и есть прицельное чтение раздела: без него читаются первые адреса карты, а у агрегаторов это служебные страницы, а не события. Фильтр по адресу, а не по тексту.
excludePathsstring[]необязательныйНе читать страницы, чей адрес содержит любую из этих подстрок (до 10): архивы, теги, пагинация.
includeSubdomainsbooleanнеобязательныйСчитать своими и поддомены. По умолчанию false.
intentstringнеобязательныйЗадача словами: "страницы организаторов конференций". Адреса карты упорядочиваются по смыслу, и читаются первые limit - то есть страницы отбираются до чтения, а не после. Нужно там, где selectPaths бессилен: у нужных страниц нет общего фрагмента пути. Работает, если включён на стороне сервиса; иначе молча игнорируется.
Ответ
{
"url": "https://all-events.ru",
"origin": "https://all-events.ru",
"map": {
"total": 26111,
"source": "sitemap",
"outcome": "ok",
"note": ""
},
"pages": [
{
"url": "https://all-events.ru/events/2027/ai-conf/",
"title": "Международная конференция по ИИ",
"content": "Конференция соберёт исследователей и инженеров…"
},
{
"url": "https://all-events.ru/events/2027/robotics/",
"title": "Выставка робототехники",
"content": "На выставке покажут промышленных роботов…"
},
{
"url": "https://all-events.ru/events/2027/ml-school/",
"title": "Летняя школа по машинному обучению",
"content": "Школа рассчитана на студентов и практиков…"
}
],
"skipped": [
{
"url": "https://all-events.ru/events/2027/forum/",
"reason": "страница не прочиталась"
}
],
"credits": 5,
"meta": { "tookMs": 9400 }
}pagesobject[]необязательныйПрочитанные страницы: url, title и content - до 20 000 символов текста. Заголовок берётся из текста страницы, а не из HTML: если осмысленного заголовка нет, в него подставляется первая подходящая строка или адрес.
skippedobject[]необязательныйАдреса, которые прочитать не удалось: url и reason. Недоступная страница не роняет чтение - остальные отдаются, а причина названа. См. Когда страница не прочиталась.
mapobjectнеобязательныйИтог карты: total (сколько адресов нашлось), source, outcome и note. Сами адреса здесь не дублируются - они уже в pages и skipped. Только список адресов, без чтения, отдаёт карта сайта (map).
creditsnumberнеобязательныйСколько кредитов списано фактически - эта же цифра уходит в журнал запросов. Ноль прочитанных страниц - credits: 0.
metaobjectнеобязательныйtookMs - сколько занял вызов.
Порядок работы: сначала map, потом crawl
Так дешевле и точнее - вы не читаете страницы, которые не нужны:
- 1. map по адресу сайта - увидеть структуру: разделы и число адресов в них.
- 2. map с selectPaths по латинскому фрагменту пути -
selectPaths: ["organizers"]- чтобы получить адреса конкретного раздела, а не всего сайта. - 3. crawl с тем же
selectPathsи, если нужно, сsearchпо тексту - прочитать нужное и не платить за остальное.
Когда сайт не пустил: outcome: blocked
Сайты, закрытые от чтения (отвечают 403 или 401), читать нечего: карта пуста, страниц нет. Запрос проходит успешно (200), а в map.outcome приходит "blocked" с пояснением.
{
"url": "https://expomap.ru",
"origin": "https://expomap.ru",
"map": {
"total": 0,
"source": "links",
"outcome": "blocked",
"note": "Сайт отвечает 403/401 на наши запросы - обойти его мы не можем. Это не «страниц нет»: владелец закрыл доступ, и по этому адресу поможет только web_search по содержимому."
},
"pages": [],
"skipped": [],
"credits": 0,
"meta": { "tookMs": 1240 }
}Когда страница не прочиталась: skipped
Отдельные страницы могут не открыться - таймаут, пустой текст, отказ сайта. Частичный сбой не роняет вызов и не превращается в ошибку: остальные страницы приходят в pages, а недоступные - в skipped с причиной. Проверяйте skipped, прежде чем делать вывод «на сайте этого нет».
Непрочитанные страницы не считаются в цене: платите только за те, текст которых реально пришёл.
Цена
- карта - 1 кредит за каждые 10 возвращённых адресов, минимум 1. В
crawlкарта запрашивается шире, чем число читаемых страниц (вчетверо, не более 200 адресов), чтобы фильтры не оставили вас без страниц. - чтение - 1 кредит за каждую прочитанную страницу. Непрочитанные не считаются.
- Ноль прочитанных страниц - ноль кредитов, включая карту: клиент не получил текста, платить не за что.
Так, при полной карте чтение с limit: 5 стоит около 7 кредитов: карта запрашивается на 20 адресов (2 кредита) плюс пять прочитанных страниц. С limit: 20 - около 28: карта на 80 адресов (8 кредитов) плюс двадцать страниц. Точную сумму возвращает поле credits в ответе.
1 кредит = 0,10 ₽. Актуальная сетка - на странице тарифов, расход по услугам за сутки и неделю отдаёт get_usage.
Через MCP: crawl
Тот же функционал доступен агенту как инструмент crawl MCP-сервера - с теми же полями: url, limit, search, selectPaths, excludePaths, includeSubdomains. Ответ приходит текстом: страницы с заголовками и текстом, а непрочитанные адреса - отдельным перечнем с причиной. Нужны только адреса, без текста, - берите map: он дешевле, потому что страницы не читает.