Скрипт для выгрузки данных через API “Госзатрат”
![test](/media/images/news/skript-dlya-vygruzki/download_repo.png)
03 мая 2017
Анна Сакоян объясняет, как использовать скрипт для выгрузки данных.
Официальный портал госзакупок (zakupki.gov.ru) публикует в открытом доступе данные о контрактах, заключаемых государством и госкорпорациями. Проблема в том, что эти данные выкладываются в не самом удобном для использования виде. Некоммерческий проект “Госзатраты” преобразует эти данные в более удобный вид и предоставляет к ним доступ через API. Но для того чтобы скачать данные на жесткий диск через API, нужны навыки программирования, а также некоторое время, чтобы разобраться со структурой этих данных и написать скрипт. Мы предлагаем простую утилиту для командной строки, с помощью которой можно через API “Госзатрат” выгружать данные, соответствующие нужным параметрам, в виде файлов CSV. Ниже подробно рассказывается, что она умеет делать и как ее использовать. Разумеется, этот скрипт будет совершенствоваться.
Возможности
- Можно посмотреть, сколько контрактов находится по отправленному запросу.
- Можно выгружать данные через API и сохранять их на жестком диске в виде файлов в формате CSV.
- Есть простой конструктор запроса, позволяющий задавать такие параметры, как:
- период
- ценовой диапазон контрактов
- ИНН и КПП заказчика
- код региона заказчика
- закон, по которому заключены контракты
- По умолчанию при запуске без указания параметров скрипт показывает, сколько контрактов предлагает API за период с начала текущего года и до настоящего момента.
- Скрипт может записывать данные в двух режимах в зависимости от потребностей пользователя.
- по контрактам (одна строка – один контракт)
- по продуктам контрактов (одна строка – один продукт)
Дело в том, что в контракте часто бывает больше одного продукта (а может быть и больше сотни). Из-за этого представить контракт в двухмерной таблице в развернутом виде (с детализацией по всем продуктам) невозможно.
Иногда это и не нужно – например, когда интересуют только цены контрактов за определенный период по какому-нибудь региону или у какого-нибудь заказчика. Для таких случаев сделана выгрузка по контрактам.
Выгрузка по продуктам нужна для тех случаев, когда интересуют закупавшиеся продукты. Тогда выгружаются данные по каждому продукту: его цена, описание, номер контракта, к которому он относится, и т.д.
В нынешней версии скрипт выгружает данные по ограниченному количеству полей. По мере надобности их число можно будет увеличивать.
Для контрактов и продуктов выгружается разный набор полей.
Для контрактов:
- clearspending_url ссылка на карточку контракта на clearspending.ru
- sign_date дата подписания контракта
- 1st_product_description описание первого продукта (при выгрузке по контрактам)
- num_products число продуктов в контракте (при выгрузке по контрактам)
- contract_price сумма всего контракта
- currency валюта
- region_name наименование региона
- regnum реестровый номер контракта
- customer_name наименование заказчика
- customer_inn ИНН заказчика
- customer_kpp КПП заказчика
- 1st_supp_name наименование первого поставщика
- 1st_supp_inn ИНН первого поставщика
- 1st_supp_kpp КПП первого поставщика
- num_suppliers всего поставщиков
- contract_stage стадия исполнения контракта (актуально только для 44-ФЗ)
- fz федеральный закон – 44-ФЗ, 223-ФЗ, до 2014 г. 94-ФЗ
Для продуктов:
- clearspending_url ссылка на карточку контракта на clearspending.ru
- sign_date дата подписания контракта
- product_description описание закупленного продукта
- okpd2 код ОКПД2 (если имеется)
- okpd2_name расшифровка кода ОКПД2 (если имеется)
- okpd код ОКПД (если имеется)
- okpd_name расшифровка кода ОКПД (если имеется)
- okdp код ОКДП (если имеется), актуально до 2014 г.
- okdp_name расшифровка кода (если имеется), актуально до 2014 г.
- single_price цена за единицу продукта
- okei единица измерения
- product_sum сумма по продукту
- quantity количество закупленных единиц
- currency валюта
- region_name наименование региона
- regnum реестровый номер контракта
- customer_name наименование заказчика
- customer_inn ИНН заказчика
- customer_kpp КПП заказчика
- 1st_supp_name наименование первого поставщика
- 1st_supp_inn ИНН первого поставщика
- 1st_supp_kpp КПП первого поставщика
- num_suppliers всего поставщиков
- contract_stage стадия исполнения контракта (актуально только для 44-ФЗ)
- fz федеральный закон – 44-ФЗ, 223-ФЗ, до 2014 г. 94-ФЗ
Ограничения
В этой версии скрипт не дает возможности фильтровать продукты по кодам или искать их по ключевым словам в описаниях. Такая возможность со временем может быть добавлена.
В этой версии выгружаемые поля ограничиваются указанными выше. Если возникнет потребность, можно будет добавить и какие-нибудь еще поля.
Требования
- наличие на компьютере установленного Python 2.7
- наличие скачанной и распакованной папки со скриптом
Python
Чтобы использовать этот скрипт, нужно, чтобы на компьютере был установлен Python 2.7. На компьютерах с Linux и MacOS он, скорее всего, установлен с самого начала. На компьютеры с Windows его надо установить. Чтобы проверить, установлен ли Python, нужно выйти в командную строку (терминал) и набрать там:
> python
Если Python установлен, то тем самым командная строка перейдет в режим питоновской консоли и сообщит, какая версия Python используется в качестве основной. Например:
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information.
Выйти из этого режима можно с помощью команды
> quit()
Если в качестве основной у вас отображается Python 3.x, то нужно проверить, установлен ли у вас и Python 2.7, набрав в командной строке команду:
> py -2
Если нет, то его нужно установить.
Если да, то, запуская скрипт в соответствии с описанием ниже, вместо python нужно будет вводить py -2.
Скрипт
Утилита для командной строки находится здесь
Чтобы скачать ее на компьютер, нужно сохранить репозиторий в виде архивного файла на жестком диске и распаковать его.
Скрипт в работе использует прилагающийся к нему файл region_codes.json (это расшифровки кодов регионов), поэтому важно, чтобы они находились в одной папке.
Запуск скрипта
Скрипт запускается с помощью командной строки. О том, как пользоваться командной строкой, подробно рассказано здесь.
Чтобы запустить скрипт, нужно открыть командную строку и перейти в разархивированную папку. Находясь в этой папке, нужно набрать:
> python contract_surfer.py [далее можно вводить аргументы]
Аргументы могут быть следующими:
-h, --help Показать справку по утилите -o , --output Название итогового файла CSV -b , --begin Начало периода в форме дд.мм.гггг -e , --end Конец периода в форме дд.мм.гггг -i , --inn ИНН заказчика -k , --kpp КПП заказчика -r , --region Код региона заказчика -p , --pricerange Диапазон цен контрактов, например: 10000-50000 -f , --fz ФЗ, варианты: 94, 44, 223 -C, --contracts Выгрузить данные в формате 1 строка = 1 контракт -P, --products Выгрузить данные в формате 1 строка = 1 продукт
Вызвать справку можно прямо в командной строке, набрав
> python contract_surfer.py -h
Вот некоторые примеры составления запросов.
Узнать, сколько контрактов доступно по Москве начиная с 10.03.2017 и до настоящего момента
python contract_surfer.py -r 77 -b 10.03.2017
Узнать, сколько доступно контрактов Администрации губернатора СПб (ИНН 7830002078) за период с 01.01.2015 по 01.07.2016
python contract_surfer.py -i 7830002078 -b 01.01.2015 -e 01.07.2016
Узнать, сколько доступно контрактов СПб ГКУ “Организатор перевозок” (ИНН 7840379186) за период с 01.01.2011 до настоящего момента
python contract_surfer.py -i 7840379186 -b 01.01.2011
Узнать, сколько контрактов было заключено по Москве в 2016 г. по 223-ФЗ
python contract_surfer.py -r 77 -b 01.01.2016 -e 31.12.2016 -f 223
Узнать, сколько контрактов было заключено по СПб в 2016 г. по 44-ФЗ в ценовом диапазоне от 100000 до 1000000 рублей
python contract_surfer.py -r 78 -b 01.01.2016 -e 31.12.2016 -f 44 -p 100000-1000000
Выгрузить данные о закупках Администрации губернатора СПб (ИНН 7830002078) за период с 01.01.2016 по настоящий момент в формате 1 строка – 1 продукт и сохранить их в файл spb_gub_adm_2016-2017.csv
python contract_surfer.py -o spb_gub_adm_2016-2017 -i 7830002078 -b 01.01.2016 -P
Выгрузить в виде файла test.csv все контракты Государственной административно-технической инспекции СПб (ИНН 7803032323) начиная с 01.01.2016 в формате 1 строка – 1 контракт
python contract_surfer.py -o test -i 7803032323 -b 01.01.2016 -C
При запуске скрипт выводит на печать информацию о запросе:
- какие указанные (или установленные по умолчанию) параметры использовались в запросе
- сколько доступно контрактов по запросу
- адрес API, составленный в соответствии с запросом
Например:
ПАРАМЕТРЫ ЗАПРОСА: Период: 01.01.2017-31.12.2017 URL ЗАПРОСА: http://openapi.clearspending.ru/restapi/v3/contracts/select/?&daterange=01.01.2017-31.12.2017 Число подходящих контрактов: 1239749
При скачивании данных также выводится информация о названии файла, в который идет запись (по умолчанию он называется no_name). По окончании выгрузки в командную строку выводится слово ГОТОВО.
Что нужно учитывать
Успешность и скорость работы скрипта зависит от качества связи с интернетом.
Перед тем как скачивать ту или иную выборку данных по составленному запросу, стоит скачала посмотреть, сколько контрактов находится по запросу. Если их много (условно, количество переваливает за сотню тысяч), то следует задуматься о возможностях своего компьютера. Во-первых, такой файл может долго выгружаться. Во-вторых, есть риск, что с уже выгруженным файлом возникнут проблемы при обработке из-за того, что он окажется слишком тяжелым для оперативной памяти.
Если контрактов слишком много, имеет смысл раздробить свой запрос с помощью фильтров, чтобы выгружать не все сразу, а по частям (например, по конкретным регионам или заказчикам или за более короткие периоды).