mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2026-09-20 14:27:42 +00:00
56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
from datetime import datetime
|
|
|
|
import pytz
|
|
|
|
from data.activity_ref import ActivityRef
|
|
from data.alert import Alert
|
|
from providers.alert.http_alert_provider import HTTPAlertProvider
|
|
|
|
|
|
class Hamsat(HTTPAlertProvider):
|
|
"""Alert provider for Hamsat (hams.at)"""
|
|
|
|
POLL_INTERVAL_SEC = 1800
|
|
ALERTS_URL = "https://hams.at/api/alerts"
|
|
|
|
def __init__(self, provider_config):
|
|
super().__init__("Hamsat", provider_config, self.ALERTS_URL, self.POLL_INTERVAL_SEC)
|
|
|
|
def _http_response_to_alerts(self, http_response):
|
|
new_alerts = []
|
|
# Iterate through source data
|
|
for source_alert in http_response.json()["data"]:
|
|
# Convert to our alert format
|
|
freqs_modes = source_alert.get("mode", "")
|
|
if "mhz" in source_alert:
|
|
if "mhz_direction" in source_alert:
|
|
freqs_modes = f"{source_alert['mhz']!s} {source_alert['mhz_direction']}, {freqs_modes}"
|
|
else:
|
|
freqs_modes = f"{source_alert['mhz']!s}, {freqs_modes}"
|
|
|
|
alert = Alert(
|
|
source=self.name,
|
|
source_id=source_alert["id"],
|
|
dx_calls=[source_alert["callsign"].upper()],
|
|
freqs_modes=freqs_modes,
|
|
comment=source_alert["comment"],
|
|
sig="Satellite",
|
|
# Fudge an activity ref to provide the remaining bits of data we need: the satellite and the operator's grid
|
|
sig_refs=[
|
|
ActivityRef(
|
|
sig="Satellite",
|
|
id=f"{source_alert['satellite']['name']} from {source_alert['grids'][0]}",
|
|
)
|
|
],
|
|
start_time=datetime.strptime(source_alert["aos_at"], "%Y-%m-%dT%H:%M:%SZ")
|
|
.replace(tzinfo=pytz.UTC)
|
|
.timestamp(),
|
|
end_time=datetime.strptime(source_alert["los_at"], "%Y-%m-%dT%H:%M:%SZ")
|
|
.replace(tzinfo=pytz.UTC)
|
|
.timestamp(),
|
|
)
|
|
|
|
# Add to our list
|
|
new_alerts.append(alert)
|
|
return new_alerts
|