working version
This commit is contained in:
82
main.py
82
main.py
@@ -5,17 +5,57 @@ from datetime import datetime
|
||||
from ingress import IngressAPI
|
||||
from models import EventType, Plext
|
||||
|
||||
|
||||
def parse_timestamp(value: str) -> int:
|
||||
"""
|
||||
Parse timestamp from either milliseconds (int) or ISO 8601 string.
|
||||
|
||||
Args:
|
||||
value: Either integer milliseconds or ISO 8601 string
|
||||
|
||||
Returns:
|
||||
Timestamp in milliseconds since epoch
|
||||
|
||||
Raises:
|
||||
ValueError: If format is invalid
|
||||
"""
|
||||
# Try parsing as integer (milliseconds)
|
||||
try:
|
||||
return int(value)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# Try parsing as ISO 8601 datetime
|
||||
try:
|
||||
# Handle 'Z' suffix (UTC)
|
||||
iso_value = value.replace("Z", "+00:00")
|
||||
dt = datetime.fromisoformat(iso_value)
|
||||
return int(dt.timestamp() * 1000)
|
||||
except ValueError:
|
||||
raise ValueError(
|
||||
f"Invalid timestamp format: {value}. "
|
||||
"Use milliseconds (e.g., 1736659200000) or "
|
||||
"ISO 8601 format (e.g., '2026-01-12T10:00:00Z')"
|
||||
)
|
||||
|
||||
|
||||
def print_plexts(plexts: List[Plext]):
|
||||
for plext in plexts:
|
||||
# Sort plexts by timestamp (ascending - oldest first)
|
||||
sorted_plexts = sorted(plexts, key=lambda p: p.timestamp)
|
||||
|
||||
for plext in sorted_plexts:
|
||||
dt = datetime.fromtimestamp(plext.timestamp / 1000.0)
|
||||
timestamp_str = dt.strftime("%Y-%m-%d %H:%M:%S")
|
||||
coords = plext.get_event_coordinates()
|
||||
if coords:
|
||||
lat, lng = coords
|
||||
print(f"[{timestamp_str}] [{plext.get_event_type().name}] {plext.text} - Coords: {lat}, {lng}")
|
||||
print(
|
||||
f"[{timestamp_str}] [{plext.get_event_type().name}] {plext.text} - Coords: {lat}, {lng}"
|
||||
)
|
||||
else:
|
||||
print(f"[{timestamp_str}] [{plext.get_event_type().name}] {plext.text}")
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Ingress Intel Report")
|
||||
parser.add_argument(
|
||||
@@ -26,17 +66,37 @@ def main():
|
||||
help="List of event types to filter by.",
|
||||
)
|
||||
parser.add_argument("--player-name", type=str, help="Player name to filter by.")
|
||||
parser.add_argument("--min-lat", type=int, default=45470259, help="Minimum latitude.")
|
||||
parser.add_argument("--min-lng", type=int, default=12244155, help="Minimum longitude.")
|
||||
parser.add_argument("--max-lat", type=int, default=45480370, help="Maximum latitude.")
|
||||
parser.add_argument("--max-lng", type=int, default=12298207, help="Maximum longitude.")
|
||||
parser.add_argument(
|
||||
"--min-lat", type=int, default=45470259, help="Minimum latitude."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--min-lng", type=int, default=12244155, help="Minimum longitude."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--max-lat", type=int, default=45480370, help="Maximum latitude."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--max-lng", type=int, default=12298207, help="Maximum longitude."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--min-timestamp",
|
||||
type=parse_timestamp,
|
||||
default=-1,
|
||||
help="Minimum timestamp (milliseconds since epoch or ISO 8601 format, e.g., '2026-01-12T10:00:00Z')",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--max-timestamp",
|
||||
type=parse_timestamp,
|
||||
default=-1,
|
||||
help="Maximum timestamp (milliseconds since epoch or ISO 8601 format, e.g., '2026-01-12T10:00:00Z')",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# It's recommended to set the INGRESS_COOKIE environment variable
|
||||
# instead of hardcoding the cookie in the script.
|
||||
cookie = os.getenv(
|
||||
"INGRESS_COOKIE",
|
||||
"csrftoken=3yUkOxJ2lkc49AStOe8JDpmP1vWI5WTXpV5hlMKTRB4sisPGLdv1IXMBvKfYAZmQ; sessionid=.eJyrViotTi3yTFGyUrJINTA2SbG0MDdPSjJPMjVU0gHLueYmZuYApYvyixNLMvVyE0tKUvMd0kGiesn5uUBVxanFxZn5eWGpRSAKqNRIqRYA3zUdAQ:1veJTk:haQGju5WSpAUlMygA1AF26nvx1I; ingress.intelmap.shflt=viz; _ncc=1; ingress.intelmap.zoom=16; ingress.intelmap.lng=12.271176494006568; ingress.intelmap.lat=45.47531344367309"
|
||||
"csrftoken=3yUkOxJ2lkc49AStOe8JDpmP1vWI5WTXpV5hlMKTRB4sisPGLdv1IXMBvKfYAZmQ; sessionid=.eJyrViotTi3yTFGyUrJINTA2SbG0MDdPSjJPMjVU0gHLueYmZuYApYvyixNLMvVyE0tKUvMd0kGiesn5uUBVxanFxZn5eWGpRSAKqNRIqRYA3zUdAQ:1veJTk:haQGju5WSpAUlMygA1AF26nvx1I; ingress.intelmap.shflt=viz; _ncc=1; ingress.intelmap.zoom=16; ingress.intelmap.lng=12.271176494006568; ingress.intelmap.lat=45.47531344367309",
|
||||
)
|
||||
|
||||
# This is the version from the curl command in json_doc.md
|
||||
@@ -46,7 +106,9 @@ def main():
|
||||
cookie=cookie,
|
||||
)
|
||||
|
||||
event_types = [EventType[et] for et in args.event_types] if args.event_types else None
|
||||
event_types = (
|
||||
[EventType[et] for et in args.event_types] if args.event_types else None
|
||||
)
|
||||
|
||||
try:
|
||||
plexts = client.get_plexts(
|
||||
@@ -54,6 +116,8 @@ def main():
|
||||
min_lng_e6=args.min_lng,
|
||||
max_lat_e6=args.max_lat,
|
||||
max_lng_e6=args.max_lng,
|
||||
min_timestamp_ms=args.min_timestamp,
|
||||
max_timestamp_ms=args.max_timestamp,
|
||||
event_types=event_types,
|
||||
player_name=args.player_name,
|
||||
)
|
||||
@@ -64,4 +128,4 @@ def main():
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user