Набір із двох скриптів: edata.py та json2sqlite.py. Дозволяють отримувати та зберігати дані з Єдиного веб-порталу використання публічних коштів Є-Data.
Скрипт дозволяє отримувати дані за запитами до API з Єдиного веб-порталу використання публічних коштів та зберігати їх у наступних форматах:
- CSV
- JSON
- XML
Оскільки скрипт написано на Python, він працюватиме під усіма операційними системами, для яких реалізовано інтерпретатор, з деякими обмеженнями (див. Вимоги).
Щодо особливостей запуску під окремими операційними системами зверніться до відповідної документації мови Python для цих систем:
Скрипт використовує бібліотеку Requests (сторінка на GitHub, сторінка у каталозі PyPi, документація).
Більш досвідченим користувачам можливо буде зручніше використовувати віртуальне оточення.
Для роботи скриптів edata.py та json2sqlite.py без додаткових налаштувань потрібен Python версії не нижче 3.5. У випадку використання Windows, найстарішою версією, під якою працюватиме Python 3.5, є Windows 7 SP1.
Отримати скрипт можна кількома шляхами:
- завантажити останню версію за прямим посиланням
- завантажити ZIP-архів репозиторія
- клонувати даний репозиторій
Встановлення скрипти не потребують, головне — запам'ятати директорію, у яку буде
збережено файли edata.py, regions.py та json2sqlite.py.
Особливості запуску залежать від використовуваної операційної системи, тому у випадку, якщо ви не знаєте, як краще це зробити, радимо звернутися до відповідної документації вище.
Якщо файл скрипту не є виконуваним, запуск відбувається стандартним для мови Python шляхом:
python edata.py [параметри]Отримати коротку довідку можна, запустивши скрипт без параметрів, або з
параметром -h (або --help):
python edata.py [-h] | [--help]Хоча скрипт використовує як короткі опції командного рядка, так і відповідні їм довгі, далі у прикладах будуть використовуватися короткі.
Обов'язковими параметрами запуску є наявність формату виводу та коди платників і отримувачів (за винятком, коли проводиться пошук трансакцій, оприлюднених за попередній день):
-p,--payers- перелік кодів ЄДРПОУ відправників платежів, вказаних через пробіл-r,--receipts- перелік кодів ЄДРПОУ отримувачів платежів, вказаних через пробіл-j,--jsonдля JSON з ім'ямedata.json-c,--csvдля CSV з ім'ямedata.csv-sql,--sqliteдля зберігання даних у базу даних SQLiteedata.sqlite, що дозволятиме згодом виконувати запити SQL
При зберіганні файлів JSON та CSV файли з такими назвами, що існують, буде перезаписано, а при зберіганні у базу даних SQLite буде або створено нову базу даних (якщо її не існує), або буде додано у існуючу.
Коди отримувачів або платників (параметри командного рядка -r або -p)
вказуються через пробіл:
python edata.py -j -p 00130850 13648033або
python edata.py -r 23359034 20077720Скрипт вивантажує дані лише у файл одного формату у випадках, якщо обрано формат JSON або CSV. Для формату SQL зроблено виняток.
Відповідно до документації
при роботі з API версії 2.0 як для запиту, так і для відповіді використовується
формат дати ISO 8601 РРРР-ММ-ДД
(параметри -s, --startdate та -e, --enddate відповідно).
python edata.py -p 00130850 13648033 -j -s 2015-02-01 -e 2015-10-03У випадку, якщо діапазон дат не вказано, діапазон дорівнюватиме 92 дням. Так, при запуску скрипта 16 жовтня 2016 року транзакції повернуто за період з 15.09.2015 по 16.10.2016.
Якщо користувачем буде сказано як початкову, так і кінцеву дату і при цьому кінцева дата виявиться меншою за початкову, в такому випадку дати буде поміняно місцями.
Параметр -t, --treasury дозволяє вказати перелік регіональних
казначейств, для яких буде виконуватись пошук транзакцій. Коди обласних
казначейств відповідають кодам областей України
і співпадають з кодами головних управлінь ДФС в цих областях
(не плутати з K_DFM11).
python edata.py -p 00130850 13648033 -j -t 2 9 Параметр -i, --indent дозволяє вказати кількість пробілів, що буде
використана для відступів у JSON-файлі.
За замочуванням дорівнює 0.
Дати транзакцій вивантажуються із Є-Data у форматі ISO 8601 datetime.
При зберіганні дата конвертується у формат ISO 8601 date YYYY-MM-DD.
За допомогою параметру -iso, --iso8601 можливо залишити дату транзакції у
форматі ISO 8601 datetime.
Опція -v, --verbose вмикає вивід інформації про кількість вивантажених, оброблених та фактично доданих (за винятком вже існуючих) записів до бази даних.
Оскільки дані щодо платежів іноді завантажуються частинами по регіонах, у певний момент часу база не міститиме даних про усі транзакції.
Опція -l, --lastload повертає дату повного завантаження інформації:
$ python edata.py -l
Fri, Nov 25 2016 00:00:00 UTC+02:00Опція --k, --keep-json дозволяє створити також і файл JSON при вивантаженні до бази даних SQLite.
Параметр -a, --ascii дозволяє вивести JSON у ASCII-сумісний файл, в цьому
випадку усі не-ASCII символи буде замінено на послідовності, визначені у
розділі 7 «Strings» RFC 7159.
Використовуйте цей параметр лише тоді, коли точно знаєте, що робите!
Для цього можна використовувати як параметри командного рядка, так і спеціальний скрипт extractor.py.
Під час пошуку транзакцій з допомогою параметрів edata.py, вказується лише дата, за яку необхідно вивантажити транзакції:
python edata.py -s 2015-02-01 -e 2015-10-03Є обгорткою над edata.py і дозволяє отримати дані за проміжок часу. Виконується окремо, у якості парамету командного рядка передається початкова дата періоду, за який можна отримати транзакції у форматі ISO 8601:
python extractor.py 2020-11-27ZIP-архіви з CSV всередині зберігаються у директоріїї data (яка створюється, якщо не існує) поточної директорії. Кодування файлів CSV за замочуванням — CP1251.
Скрипт виконує єдину функцію — імпортує дані з JSON-файлів, що були вивантажені з
порталу Є-Data, до бази даних SQLite. Якщо ім'я файлу бази даних не вказано,
за замовчуванням буде використано ім'я edata.sqlite.
Якщо такої бази в поточній директорії не існує, вона буде створена. Якщо ж база даних існує, дані буде додано в кінець таблиці.
При додаванні перевіряється унікальність записів по полю id транзакції, у
випадку конфліктів запис буде перезаписано.
Скрипт не має обов'язкових опцій.
Якщо просто виконати його, наприклад:
$ python json2sqlite.pyто скрипт спробує обробити всі файли із розширенням *.json, що знаходяться
в одній з ним директорії.
За допомогою опції -f, --file можна вказувати через пробіл імена
JSON-файлів, які потрібно обробити.
Опція -d, --database дозволяє вказувати інше, ніж edata.sqlite ім'я
бази даних, у яку буде додано записи.
Ім'я потрібно вказувати без розширення .sqlite. Якщо ж розширення все
одно буде вказано, його буде видалено.
Опція -v, --verbose працює аналогічно подібній опції скрипта edata.py, і додатково інформує, чи була створена таблиця у базі даних для додавання записів.
$ python json2sqlite.py -d mysqlite -f file1.json file2.json -vІмпортує дані із файлів file1.json та file2.json у базу даних SQLite
mysqlite.sqlite та виводить інформацію.
- конвертувати ISO 8601 datetime у ISO 8601 date
- додати завантаження переліку ЄДРПОУ із файлів
- додати обробку параметра
lastload, який повертає дату повного завантаження транзакцій (які іноді додаються частинами протягом дня) - реалізувати можливість зберігання файлів JSON та CSV під довільними іменами
- реалізувати можливість стиснення файлів у
bzip,gzipабо інший архівний формат - формувати URL з компонентів, як у RFC
У разі виявлення помилок або бажання нових фіч вітається відкриття issues.