43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
"""Collect one daily SET price snapshot from Yahoo Finance Chart API."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from app.prices import YahooChartProvider, collect_price_snapshot
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--root", type=Path, default=Path(__file__).resolve().parents[1] / "data" / "prices")
|
|
parser.add_argument("--start", required=True, help="inclusive YYYY-MM-DD")
|
|
parser.add_argument("--end", required=True, help="inclusive YYYY-MM-DD")
|
|
parser.add_argument("--timeout", type=float, default=30.0)
|
|
args = parser.parse_args()
|
|
snapshot = collect_price_snapshot(args.root, start=args.start, end=args.end, provider=YahooChartProvider(timeout=args.timeout))
|
|
source = snapshot["source"]
|
|
print(
|
|
json.dumps(
|
|
{
|
|
"snapshot_id": source["snapshot_id"],
|
|
"source_id": source["source_id"],
|
|
"period_start": source["period_start"],
|
|
"period_end": source["period_end"],
|
|
"symbols": sorted(snapshot["series"]),
|
|
"bar_counts": source["bar_counts"],
|
|
"quality": source["quality"],
|
|
"point_in_time": source["point_in_time"],
|
|
"snapshot_root": str(args.root),
|
|
},
|
|
ensure_ascii=False,
|
|
sort_keys=True,
|
|
)
|
|
)
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|