Формат списка событий BOX 3.x
Подготовить события для BI
Преобразуйте сохранённые JSON-страницы в CSV, уберите точные дубли и посчитайте события по камерам.
Что получится
Четыре уникальных события из двух файлов, CSV для импорта в BI и сводка по камере и типу события.
Запустить пример
- Python 3.9 или новее; дополнительные библиотеки не нужны.
- Распакованный ZIP. Все входные данные уже включены. Доступ к BOX не требуется.
Откройте терминал в каталоге распакованного комплекта и выполните:
python3 export_events.py sample-page-1.json sample-page-2.json --config mapping.json --output events.csv
python3 summarize.py events.csv --output summary.csv
python3 check_example.pyОжидаемый результат
{"duplicates_skipped": 1, "rows": 4}Последняя команда выполняет автоматические проверки и печатает PASS. Файлы expected в комплекте содержат полный эталон.
Сводка для сравнения с BI
| Камера | Тип события | Количество |
|---|---|---|
| Камера 1 | no_helmet | 2 |
| Камера 2 | no_helmet | 1 |
| Камера 2 | vehicle | 1 |
Включены все статусы: подтверждённые, непросмотренные и отклонённые. Это число записей, а не число подтверждённых нарушений.
Локальные проверки
- CSV совпадает с эталоном; сводка содержит ожидаемые количества.
- Точный дубль пропускается, конфликт двух версий одного события останавливает обработку.
- Отсутствующее поле обнаруживается до записи CSV; текст, похожий на формулу, экранируется.
- Клиент API проверен на подменённых HTTPS-ответах: GET, Bearer, настройки TLS, ошибки, таймаут, запрет redirect и перезаписи.
Проверено 27.09.2026 на Python 3.12.0. Только стандартная библиотека.
Применимость и границы
- Обёртка events подтверждена руководством. Поля demo_* внутри событий — учебные; замените mapping.json по схеме своей установки.
- Опциональный fetch_events.py получает одну указанную страницу: полнота периода и пагинации не проверяется.
- Экспорт и API-клиент проверены локально, сетевой транспорт подменён. TLS-соединение с BOX, права пользователя, совместимость вашей сборки и импорт в BI требуют отдельной проверки.
Следующий шаг
- Импортируйте events.csv в BI: строки — Камера, столбцы — Тип, значение — количество ID.
- Сначала сравните сводку с таблицей в этом примере. Затем добавьте фильтр Статус = confirmed: останется две записи.
- Опционально получите одну страницу API: сверьте формат запроса и ответа в Swagger, задайте BOX_ORIGIN и BOX_ACCESS_TOKEN через окружение, выполните python3 fetch_events.py --page 1 --page-size 20 --output raw-page-1.json. HTTPS и проверка сертификата включены. Подробные команды и диагностика — в README.
- Настройте копию mapping.json по реальным полям ответа и передайте raw-page-1.json в export_events.py. Учебные demo_* замените по схеме сервера.
Файлы комплекта
- README.mdЗапуск, импорт в BI, настройка полей и границы примера
- fetch_events.pyПросмотр исходника · Опциональный GET одной страницы API с проверкой HTTPS
- export_events.pyПросмотр исходника · JSON → CSV и дедупликация
- summarize.pyПросмотр исходника · Группировка CSV по камере и типу
- mapping.jsonНастраиваемое сопоставление полей
- sample-page-1.jsonПервая учебная страница
- sample-page-2.jsonВторая страница с одним дублем
- expected.csvЭталонные четыре события
- expected-summary.csvЭталонная сводка
- check_example.pyПросмотр исходника · Автоматические проверки результата и ошибок
- check_fetch.pyПросмотр исходника · Проверки API-клиента на подменённых ответах без сети