Кратчайший путь — один запрос без ключа
Ключ не нужен, регистрация не нужна. Лимит без ключа — 60 запросов в минуту с адреса; с бесплатным ключом — 120.
curl -s https://map.megainet.art/api/alerts.phpВ ответе: regions — состояние 25 областей, updated — когда снято, stale — молчат ли источники (тогда отдана последняя известная копия). Поле changed_ts говорит, КОГДА состояние изменилось: по нему считают длительность тревоги.
import json, urllib.request
with urllib.request.urlopen("https://map.megainet.art/api/alerts.php") as r:
data = json.load(r)
for iso, region in data["regions"].items():
if region["alert"]:
print(iso, "— тривога")Как не опрашивать каждую секунду: вебхук вместо опроса
Опрос раз в 15 секунд — это 5 760 запросов в сутки ради десятка событий. Подписка присылает событие в момент, когда оно произошло.
$ts = $_SERVER['HTTP_X_MAP_TIMESTAMP'] ?? '';
$sig = $_SERVER['HTTP_X_MAP_SIGNATURE'] ?? '';
$body = file_get_contents('php://input');
// Перевіряємо підпис ДО того, як щось зробимо з подією.
if (!hash_equals(hash_hmac('sha256', $ts . "\n" . $body, $SECRET), $sig)) {
http_response_code(401);
exit;
}
$event = json_decode($body, true); // alert.start | alert.endКаждая доставка подписана: заголовки X-Map-Timestamp, X-Map-Signature (HMAC-SHA256 от «метка \n тело»), X-Map-Event и X-Map-Delivery. Проверяйте подпись ДО обработки: адрес приёмника рано или поздно узнают, и без проверки любой пришлёт вам «тревогу» от нашего имени — а по ней, возможно, включается сирена на объекте.
Не ответили 2xx — повторим через 1, 5, 30 минут, 2 и 6 часов. Отвечайте 2xx СРАЗУ, а свою работу делайте после: мы ждём 8 секунд.
Где взять историю по областям
Сколько тревог было за сутки и сколько часов область провела под тревогой:
curl -s "https://map.megainet.art/api/history.php?hours=24"
curl -s "https://map.megainet.art/api/analytics.php?hours=168"Период — 24, 48 или 168 часов. Граница, о которой надо знать заранее: цели хранятся 24 часа, лента мониторов — 72. Недельной аналитики ПО ЦЕЛЯМ не существует физически, и ни один параметр её не вернёт.
Сколько это стоит
Ядро бесплатно навсегда. Платят только за более высокий лимит и за то, чтобы не ставить ссылку-кредит; вебхуки — тоже платные.
Готовый клиент
Python-клиент без зависимостей (все методы, проверка подписи вебхука, готовый приёмник) — попросите ссылку на почте [email protected]: библиотека ещё не выложена.