diff --git a/spotproviders/pota.py b/spotproviders/pota.py index f241912..76fccc2 100644 --- a/spotproviders/pota.py +++ b/spotproviders/pota.py @@ -1,8 +1,11 @@ -from datetime import datetime +import re +from datetime import datetime, timedelta import pytz +from requests_cache import CachedSession -from core.utils import get_icon_for_sig +from core.constants import HTTP_HEADERS +from core.utils import get_icon_for_sig, get_ref_regex_for_sig from data.spot import Spot from spotproviders.http_spot_provider import HTTPSpotProvider @@ -11,6 +14,11 @@ from spotproviders.http_spot_provider import HTTPSpotProvider class POTA(HTTPSpotProvider): POLL_INTERVAL_SEC = 120 SPOTS_URL = "https://api.pota.app/spot/activator" + # Might need to look up extra park data + PARK_URL_ROOT = "https://api.pota.app/park/" + PARK_DATA_CACHE_TIME_DAYS = 30 + PARK_DATA_CACHE = CachedSession("cache/pota_park_data_cache", + expire_after=timedelta(days=PARK_DATA_CACHE_TIME_DAYS)) def __init__(self, provider_config): super().__init__(provider_config, self.SPOTS_URL, self.POLL_INTERVAL_SEC) @@ -32,12 +40,25 @@ class POTA(HTTPSpotProvider): sig_refs_names=[source_spot["name"]], sig_refs_urls=["https://pota.app/#/park/" + source_spot["reference"]], icon=get_icon_for_sig("POTA"), - time=datetime.strptime(source_spot["spotTime"], "%Y-%m-%dT%H:%M:%S").replace(tzinfo=pytz.UTC).timestamp(), + time=datetime.strptime(source_spot["spotTime"], "%Y-%m-%dT%H:%M:%S").replace( + tzinfo=pytz.UTC).timestamp(), dx_grid=source_spot["grid6"], dx_latitude=source_spot["latitude"], dx_longitude=source_spot["longitude"]) + # Sometimes we can get other refs in the comments for n-fer activations, extract them + all_comment_refs = re.findall(get_ref_regex_for_sig("POTA"), spot.comment) + for r in all_comment_refs: + if r not in spot.sig_refs: + spot.sig_refs.append(r.upper()) + spot.sig_refs_urls.append("https://pota.app/#/park/" + r.upper()) + + # Now we need to look up the name of that reference from the API, because the comment won't have it + park_response = self.PARK_DATA_CACHE.get(self.PARK_URL_ROOT + r.upper(), headers=HTTP_HEADERS) + park_data = park_response.json() + spot.sig_refs_names.append(park_data["name"]) + # Add to our list. Don't worry about de-duping, removing old spots etc. at this point; other code will do # that for us. new_spots.append(spot) - return new_spots \ No newline at end of file + return new_spots diff --git a/webassets/js/spots.js b/webassets/js/spots.js index 9b20feb..93e2534 100644 --- a/webassets/js/spots.js +++ b/webassets/js/spots.js @@ -148,22 +148,16 @@ function updateTable() { // Format sig_refs var sig_refs = ""; - if (s["sig_refs"] && s["sig_refs_urls"] && s["sig_refs"].length == s["sig_refs_urls"].length) { + if (s["sig_refs"] && s["sig_refs_urls"] && s["sig_refs"].length == s["sig_refs_urls"].length && s["sig_refs"].length == s["sig_refs_names"].length) { items = s["sig_refs"].map(s => `${s}`) for (var i = 0; i < items.length; i++) { - items[i] = `${items[i]}` + items[i] = `${items[i]}` } sig_refs = items.join(", "); } else if (s["sig_refs"]) { sig_refs = s["sig_refs"].map(s => `${s}`).join(", "); } - // Format sig_refs title - var sig_refs_title_string = ""; - if (s["sig_refs_names"]) { - sig_refs_title_string = " title=\"" + s["sig_refs_names"].join(", ") + "\""; - } - // Format DE flag var de_flag = ""; if (s["de_flag"] && s["de_flag"] != null && s["de_flag"] != "") { @@ -209,7 +203,7 @@ function updateTable() { $tr.append(`
`); } if (showRef) { - $tr.append(`