На этой странице

Чтение разделов сайта

Делает карту адресов (как map) и сразу читает найденные страницы: адрес, заголовок и текст до 20 000 символов на страницу. Один вызов вместо цепочки «нашёл ссылку → прочитал → нашёл следующую» - так собирают содержимое раздела или каталога целиком.

POSThttps://srezai.ru/api/v1/crawl

Пример запроса

bash
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 бессилен: у нужных страниц нет общего фрагмента пути. Работает, если включён на стороне сервиса; иначе молча игнорируется.

Ответ

json
{
  "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" с пояснением.

json
{
  "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: он дешевле, потому что страницы не читает.