文件预览

handler.py

查看 Skills of A-share holder data released by ft.tech. 技能包中的文件内容。

文件内容

sub-skills/pledge-detail/scripts/handler.py

#!/usr/bin/env python3
"""查询单只 A 股股票所有报告期的股权质押详细信息"""
import argparse
import json
import sys
import urllib.error
import urllib.parse
import urllib.request

BASE_URL = "https://market.ft.tech"
ENDPOINT = "/data/api/v1/market/data/pledge/pledge-detail"


def fetch(stock_code: str, page: int, page_size: int) -> dict:
    params = urllib.parse.urlencode({
        "stock_code": stock_code,
        "page": page,
        "page_size": page_size,
    })
    url = f"{BASE_URL}{ENDPOINT}?{params}"
    try:
        with urllib.request.urlopen(url) as resp:
            return json.loads(resp.read().decode())
    except urllib.error.HTTPError as e:
        body = e.read().decode()
        print(f"HTTP {e.code}: {body}", file=sys.stderr)
        sys.exit(1)


def main():
    parser = argparse.ArgumentParser(description="查询单只 A 股股票所有报告期的股权质押详细信息")
    parser.add_argument(
        "--stock_code",
        required=True,
        help="股票代码,需携带市场后缀,如 603323.SH / 000001.SZ / 833171.BJ",
    )
    parser.add_argument(
        "--page",
        type=int,
        default=1,
        help="页码,从 1 开始,默认 1",
    )
    parser.add_argument(
        "--page_size",
        type=int,
        default=50,
        help="每页记录数,默认 50",
    )
    args = parser.parse_args()

    result = fetch(args.stock_code, args.page, args.page_size)
    print(json.dumps(result, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()