Обложка канала

Ivan Begtin

3903 @begtin

I am focused on Open Data, Procurement, e-Government, Open Government and other tech stuff

Ivan Begtin

5 лет назад
Открыть в
Продолжая тему недокументированных государственных 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
Официальный cайт проекта «Твой Бюджет»

Проект инициативного бюджетирования при поддержке правительства Санкт-Петербурга

tvoybudget.spb.ru