File size: 2,954 Bytes
818d48b
 
ea037a1
 
818d48b
 
ea037a1
 
 
 
 
 
818d48b
 
 
 
 
ea037a1
818d48b
 
ea037a1
 
818d48b
 
 
 
ea037a1
818d48b
 
 
 
 
 
 
 
 
 
ea037a1
 
818d48b
ea037a1
 
 
 
 
 
818d48b
ea037a1
 
818d48b
ea037a1
818d48b
ea037a1
818d48b
 
ea037a1
 
 
 
 
 
818d48b
 
ea037a1
 
 
818d48b
 
ea037a1
818d48b
 
 
 
ea037a1
818d48b
 
 
ea037a1
818d48b
 
 
 
 
ea037a1
 
 
 
 
818d48b
ea037a1
818d48b
 
 
 
 
 
 
 
 
 
 
ea037a1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env python3
"""
Standalone script to fetch Kalshi menu data and export as JSON.
Run this on your local machine to fetch data from Kalshi's public API.

Usage:
    python fetch_kalshi_menu.py [--num-items N] [--output output.json]

Examples:
    python fetch_kalshi_menu.py
    python fetch_kalshi_menu.py --num-items 15 --output kalshi_data.json
    python fetch_kalshi_menu.py --verbose
"""

import argparse
import json
import sys
from datetime import datetime, timezone
from pathlib import Path

# Import the generator from kalshi_data.py
from kalshi_data import KalshiDataGenerator


def main():
    parser = argparse.ArgumentParser(
        description="Fetch Kalshi 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="kalshi_menu_data.json",
        help="Output JSON file path (default: kalshi_menu_data.json)",
    )
    parser.add_argument(
        "--verbose",
        action="store_true",
        help="Print detailed menu output during fetch",
    )

    args = parser.parse_args()

    print("🚀 Starting Kalshi menu data fetch...")
    print(f"   Items per section: {args.num_items}")
    print(f"   Output file: {args.output}")
    print()

    try:
        # Create generator instance
        generator = KalshiDataGenerator(num_items=args.num_items)

        # Build menu (this fetches all data)
        print("📊 Fetching menu data from Kalshi API...")
        menu_entries = generator.build_menu(verbose=args.verbose)

        # Format as MenuResponse structure
        menu_response = {
            "generated_at": datetime.now(timezone.utc).isoformat(),
            "source": "Kalshi API",
            "api_base": "https://api.elections.kalshi.com/trade-api/v2",
            "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("   Breakdown by section:")
        for cat, count in categories.items():
            print(f"      • {cat}: {count} items")

        return 0

    except KeyboardInterrupt:
        print("\n⚠️  Interrupted by user")
        return 1
    except Exception as e:
        print(f"\n❌ Error: {e}", file=sys.stderr)
        import traceback
        traceback.print_exc()
        return 1


if __name__ == "__main__":
    sys.exit(main())