Перейти к основному содержимому

API и массовая выгрузка

Человеку достаточно сайта. Программе нужен устойчивый способ спросить каталог: какие есть наборы, что в описании, где файл, что изменилось со вчерашнего дня. Это и есть программный интерфейс, API.

Главный практический вывод главы. Любому каталогу нужны две вещи: способ забрать все описания сразу и прямые ссылки на файлы, и то и другое без регистрации. API поиска и API к содержимому таблиц добавляют по размеру каталога и по задачам пользователей. Лимиты на API честны, только если рядом есть полная выгрузка: иначе каждый, кому нужна вся база, выкачивает её по кусочку, и это дорого и ему, и серверу.

Глава разбирает четыре задачи, которые обычно называют одним словом «API», варианты их решения, условия доступа и лимиты, интерфейсы, о которых владелец сайта не знает, и то, как это устроено в платформах. В конце — проверка десяти живых каталогов на разных платформах 12 октября 2026 года и команды, которыми её можно повторить.

Что это​

API (программный интерфейс) — адрес, по которому программа задаёт каталогу вопрос и получает ответ, обычно в JSON или XML. Важно не само слово «API», а то, на какой вопрос интерфейс отвечает. Таких вопросов четыре.

  1. Найти и прочитать описание. Поиск по тексту и фильтрам, карточка одного набора. Пример — Action API у CKAN, Search API у Dataverse.
  2. Забрать все описания сразу. Один файл или протокол, который отдаёт каталог целиком: файл data.json, выгрузка DCAT, протоколы OAI-PMH и CSW. Это нужно сборщикам: вышестоящему порталу, поисковику данных, архиву.
  3. Получить сами данные. Ссылка на файл, запрос к таблице, картографический сервис, статистический API.
  4. Узнать, что изменилось. Лента RSS или Atom, выборка «изменено после даты», файлы изменений. Чтобы не скачивать каталог заново каждый день.

Ещё три термина понадобятся дальше.

Массовая выгрузка — возможность скачать всю базу или весь набор файлами, без запросов по одной записи. Регламент ЕС о наборах высокой ценности определяет её так: скачивание всего набора одним или несколькими пакетами.

Постраничная выдача — ответ, разбитый на страницы: по 100 наборов, по 25 записей. Программа идёт со страницы на страницу, пока не дойдёт до последней. Так устроены почти все API поиска и многие выгрузки DCAT.

Лента изменений — список последних добавленных и изменённых записей в формате RSS или Atom. Её читают программы-подписчики и сборщики.

Не путайте API каталога с каталогом API. Здесь API — дверь в каталог наборов. Каталог API — отдельный тип сайта, где сами интерфейсы и есть то, что описывают; он разобран в главе о других типах каталогов.

Зачем нужна​

Без программного входа каталог виден только тем, кто открыл сайт в браузере. Вот кто остаётся за бортом:

  • вышестоящий портал и агрегаторы. Национальный портал собирает региональные, data.europa.eu собирает национальные, поисковики данных собирают всех. Им нужны все описания и изменения за день. Как устроены такие цепочки — в главе о федерациях и сборе;
  • поисковые системы. Им достаточно карты сайта и разметки на страницах, о ней — в главе об экспорте метаданных;
  • разработчики и аналитики. Приложение с расписанием автобусов или ежедневный отчёт не будут вручную скачивать файл;
  • архивы. Веб-архив сохраняет страницы, но плохо сохраняет данные за API. Когда каталог закрывают, спасти удаётся то, что можно выгрузить целиком. Подробнее — в главе об архивации;
  • модели и ИИ-агенты. Серверы MCP у порталов данных работают поверх того же API. Если API нет, ассистенту остаётся читать страницы сайта. Подробнее — в главе о трендах;
  • сам владелец. Многие сайты каталогов построены поверх своего API, а интерфейс для людей — лишь один из его клиентов.

Для части данных API и массовая выгрузка обязательны по закону. Регламент ЕС 2023/138 о наборах высокой ценности (геоданные, наблюдения Земли и окружающая среда, метеорология, статистика, компании, мобильность) требует от органов власти:

  • отдавать наборы через API, а там, где это указано в приложении к регламенту, ещё и массовой выгрузкой. Приложение требует и то и другое для всех шести категорий, с отдельными исключениями: например, данные численных моделей прогноза погоды — только через API;
  • опубликовать условия использования API и показатели качества обслуживания: производительность, пропускную способность, доступность;
  • приложить документацию API в открытом формате, понятном и человеку, и программе, — на практике это описание OpenAPI;
  • назначить контакт для вопросов об API.

Эти четыре требования — хороший список и для тех, на кого регламент не распространяется.

Варианты реализации​

Все описания сразу​

СпособКак устроенСильная сторонаСлабое местоГде встречается
Один файлвесь каталог в одном файле: data.json по DCAT-US, файл DCAT, таблица CSVзабирается одной командой, понятен без документациирастёт вместе с каталогом; на сотнях тысяч наборов становится тяжёлымSocrata, ArcGIS Hub, Huwise, DKAN, статические сайты
Выгрузка DCAT по страницамтот же DCAT, разбитый на страницы со ссылками на следующую и последнююне нагружает сервер, работает на любом размеренадо пройти все страницы; если каталог меняется во время обхода, наборы могут потеряться или повторитьсяCKAN с ckanext-dcat, udata
Протокол сбораOAI-PMH у научных репозиториев, CSW и OGC API Records у геопорталовстандарт, есть выборка по дате изменениямедленно: сотни тысяч записей — тысячи запросов; в OAI-PMH нет понятия файлаDataverse, InvenioRDM, DSpace, GeoNetwork
Регулярная выгрузка каталога файламираз в сутки сервер сам собирает весь каталог в файлы и выкладывает их как обычный наборсамый дешёвый способ для сервера и для сборщикаданные на момент выгрузки, а не на сейчасdata.gouv.fr: описания наборов, файлов, сервисов, организаций в CSV
Дамп базыкопия базы данных целиком: SQL, RDF, архив JSONвсё, включая связи, которых нет в описанияхнужен навык, чтобы развернуть; формат зависит от платформыСенат Франции, Europeana
Карта сайтасписок адресов страницеё понимают все поисковые системытолько адреса, без описанийпочти все платформы, в CKAN — расширением

Выгрузка всех описаний нужна почти всегда. Это минимум, по которому каталог могут собрать другие. Карта сайта её не заменяет: поисковику она подскажет, какие страницы обойти, а сборщику каталога ничего не скажет о лицензии и файлах.

Поиск по API выгрузку тоже не заменяет. У API поиска почти всегда есть предел на одну страницу и на глубину выдачи. В CKAN по умолчанию за один запрос отдаётся не больше 1000 наборов, у Zenodo без ключа — 25 записей на страницу и не дальше 10 000-й записи. Пройти весь каталог через поиск иногда можно, иногда нет, и в любом случае это хрупко.

Поиск и карточка​

Единого стандарта API поиска наборов нет. У каждой платформы свой: Action API у CKAN, API у udata, Explore API у Huwise, SODA и Discovery API у Socrata, Search API у Dataverse, REST API у InvenioRDM и DSpace. Ближе всего к общему стандарту OGC API Records: его отдают сайты ArcGIS Hub и GeoNetwork с отдельным сервисом. Поэтому вышестоящие порталы собирают описания по DCAT, а не через API каждой платформы.

API поиска нужен, когда наборов сотни и больше, когда каталог входит в федерацию или когда поверх него строят свой сайт. Для двадцати наборов на статическом сайте хватает одного файла описаний и карты сайта.

Сами данные​

  • Прямая ссылка на файл. Самый простой и самый живучий способ. Её понимают человек, сборщик и архив.
  • API к таблице. Строки с фильтром, сортировкой и постраничной выдачей. В CKAN это DataStore: по умолчанию до 32 000 строк за запрос, а SQL-запросы выключены, пока администратор их не включит. В DKAN, Huwise и Socrata API к таблицам — в ядре; Huwise отдаёт набор и целиком файлом, в том числе в Parquet.
  • API к каждому файлу без загрузчика. Каталог сам разбирает опубликованный табличный файл и через несколько минут отдаёт к нему API. Так работает табличный API data.gouv.fr (пока в бете). Предел — 100 МБ для CSV, 50 МБ для XLS и Parquet, 12,5 МБ для XLSX. У каждого файла есть профиль колонок, постраничная выдача с фильтрами и описание запросов в Swagger. Код сервиса открыт под лицензией MIT. Hugging Face так же переводит наборы в Parquet и даёт к ним консоль SQL прямо в браузере. Подробнее — в главе о передовых каталогах.
  • Картографические сервисы. WMS отдаёт картинку слоя, WFS и OGC API Features — сами объекты, ArcGIS REST — и то и другое. Подробнее — в главе о геопорталах.
  • Статистический API. SDMX, PxWebApi, JSON-stat: запрос к ряду или кубу по кодам разрезов. Подробнее — в главе о каталогах показателей.
  • Данные в облаке. Адрес бакета S3, каталог STAC, файл Parquet, который читают по частям прямо по сети.
  • Выборка и расчёт на сервере. Каталог отдаёт не файл, а нужный кусок или результат. ERDDAP принимает в адресе выборку по месту и времени и формат ответа. Сервер openEO выполняет цепочку операций над снимками и отдаёт итог. Climate Data Store показывает готовый код запроса к выборке, собранной в форме.
  • Поток. Данные в реальном времени: положение транспорта в GTFS-RT, показания датчиков через SensorThings API.

API к содержимому таблиц нужен, когда данные большие или обновляются часто, а скачивать весь файл ради одной строки неудобно. Для архива годового отчёта достаточно файла. Автоматический API наследует ошибки исходного файла: кодировку, лишние строки над заголовком, текст в числовой колонке. Без словаря колонок он отдаёт их быстрее, но не точнее.

Что изменилось​

  • Лента RSS или Atom. Есть в ядре CKAN, udata, Huwise, ArcGIS Hub и DSpace. Длина у неё разная: в CKAN по умолчанию 20 последних записей, на data.gouv.fr — 50, а у Huwise и ArcGIS Hub в ленту попадает весь каталог. Короткая лента годится для подписки, но не для полного сбора: если сборщик пропустил день, часть изменений уйдёт за её край.
  • Выборка «изменено после даты». Параметр from в OAI-PMH, modified_since в выгрузке DCAT у ckanext-dcat, фильтр по полю metadata_modified в поиске CKAN, pastDays в PxWebApi 2. Это главный инструмент сборщика: полная выгрузка раз в месяц и выборка изменений каждый день.
  • Журнал действий. В CKAN — плагин activity из поставки ядра: кто, когда и что поменял.
  • Файлы изменений. Для больших баз рядом с полной выгрузкой кладут разницу с прошлой версией. Так делают адресный реестр ФИАС и OpenSanctions.

Уведомления об изменениях нужны сборщикам больших каталогов. Маленькому порталу достаточно честной даты изменения в выгрузке. Честной — значит даты изменения данных, а не правки карточки: чем они отличаются, разобрано в главе «Анатомия каталога».

Массовая выгрузка — не роскошь​

Если данные можно получить только запросами к API, каждый, кому нужна вся база, выкачивает её по кусочку. Это долго для пользователя и дорого для сервера. Цифры показывают, насколько это лишнее. Европейский центральный банк отдаёт все ряды массовой выгрузкой: в 2024 году это были 108 файлов CSV на 93 ГБ, которые после перевода в Parquet заняли 664 МБ. Всемирный банк выкладывает архивом основную базу World Development Indicators, но в январе 2025 года для остальных показателей data.worldbank.org массовой выгрузки не было. 12% показателей, скачанных через API, — это 3382 файла JSON на 22 ГБ, а в Parquet те же данные заняли 44 МБ. Довод «данные слишком большие, поэтому только API» обычно значит, что их не пробовали сжать.

Ограничения API разумны, только если рядом есть полная выгрузка. Zenodo в 2024 году ограничил выдачу одного поискового запроса десятью тысячами записей, а 12 октября 2026 года наборов данных в нём 726 858. Файла со всеми описаниями у Zenodo нет. Забрать всё можно только по OAI-PMH — запрос за запросом, по полсотни записей. Это работает, но для каталога такого размера медленно, и большинство пользователей об этом пути не знают.

Хорошие образцы обратного:

  • data.gouv.fr каждую ночь выкладывает весь каталог файлами CSV как обычный набор данных. 12 октября 2026 года описания наборов заняли 276 МБ, описания файлов — 1,1 ГБ, отдельно лежат сервисы данных, организации, примеры использования и источники сбора;
  • Сенат Франции выкладывает свои базы дампами для PostgreSQL в архивах ZIP: например, все поправки к законопроектам с 2001 года;
  • адресный реестр ФИАС в 2023 году публиковал полные выгрузки до 36 ГБ в сжатом виде и отдельные файлы изменений;
  • статистика сельского хозяйства США (NASS) отдаёт всю базу Quick Stats несколькими сжатыми файлами и рядом даёт API для точечных запросов. 12 октября 2026 года последние файлы были от 10 октября;
  • OpenSanctions выкладывает заранее собранные выгрузки и файлы изменений в нескольких форматах. Технически это образец. Юридически — нет: бесплатно данные можно использовать только в некоммерческих целях.

Что отличает хорошую выгрузку:

  • постоянный адрес последней версии и архив прошлых по датам;
  • размер и дата рядом со ссылкой, чтобы пользователь знал, что скачивает;
  • сжатый формат: CSV в gzip или Parquet, а не несжатый XML. Как выбрать формат и сжатие — в главе о форматах;
  • описания вместе с данными. У ЕЦБ в 2024 году массово отдавались значения рядов, а описания показателей приходилось извлекать из самих файлов. Обычно бывает наоборот, и это так же плохо;
  • файлы изменений для баз, которые целиком весят гигабайты;
  • лицензия у самой выгрузки, а не только на странице набора.

Условия доступа и лимиты​

Метаданные должны читаться без регистрации, без ключа и без капчи. Иначе автоматический сбор либо невозможен, либо ломается при каждом обновлении защиты. Для данных ключ допустим, если он выдаётся сразу, бесплатно и без ручного одобрения: так владелец видит, кто создаёт нагрузку, и может связаться с ним.

Лимиты нормальны, если они опубликованы и предсказуемы. Хороший пример — PxWebApi 2 у статистики Швеции: адрес /api/v2/config сам сообщает программе, что за один запрос отдаётся не больше 150 000 ячеек, а запросов — не больше 30 за 10 секунд. Плохой пример — лимит, о котором узнаёшь по ошибке на 401-й странице выдачи.

Что закрывает каталог от программ, даже когда API формально есть:

  • проверка от роботов на входе: Cloudflare, AWS WAF. Страница «Just a moment…» вместо ответа ломает любой сборщик. Примеры — в главах о научных репозиториях и о каталогах микроданных;
  • геоблокировка: сайт не отвечает на запросы из других стран;
  • обязательная регистрация ради защиты от ботов ИИ;
  • временные ссылки на файлы, которые перестают работать через полчаса.

Подробнее эти случаи разобраны в антипаттерне «Дверь закрыта для программ».

Ещё одно требование, о котором забывают, — устойчивость. Интерфейс, на который опираются другие, нельзя менять молча. Старую версию держат рядом с новой, о закрытии объявляют заранее, адреса не ломают. Когда в апреле 2026 года data.gov ушёл с CKAN на свою разработку, адреса страниц наборов сохранились, а Action API CKAN 12 октября 2026 года отвечал ошибкой 404. Всё, что было построено на старом API, перестало работать в один день.

Неявные интерфейсы​

Многие сайты отдают данные программам, даже если владелец об этом не написал. Причин три. API задумали, но не задокументировали. Сайт сам устроен как страница, которая получает данные скриптом из API, и этот API можно вызвать напрямую. Или API есть у платформы по умолчанию, а владелец о нём не знает: у WordPress это /wp-json/, у SharePoint — /_api/, у научных репозиториев DSpace — REST API и OAI-PMH, у серверов ArcGIS — ответ в JSON на любой адрес с параметром ?f=json, у каталогов на Blacklight — тот же адрес с заголовком Accept: application/json.

Найти такой интерфейс помогают три приёма: проверить адреса по умолчанию для платформы сайта, открыть в браузере инструменты разработчика и посмотреть на вкладке «Сеть», какие запросы страница делает сама, и поискать в поисковике документацию по фразе «REST API» на домене сайта.

Для пользователя такой интерфейс — находка: иногда это единственный способ получить данные с геопортала или из реестра. Для владельца — повод задокументировать то, что уже есть. Опираться на недокументированный интерфейс в постоянной работе рискованно: при обновлении сайта он меняется без предупреждения. Если данные нужны надолго, выгрузку из такого API сохраняют у себя; для этого есть готовые программы, например apibackuper.

Данные без прямой ссылки​

Каталог, привыкший к модели «набор — это файлы по ссылкам», встречает и другие способы доступа.

  • Облачные каталоги. Каталог Microsoft Planetary Computer отдаёт часть данных ссылками вида abfs://… во внутреннее хранилище Azure, реестр открытых данных Amazon — адресами бакетов S3, каталог Google Earth Engine — фрагментом кода для своей платформы. Данные открыты, но удобнее всего ими пользоваться внутри облака владельца.
  • «Сначала код» в машинном обучении. Kaggle, Hugging Face, каталоги TensorFlow и PyTorch вместо ссылки на файл показывают строку кода, которая загружает набор библиотекой. Для специалиста это удобно, для общего поисковика данных — набор без файлов.
  • Только по запросу. Часть статистических порталов отдаёт таблицу только в ответ на POST-запрос с выбранными параметрами, без постоянного адреса.

Если вы публикуете так, дайте рядом хотя бы одну обычную ссылку на файл или выгрузку: её поймут и человек, и сборщик, и архив.

Когда нужна, а когда нет​

КаталогОбязательноСтоит добавитьМожно не делать
Двадцать наборов на статическом сайте или в Git-репозиториифайл со всеми описаниями (data.json или DCAT), карта сайта, прямые ссылки на файлыразметку schema.org на страницахAPI поиска, API к таблицам
Муниципальный портал, который собирает национальныйвыгрузку DCAT в профиле страны без регистрации, прямые ссылки на файлыленту изменений или выборку по датесвой API к таблицам, если файлы небольшие
Национальный портал, в том числе с наборами высокой ценности ЕСAPI поиска, выгрузку всех описаний, выборку изменений; для наборов высокой ценности — API и массовую выгрузку, условия использования, документацию, контактежедневную выгрузку каталога файлами—
Научный репозиторийOAI-PMH, REST API, прямые ссылки на файлывыгрузку всех описаний файлом, если записей сотни тысячAPI к содержимому таблиц
ГеопорталCSW или OGC API Records, сервисы WMS и WFS или OGC API Features, скачивание слоя целикомDCAT через CSW для портала открытых данных—
Каталог показателейAPI к рядам (SDMX, PxWebApi, JSON-stat), список всех таблиц с датами обновлениямассовую выгрузку всей базы—
Большая реестровая база: адреса, компании, санкцииполную выгрузку и файлы измененийAPI для запросов по одной записи—
Набор для машинного обученияпрямую ссылку на файлы, лучше в Parquet, и описание Croissantстроку кода для библиотеки как дополнение, а не замену—

Коротко, как выглядит обоснование по шаблону карточки решения:

  • Контекст. Статистическая служба на PxWeb, около 3000 таблиц. Аналитики и поисковик данных просят «дать всё сразу», сервер API в дни публикаций перегружен.
  • Варианты. Оставить только PxWebApi; поднять отдельный сервис SDMX; добавить ночную выгрузку всех таблиц файлами.
  • Критерии. Сколько запросов нужно, чтобы забрать всю базу; нагрузка на сервер; требования международной отчётности; стоимость сопровождения.
  • Решение. PxWebApi 2 для точечных запросов и ночная выгрузка всех таблиц в CSV и Parquet с описью: код таблицы, название, дата обновления, размер.
  • Почему. Через API всю базу забирают минимум одним запросом на таблицу, а большие таблицы упираются в лимит ячеек и требуют нескольких запросов. Один набор файлов в сутки дешевле серверу, чем тысячи запросов от каждого пользователя. Выгрузку пишут скриптом поверх того же API: в ядре PxWeb её нет.
  • Когда пересмотреть. Если международные партнёры потребуют SDMX или если выгрузку почти не скачивают.

Как это сделано в платформах​

Пометки — ядро, расширение, нет, не проверено, как в сводной таблице. Сверено с документацией и живыми установками 12 октября 2026 года.

ПлатформаПоиск описанийВсе описания сразуДанныеЧто изменилось
CKAN 2.12ядро: Action API, до 1000 наборов за запросрасширение ckanext-dcat: DCAT по страницам, по умолчанию 100 наборов на странице; карта сайта — тоже расширениеядро: файлы и DataStore; SQL-запросы выключены по умолчанию; заливка CSV — расширение XLoaderядро: лента Atom, фильтр по дате изменения в поиске, журнал действий (плагин activity из поставки); в ckanext-dcat — параметр modified_since
udata 17ядроядро: DCAT по страницам; ночная выгрузка каталога в CSV — задача ядра, включается настройкойядро: файлыядро: лента Atom, сортировка по дате обновления
Huwise (OpenDataSoft)ядро: Explore APIядро: каталог одним файлом в DCAT, data.json и CSVядро: API к записям, выгрузка набора в CSV, JSON, Parquet и другие форматыядро: лента RSS, фильтр по дате изменения
Socrataядро: Discovery APIядро: data.json одним файломядро: SODAне проверено
ArcGIS Hubядро: поиск по OGC API Recordsядро: DCAT-US 1.1 и DCAT-AP 2.1.1 одним файлом; DCAT-US 3.0 и DCAT-AP 3.0.0 включаются отдельноядро: слои ArcGIS и файлыядро: лента RSS 2.0
DKANядро: API метаданныхядро: data.json по DCAT-USядро: хранилище таблиц с SQL-запросамине проверено
Dataverseядро: Search APIядро: OAI-PMH; описание набора — в DDI, DataCite, schema.org и других форматахядро: Data Access APIядро: OAI-PMH с выборкой по дате
InvenioRDMядро: REST APIядро: OAI-PMH, в том числе в DataCite и DCATядро: файлыядро: OAI-PMH с выборкой по дате
DSpace 7 и новееядро: REST APIядро: OAI-PMH, карта сайтаядро: файлыядро: ленты Atom и RSS по любому поисковому запросу через OpenSearch, OAI-PMH с выборкой по дате
GeoNetwork 4.4ядро: свой API поискаядро: CSW (в том числе в DCAT-AP), OAI-PMH, карта сайта; OGC API Records — отдельный микросервис проектаядро: ссылки на сервисы и файлыядро: OAI-PMH с выборкой по дате
PxWeb (PxWebApi 2)ядроядро: список всех таблиц с датами обновленияядро: JSON-stat 2, CSV, PX, XLSX; SDMX нетядро: таблицы, изменённые за последние N дней
NADAядро: свой APIядро: свой API и описание DDI у каждого исследования; OAI-PMH и DCAT нетядро: файлы по уровням доступане проверено
JKAN, статический сайтнетфайл data.json, если его собралиссылки на файлылента изменений репозитория, если сайт собран из Git: у GitHub это commits/ветка.atom

Три вещи в таблице неочевидны.

У CKAN выгрузка всех описаний — не ядро, а расширение ckanext-dcat. На взрослом портале оно стоит почти всегда, но без него сборщику остаётся только Action API. Карты сайта в ядре CKAN тоже нет: data.gov.gr на неё отвечает ошибкой 404.

У GeoNetwork 4 часть прежних интерфейсов убрана: OpenSearch недоступен с версии 4.0, отдельная служба DCAT rdf.search заменена выводом DCAT через CSW. OGC API Records ставится рядом отдельным сервисом. В каталоге Европейского агентства по окружающей среде на GeoNetwork 4.4 этот адрес 12 октября 2026 года не отвечал, а CSW и OAI-PMH работали.

У PxWeb второго поколения есть то, чего не было в первом: список всех таблиц с датой обновления и выборка изменённых за N дней. Массовой выгрузки самих данных в ядре по-прежнему нет.

Что показывает реестр​

По выгрузке реестра dataportals-registry (выпуск 1.27.0 от 15 октября 2026 года) хотя бы один программный вход записан у 28 471 каталога из 43 614, это 65%. Стандартный способ забрать все описания — DCAT, OAI-PMH, CSW или OGC API Records — у 8 894, это 20%. Остальные отдают то, что умеет их платформа: интерфейс ArcGIS, API CKAN без расширения, свой API облачного сервиса.

Главное различие — не между типами каталогов, а между платформами. У каталогов на готовых платформах программный вход записан у 76%, у собственных разработок — у 10% (697 из 7 034), а стандартная выгрузка описаний — у 58 из 7 034, меньше 1%. Отчасти это свойство самого реестра: он находит интерфейсы по известным адресам платформ, а у своей разработки адреса заранее неизвестны. Но и сборщик сталкивается с тем же. Если вы пишете каталог сами, стандартную выгрузку придётся сделать самим, иначе каталог не соберёт никто.

По типам разброс тоже большой. Программный вход есть у 70% геопорталов, 69% порталов открытых данных и 63% научных репозиториев, но только у 37% каталогов показателей и 23% ML-каталогов. Ленты RSS и Atom реестр у порталов на CKAN почти не записывает, хотя они в ядре, поэтому долю лент по реестру не считаем. Запросы — в приложении о реестре.

Как проверить живой портал​

Документация для разработчиков на самом сайте — первый признак. Дальше пять шагов:

  1. Определите платформу. От неё зависит, по каким адресам искать: CKAN отвечает на /api/3/action/status_show, Dataverse — на /api/info/version, DSpace 7 и новее — на /server/api.
  2. Найдите все описания сразу и дойдите до последней страницы выгрузки.
  3. Сравните числа. Наборов в выгрузке должно быть столько же, сколько в поиске на сайте. Если поиск говорит, что наборов 10 000, а выгрузка содержит 200, сборщик увидит не тот каталог, который видит человек.
  4. Проверьте выборку изменений: за последние дни должно что-то находиться, если портал живой.
  5. Повторите без браузера. Запрос из командной строки, без входа, лучше из другой сети. Если в ответ приходит проверка от роботов или ошибка 403, программы этот каталог не увидят.

Десять каталогов 12 октября 2026 года​

КаталогПлатформаВсе описания сразуЧто изменилосьЧто заметно
data.gov.grCKAN 2.11.3 с ckanext-dcatDCAT по страницам: 455 страниц по 50 наборов, всего 22 736 — столько же, сколько в поискелента Atom; 1328 наборов изменены с 1 октября — и по поиску, и по выгрузке DCATкарты сайта нет
data.gouv.frudata 17.12.1DCAT по страницам: 744 страницы по 100, всего 74 375; ночная выгрузка каталога в CSVлента Atom, сортировка по обновлениюночная выгрузка заменяет 744 запроса к DCAT одним скачиванием; описания файлов — отдельный CSV на 1,1 ГБ
opendata.paris.frHuwiseодин файл DCAT на 14 МБ, data.json и CSV на 490 наборовлента RSS; 96 наборов изменены с 1 октябрякаждый набор выгружается и в Parquet
data.cityofnewyork.usSocratadata.json одним файлом, 4,8 МБ, 2711 записейне проверялосьобщий поиск по всем порталам Socrata работает без ключа
opendata.dc.govArcGIS HubDCAT-US 1.1 и DCAT-AP 2.1.1 одним файлом, 1871 запись; ленты DCAT-US 3.0 и DCAT-AP 3.0.0 на том же сайте тоже отвечаютлента RSS 2.0в выгрузку попадают и документы, карты, приложения: наборов в поиске 1476 из 1864 элементов
Harvard DataverseDataverse 6.10.1OAI-PMH; в поиске 305 251 наборOAI-PMH с выборкой по датестраница набора отвечает роботу проверкой AWS WAF, а API и OAI-PMH работают
ZenodoInvenioRDMтолько OAI-PMH, в том числе в DCAT и DataCite; 726 858 наборовOAI-PMH с выборкой по датепоиск: без ключа по 25 записей, не дальше 10 000-й
DSpace@MITDSpace 8.2OAI-PMH, карта сайталента Atom через OpenSearchREST API на /server/api
каталог EEAGeoNetwork 4.4CSW: 3429 записей; OAI-PMH; карта сайтаOAI-PMH с выборкой по датеOGC API Records не развёрнут
статистика ШвецииPxWebApi 2.3.2список всех 2814 таблиц53 таблицы изменены за 7 днейлимиты опубликованы в /api/v2/config

Общий вывод проверки: у всех десяти каталогов есть способ забрать все описания, но устроен он по-разному, и универсального сборщика нет. Ни один из проверенных порталов не отвечает по адресу /.well-known/api-catalog, который стандарт RFC 9727 предлагает для описания всех API сайта.

Команды​

Для портала на CKAN. Команды проверяют версию, выгрузку всех описаний, совпадение чисел и выборку изменений. Подставьте адрес портала и дату.

PORTAL=https://data.gov.gr

# Версия CKAN
curl -s "$PORTAL/api/3/action/status_show" | jq '.result.ckan_version'

# Все описания: сколько наборов и где последняя страница выгрузки DCAT
curl -s "$PORTAL/catalog.ttl" | grep -E "hydra:(totalItems|lastPage)"

# Столько же наборов должно быть в поиске
curl -s "$PORTAL/api/3/action/package_search?rows=0" | jq '.result.count'

# Что изменилось с 1 октября: в поиске и в выгрузке DCAT
curl -s -G "$PORTAL/api/3/action/package_search" --data-urlencode "rows=0" \
--data-urlencode "fq=metadata_modified:[2026-10-01T00:00:00Z TO *]" | jq '.result.count'
curl -s "$PORTAL/catalog.ttl?modified_since=2026-10-01" | grep "hydra:totalItems"

# Лента изменений
curl -sI "$PORTAL/feeds/dataset.atom" | head -1

Для других платформ:

# udata: выгрузка DCAT и ночные файлы со всем каталогом
curl -s "https://www.data.gouv.fr/api/1/site/catalog.rdf" | grep -o "hydra:totalItems[^<]*"
curl -s "https://www.data.gouv.fr/api/1/datasets/catalogue-des-donnees-de-data-gouv-fr/" \
| jq -r '.resources[] | "\(.title)\t\(.filesize)"'

# Huwise: весь каталог одним файлом и наборы, изменённые после даты
curl -sI "https://opendata.paris.fr/api/explore/v2.1/catalog/exports/dcat" | head -1
curl -s -G "https://opendata.paris.fr/api/explore/v2.1/catalog/datasets" \
--data-urlencode "limit=0" --data-urlencode 'where=modified >= "2026-10-01"' | jq '.total_count'

# Socrata и ArcGIS Hub: файл со всеми описаниями
curl -s "https://data.cityofnewyork.us/data.json" | jq '.dataset | length'
curl -s "https://opendata.dc.gov/api/feed/dcat-us/1.1.json" | jq '.dataset | length'

# Научный репозиторий: OAI-PMH и записи, изменённые после даты
curl -s "https://dataverse.harvard.edu/oai?verb=Identify" | grep -o "<repositoryName>[^<]*"
curl -s "https://zenodo.org/oai2d?verb=ListIdentifiers&metadataPrefix=oai_dc&from=2026-10-11" \
| grep -o "<header" | wc -l

# Геопортал: сколько записей отдаёт CSW
curl -s "https://sdi.eea.europa.eu/catalogue/srv/eng/csw?service=CSW&version=2.0.2&request=GetRecords&typeNames=csw:Record&resultType=hits" \
| grep -o 'numberOfRecordsMatched="[0-9]*"'

# PxWebApi 2: все таблицы, изменённые за неделю, и лимиты
SCB=https://statistikdatabasen.scb.se/api/v2
curl -s "$SCB/tables?lang=en&pageSize=1" | jq '.page.totalElements'
curl -s "$SCB/tables?lang=en&pageSize=1&pastDays=7" | jq '.page.totalElements'
curl -s "$SCB/config" | jq -c '{maxDataCells, maxCallsPerTimeWindow, timeWindow}'

# Предел глубины поиска: 401-я страница по 25 записей у Zenodo даёт ошибку 400
curl -s -o /dev/null -w "%{http_code}\n" "https://zenodo.org/api/records?type=dataset&size=25&page=401"

Неявные интерфейсы платформ. Подставьте домен сайта:

curl -s "https://portal.example/wp-json/" | head # WordPress
curl -s "https://portal.example/_api/web" | head # SharePoint
curl -s "https://portal.example/server/api" | head # DSpace 7 и новее
curl -s "https://gis.example/arcgis/rest/services?f=json" # сервер ArcGIS
curl -s -H "Accept: application/json" "https://portal.example/catalog?q=" | head # Blacklight и другие

Хороший результат: ответ без входа в систему, в нём есть описания наборов, а не только главная страница, а выгрузка доходит до последней страницы. Плохой: капча, обязательная регистрация, ошибка 403 для программ или поиск, который не умеет отдать следующую страницу. Сводный список — в чек-листах.

Что из этого следует​

  • Сначала сделайте выгрузку всех описаний и прямые ссылки на файлы. Это минимум для любого каталога, от двадцати наборов на статическом сайте до национального портала.
  • Метаданные отдавайте без регистрации, ключа и капчи. Проверяйте это из командной строки и из другой сети, а не из своего браузера.
  • Дайте сборщикам выборку «изменено после даты». Это дешевле для всех, чем ежедневная полная выгрузка.
  • Для больших баз публикуйте полную выгрузку файлами и файлы изменений. Лимиты API без выгрузки — это закрытие данных, а не защита сервера.
  • Публикуйте лимиты, условия использования и документацию API, назначьте контакт. Для наборов высокой ценности в ЕС это обязанность, для остальных — хорошая практика.
  • Не меняйте интерфейс молча. При переезде платформы сохраните старые адреса или объявите их закрытие заранее.
  • Выбирая платформу, проверяйте, что выгрузка описаний и выборка изменений в ядре, а не в расширении. Если пишете каталог сами, заложите стандартную выгрузку в задание: без неё каталог никто не соберёт.

Источники​