API проекта «ГосЗатраты» – для создания проектов по общественному мониторингу
Анна Сакоян АНО «Информационная культура» 2015
О чем пойдет речь: • • • • •
Что такое «ГосЗатраты»? (Что такое API?) (Что такое JSON?) Как устроен API «ГосЗатрат»? Какие могут быть подводные камни?
«ГосЗатраты»: http://clearspending.ru/
•Сервис на основе открытых данных. •Создан АНО «Инфокультура» в партнерстве с Комитетом гражданских инициатив •Основной источник данных: Официальный портал госзакупок (http://zakupki.gov.ru/)
Официальный портал государственных закупок
Портал «ГосЗатраты»
Ищет медленно
Ищет быстро
Ограниченный функционал поиска (например, нет поиска по подрядчикам)
Есть навигатор (ищет по подрядчикам, позволяет выводить все контракты подрядчика и т.д.)
Не всегда доступен (часто закрыт на профилактику)
Всегда доступен
Предоставляет данные только для скачивания
Есть API
API Application programming interface (Интерфейс программирования приложений)
Карта самых дорогих контрактов Перми
http://maperm.ru/budget
Визуализация госзатрат (по всей стране, 2013 г.)
http://clearspending.artzub.com/
JSON: JavaScript Object Notation
Имя: Удав Цвет: желтый Длина: В попугаях: 38 В мартышках: 5 В слонятах: 2 Друзья: Попугай, Мартышка, Слоненок
{Имя: Удав, Цвет: желтый, Длина: {В попугаях: 38, В мартышках: 5, В слонятах: 2, }, Друзья: [Попугай, Мартышка, Слоненок] }
СТРУКТУРА (примеры): {ключ: значение, ключ: значение} {ключ: [значение, значение, значение]} {ключ: {ключ: значение, ключ: значение}, ключ: значение}
{персонажи: {всего: 4, данные: [ {имя: Удав, цвет: желтый, длина: {в_попугаях: 38, в_мартышках: 5, в_слонятах: 2, }, друзья: [Попугай, Мартышка, Слоненок] }, {имя: Попугай, цвет: [желтый, красный, зеленый], друзья: [Удав, Мартышка, Слоненок] }, {имя : Слоненок, друзья: [Попугай, Мартышка, Удав] }, {имя : Мартышка, цвет: [желтый, коричневый] друзья: [Попугай, Удав, Слоненок] } ] } }
• Нет жесткой схемы • Подробнее о JSON: http://www.w3schools.com/js on/
http://clearspending.ru/contract/1490908343515000003/
https://github.com/idalab/clearspending-examples/wiki
Типы запроса Get http://openapi.clearspending.ru/restapi/v3/contracts/get/? http://openapi.clearspending.ru/restapi/v3/suppliers/get/? http://openapi.clearspending.ru/restapi/v3/customers/get/?
Search http://openapi.clearspending.ru/restapi/v3/contracts/search/? http://openapi.clearspending.ru/restapi/v3/suppliers/search/? http://openapi.clearspending.ru/restapi/v3/customers/search/?
Select http://openapi.clearspending.ru/restapi/v3/contracts/select/? http://openapi.clearspending.ru/restapi/v3/suppliers/select/? http://openapi.clearspending.ru/restapi/v3/customers/select/?
Запрос
Описание
Get
Позволяет получить информацию о конкретном контракте/поставщике/заказчике (с использованием идентификаторов).
Search
Позволяет осуществлять полнотекстовый поиск (с использованием ключевых слов). Есть искусственное ограничение на выдачу результатов (не более 500).
Select
Позволяет подбирать по заданным параметрам. Нет ограничений на выдачу результатов (но нет и полнотекстового поиска).
Search: полнотекстовый поиск по контрактам Неизменная часть URL: http://openapi.clearspending.ru/restapi/v3/contracts/search/?
Возможные поля:
productsearch - полнотекстовый поиск по всем предметам в контракте; productsearchlist - полнотекстовый поиск по набору предметов в контракте; regnum - выборка контракта по его регистрационному номеру (аналог get); customerinn - поиск всех контрактов, у которых заказчик с заданным ИНН; customerkpp - поиск всех контрактов, у которых заказчик с заданным КПП; supplierinn - поиск всех контрактов, у которых поставщик с заданным ИНН; supplierkpp - поиск всех контрактов, у которых поставщик с заданным КПП; okdp_okpd - поиск по коду ОКДП или ОКПД в контракте; budgetlevel - поиск по уровню бюджета; customerregion - поиск по региону заказчика (используются числовые коды регионов); currentstage - состояние контракта; daterange - дата подписания контракта (dd.mm.yyyy-dd.mm.yyyy); pricerange - диапазон цен контракта (minFloat-maxFloat); placing - тип размещения контракта (TODO: добавить пример); fz - номер федерального закона. Полное описание: https://github.com/idalab/clearspendingexamples/wiki/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-API%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%B0%D0%BA%D1%82%D1%8B
Шпаргалка по синтаксису: URL при поиске через сайт
http://clearspending.ru/contract/?productsearch=&searchsubmit=&grbs=&regnum=&daterange=01.11.201530.11.2015&price_gte=&price_lte=&customerregion=51&address=&budgetlevel=&okdp_okpd=& sort=-price&fz=44&customerinn=&customerkpp=&supplierinn=&supplierkpp=&filter=True
Search: пример http://openapi.clearspending.ru/restapi/v3/contracts/search/? productsearch=пальмовое+масло& daterange=01.01.2013-31.12.2015
• Ограничение на выдачу: 500 контрактов (если по факту контрактов больше, то необходимо дробить запрос, например, по регионам)
• Максимальное число контрактов на страницу: 50 (если контрактов больше, то необходимо добавлять в запрос параметр page) Например: http://openapi.clearspending.ru/restapi/v3/contracts/search/? productsearch=пальмовое+масло& daterange=01.01.201331.12.2015&customerregion=77&page=2
http://openapi.clearspending.ru/restapi/v3/contracts/search/? productsearch=“пальмовое+масло”& daterange=01.01.2013-31.12.2015
<…>
Примеры скриптов для обработки • Язык: Python • Поиск по ключевым словам: https://gist.github.com/ansakoy/8679f0dc08818206b404 • Поиск по коду продукции: https://gist.github.com/ansakoy/d1f86cde686e3db61e70
пальмовое масло Пальмовое масло ПАЛЬМОВОЕ МАСЛО Пальмовое Масло пальм Пальм ПАЛЬМ
Извлеченные данные в таблице: https://docs.google.com/spreadsheets/d/1n3biNR09m4Ml0fAtHOf0cbdPARAXiSlMq0sQkYY 482o/edit#gid=684490564
Коды продукции: Классификаторы ОКДП и ОКПД ОКДП: http://www.help-tender.ru/Okdp.asp ОКПД: http://www.help-tender.ru/Okpd.asp
Список кодов для пальмового масла: okdp_okpd = [u'15.41.13.120', u'15.41.13.121', u'15.41.13.122', u'15.41.13.123', u'15.41.13.124', u'15.42.12.110', u'15.42.12.111', u'15.42.12.112', u'15.42.12.113', u'15.42.12.114', u'1514138']
URL: http://openapi.clearspending.ru/restapi/v3/contracts/search/?daterange=01.01.201331.12.2015&okdp_okpd={}
Например: http://openapi.clearspending.ru/restapi/v3/contracts/search/?daterange=01.01.201331.12.2015&okdp_okpd=15.41.13.122
Извлеченные данные в таблице: https://docs.google.com/spreadsheets/d/1n3biNR09m4Ml0fAtHOf0cbdPARAXiSlMq0s QkYY482o/edit#gid=684490564
Из выдающегося:
Примеры возможных подвохов: • • • • •
Опечатки и ошибки в контрактах Отсутствие текстовых описаний продуктов Различные единицы измерения (ОКЕИ) Классификаторы продукции не всегда информативны У контракта может не быть некоторых полей (желательно учитывать в скриптах; в Python лучше извлекать значения через метод .get()) • Ограничение на выдачу результатов в запросе SEARCH • Ограничение числа результатов на страницу (максимум - 50) • Назначение некоторых полей неясно (можно попытаться выяснить с помощью сумбурной документации на Госзакупках: http://zakupki.gov.ru/epz/main/public/document/view.html?sectionId=6& pageNo=1&categories=FZ44&_categories=on&_categories=on&_categorie s=on&_categories=on)