mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2025-10-27 08:49:27 +00:00
ZLOTA support + misc changes
This commit is contained in:
@@ -3,7 +3,6 @@ import logging
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import pytz
|
||||
import requests
|
||||
from requests_cache import CachedSession
|
||||
|
||||
from data.spot import Spot
|
||||
@@ -14,9 +13,12 @@ from spotproviders.http_spot_provider import HTTPSpotProvider
|
||||
class ParksNPeaks(HTTPSpotProvider):
|
||||
POLL_INTERVAL_SEC = 120
|
||||
SPOTS_URL = "https://www.parksnpeaks.org/api/ALL"
|
||||
SIOTA_CSV_URL = "https://www.silosontheair.com/data/silos.csv"
|
||||
SIOTA_CSV_CACHE_TIME_DAYS = 30
|
||||
SIOTA_CSV_CACHE = CachedSession("siota_data_cache", expire_after=timedelta(days=SIOTA_CSV_CACHE_TIME_DAYS))
|
||||
SIOTA_LIST_URL = "https://www.silosontheair.com/data/silos.csv"
|
||||
SIOTA_LIST_CACHE_TIME_DAYS = 30
|
||||
SIOTA_LIST_CACHE = CachedSession("siota_data_cache", expire_after=timedelta(days=SIOTA_LIST_CACHE_TIME_DAYS))
|
||||
ZLOTA_LIST_URL = "https://ontheair.nz/assets/assets.json"
|
||||
ZLOTA_LIST_CACHE_TIME_DAYS = 30
|
||||
ZLOTA_LIST_CACHE = CachedSession("zlota_data_cache", expire_after=timedelta(days=ZLOTA_LIST_CACHE_TIME_DAYS))
|
||||
|
||||
def __init__(self, provider_config):
|
||||
super().__init__(provider_config, self.SPOTS_URL, self.POLL_INTERVAL_SEC)
|
||||
@@ -43,6 +45,8 @@ class ParksNPeaks(HTTPSpotProvider):
|
||||
# PNP supports a bunch of programs which should have different icons
|
||||
if spot.sig == "SiOTA":
|
||||
spot.icon = "wheat-awn"
|
||||
elif spot.sig == "ZLOTA":
|
||||
spot.icon = "kiwi-bird"
|
||||
elif spot.sig in ["POTA", "SOTA", "WWFF"]:
|
||||
# Don't care about an icon as this will be rejected anyway, we have better data from POTA/SOTA/WWFF direct
|
||||
spot.icon = ""
|
||||
@@ -54,16 +58,27 @@ class ParksNPeaks(HTTPSpotProvider):
|
||||
|
||||
# SiOTA lat/lon/grid lookup
|
||||
if spot.sig == "SiOTA":
|
||||
siota_csv_data = self.SIOTA_CSV_CACHE.get(self.SIOTA_CSV_URL, headers=self.HTTP_HEADERS)
|
||||
siota_csv_data = self.SIOTA_LIST_CACHE.get(self.SIOTA_LIST_URL, headers=self.HTTP_HEADERS)
|
||||
siota_dr = csv.DictReader(siota_csv_data.content.decode().splitlines())
|
||||
for row in siota_dr:
|
||||
if row["SILO_CODE"] == spot.sig_refs[0]:
|
||||
spot.dx_country = row["COUNTRY"]
|
||||
spot.latitude = float(row["LAT"])
|
||||
spot.longitude = float(row["LON"])
|
||||
spot.grid = row["LOCATOR"]
|
||||
break
|
||||
|
||||
# ZLOTA name/lat/lon lookup
|
||||
if spot.sig == "ZLOTA":
|
||||
zlota_data = self.ZLOTA_LIST_CACHE.get(self.ZLOTA_LIST_URL, headers=self.HTTP_HEADERS).json()
|
||||
for asset in zlota_data:
|
||||
if asset["code"] == spot.sig_refs[0]:
|
||||
spot.sig_refs_names = [asset["name"]]
|
||||
spot.latitude = asset["y"]
|
||||
spot.longitude = asset["x"]
|
||||
# Junk the "DE call", PNP always returns "ZLOTA" as the spotter for ZLOTA spots
|
||||
spot.de_call = None
|
||||
break
|
||||
|
||||
# If this is POTA, SOTA or WWFF data we already have it through other means, so ignore. Otherwise, add to
|
||||
# the spot list.
|
||||
if spot.sig not in ["POTA", "SOTA", "WWFF"]:
|
||||
|
||||
Reference in New Issue
Block a user