from typing import List, Optional import requests from models import Plext, EventType class IngressAPI: BASE_URL = "https://intel.ingress.com/r" def __init__(self, version: str, cookie: str): self.version = version self.headers = { "accept": "application/json, text/javascript, */*; q=0.01", "accept-language": "it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7", "content-type": "application/json; charset=UTF-8", "cookie": cookie, "origin": "https://intel.ingress.com", "priority": "u=1, i", "referer": "https://intel.ingress.com/", "sec-ch-ua": '"Chromium";v="142", "Google Chrome";v="142", "Not_A Brand";v="99"', "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": '"macOS"', "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36", "x-requested-with": "XMLHttpRequest", } # Extract CSRF token from cookie and add to headers for item in cookie.split(";"): if "csrftoken" in item: self.headers["x-csrftoken"] = item.split("=")[1].strip() break def get_plexts( self, min_lat_e6: int, min_lng_e6: int, max_lat_e6: int, max_lng_e6: int, min_timestamp_ms: int = -1, max_timestamp_ms: int = -1, tab: str = "all", event_types: Optional[List[EventType]] = None, player_name: Optional[str] = None, ) -> List[Plext]: """ Fetches plexts from the Ingress API. """ payload = { "minLatE6": min_lat_e6, "minLngE6": min_lng_e6, "maxLatE6": max_lat_e6, "maxLngE6": max_lng_e6, "minTimestampMs": min_timestamp_ms, "maxTimestampMs": max_timestamp_ms, "tab": tab, "v": self.version, } response = requests.post( f"{self.BASE_URL}/getPlexts", json=payload, headers=self.headers ) response.raise_for_status() try: data = response.json() except requests.exceptions.JSONDecodeError: print(f"Error decoding JSON: {response.text}") raise plexts = [Plext.from_json(item) for item in data["result"]] if event_types: plexts = [p for p in plexts if p.get_event_type() in event_types] if player_name: plexts = [p for p in plexts if p.get_player_name() == player_name] return plexts