Продолжая тему недокументированных государственных API приведу ещё один живой пример с некоторыми техническими подробностями.
Вот, в Санкт-Петербурге есть портал бюджетных инициатив граждан [1]. В целом неплохой, современно выглядящий и с примерно 29 тысячами опубликованных инициатив. Когда я в целях архивации региональных сайтов бюджетов пытался его заархивировать то столкнулся с тем что у него нет веб-страниц в нормальном понимании. Вместо этого даннные отдаются через API по вполне легко находимой ссылке /api/v2/budget/initiatives [2] в коде страницы, в HTML коде сайта видно что что API передаётся параметр offset для перехода к следующей порции данных и limit для ограничений числа получаемых данных. В результате все инициативы можно выкачать простым перебором. Запросы к API возвращают в JSON формате общее число объектов в поле total_count и список объектов в поле objects в каждом ответе.
Особенность в том что это типовая задача. Не только на этом сайте и не только в этом API данные публикуются именно таким образом. В принципе вариации мышления и логики разработчиков очень невелики, всего 5-6 базовых сценария. Поэтому когда-то давно, 2 года назад я сделал ручную утилиту apibackuper [3] которую считаю личным вкладом в дело цифровой архивации;)
Утилита создана чтобы автоматизировать именно выгрузку данны из API, так чтобы всё можно было описать простыми параметрами в конфигурационном файле и запустить выгрузку. Не открою большого секрета в том что по объёму около 75% данных в Датакрафере [4] скачано именно с помощью apibackuper, фактически над этой утилитой просто возведена надстройка по автогенерации из API в процессе обнаружения данных.
В отличие от HTML парсеров утилита умеет проходить по всем страницам API, выгружать индивидуальные объекты при необходимости и складывать файлы в локальное хранилище или в S3 совместимое, а также экспортировать данные в JSONL формат. Для простоты все промежуточные файлы хранятся в ZIP контейнере и экспортируются по запросу. Всё описыается в .cfg файле
Пример который я озвучивал выше, с инициативами на портале инициативного бюджетирования СПб один из самых простых. Я специально его выложил онлайн как открытый код [4] хотя именно кода там мало, собственно .cfg файл необходимый для выполнения команд и набор этих команд прост.
- apibackuper estimage - оценить длительность и число запросов по выгрузке данных
- apibackuper run - запустить выгрузку данных
- apibackuper export data.jsonl - экспортировать данные в формат jsonl в файл data.jsonl
- apibackuper getfiles - выгрузить все изображения по ссылкам images.image.url
Когда-то я делал эту утилиту для архивации материалов с сайта Мэрии Москвы, там почти весь контент через API, и портала электронного бюджета. Сейчас, как я говорил, эта маленькая программа помогает собирать и большого числа документированных и недокументированных государственных API для архивации и для каталога данных.
Ссылки:
[1] https://tvoybudget.spb.ru
[2] tvoybudget.spb.ru/api/v2/…tiatives
[3] https://github.com/ruarxive/apibackuper
[4] https://data.apicrafter.ru
[5] github.com/ruarxiv…pbbudget
[6] github.com/ruarxiv…uper.cfg
#opendata #datatools #opensource