polygrapher / app /fetch_menu_data.py
dhruv575
Filter by tags
b15516f
#!/usr/bin/env python3
"""
Standalone script to fetch Polymarket menu data and export as JSON.
Run this on your local machine to avoid network timeout issues.
Usage:
python fetch_menu_data.py [--num-items N] [--output output.json]
"""
import argparse
import json
import sys
from datetime import datetime, timezone
from pathlib import Path
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
# Import the generator from email3.py
from email3 import PolymarketEmailGenerator
def main():
parser = argparse.ArgumentParser(
description="Fetch Polymarket menu data and export as JSON"
)
parser.add_argument(
"--num-items",
type=int,
default=10,
help="Number of items per section (default: 10)",
)
parser.add_argument(
"--output",
type=str,
default="menu_data.json",
help="Output JSON file path (default: menu_data.json)",
)
args = parser.parse_args()
print("Starting Polymarket menu data fetch...")
print(f" Items per section: {args.num_items}")
print()
try:
# Create generator instance
generator = PolymarketEmailGenerator(num_items=args.num_items)
# Build menu (this fetches all data including breaking news)
print("Fetching menu data...")
menu_entries = generator.build_menu(verbose=True)
# Format as MenuResponse structure
menu_response = {
"generated_at": datetime.now(timezone.utc).isoformat(),
"items": menu_entries,
}
# Write to JSON file
output_path = Path(args.output)
with open(output_path, "w", encoding="utf-8") as f:
json.dump(menu_response, f, indent=2, ensure_ascii=False)
print()
print(f"Success! Menu data exported to: {output_path}")
print(f" Total items: {len(menu_entries)}")
# Show breakdown by category
categories = {}
for item in menu_entries:
cat = item.get("category", "unknown")
categories[cat] = categories.get(cat, 0) + 1
print(f" Categories: {categories}")
return 0
except KeyboardInterrupt:
print("\nInterrupted by user")
return 1
except Exception as e:
print(f"\nError: {e}", file=sys.stderr)
import traceback
traceback.print_exc()
return 1
if __name__ == "__main__":
sys.exit(main())