Files
zjjk/backend/test/wind_data_probe.py

96 lines
2.9 KiB
Python
Raw Permalink Normal View History

2026-03-20 21:47:30 +08:00
import argparse
import json
import os
from pathlib import Path
from typing import Any
import requests
API_ENDPOINTS = [
{
"name": "institutions",
"description": "Main/Institution vs retail capital flow summary.",
"path": "/data/v1/api/moneyflow/getMoneyFlow.json",
"params": {
"tradeDate": None,
"field": "tradeDate,secID,instNetFlow,retailNetFlow,instBuyCash,instSellCash",
},
},
{
"name": "blocks",
"description": "Block/sector capital inflows and outflows.",
"path": "/data/v1/api/moneyflow/getBlockMoneyFlow.json",
"params": {
"tradeDate": None,
"field": "tradeDate,industryName,blockNetFlow,blockBuyCash,blockSellCash",
},
},
{
"name": "indices",
"description": "Broad index capital flow overview.",
"path": "/data/v1/api/moneyflow/getIndexMoneyFlow.json",
"params": {
"tradeDate": None,
"field": "tradeDate,indexName,indexNetFlow,indexBuyCash,indexSellCash",
},
},
]
def probe_endpoint(
base_url: str, token: str | None, endpoint: dict[str, Any], default_trade_date: str
) -> dict[str, Any]:
params = {**endpoint["params"]}
params["tradeDate"] = params["tradeDate"] or default_trade_date
url = f"{base_url}{endpoint['path']}"
headers = {}
if token:
headers["Authorization"] = f"Bearer {token}"
response = requests.get(url, headers=headers, params=params, timeout=20)
try:
body = response.json()
except ValueError:
body = response.text
return {
"name": endpoint["name"],
"url": url,
"params": params,
"status_code": response.status_code,
"headers": dict(response.headers),
"body": body,
"description": endpoint["description"],
}
def main() -> None:
parser = argparse.ArgumentParser(description="Probe Wind/WMCloud capital flow endpoints.")
parser.add_argument("--trade-date", default="2026-03-19")
parser.add_argument("--out", default="probe_results.json")
parser.add_argument("--base-url", default="https://api.wmcloud.com")
args = parser.parse_args()
token = os.environ.get("WIND_API_TOKEN")
results: list[dict[str, Any]] = []
for endpoint in API_ENDPOINTS:
try:
result = probe_endpoint(args.base_url, token, endpoint, args.trade_date)
except requests.RequestException as exc:
result = {
"name": endpoint["name"],
"description": endpoint["description"],
"error": str(exc),
"url": f"{args.base_url}{endpoint['path']}",
}
results.append(result)
out_path = Path(__file__).resolve().parent / args.out
out_path.write_text(json.dumps(results, ensure_ascii=False, indent=2), encoding="utf-8")
print(out_path)
if __name__ == "__main__":
main()