diff --git a/docs/API_REFERENCE.md b/docs/API_REFERENCE.md index 8cbe2d7..9e85320 100644 --- a/docs/API_REFERENCE.md +++ b/docs/API_REFERENCE.md @@ -6,7 +6,7 @@ | 指标 | 数量 | |---|---:| -| SDK 方法总数 | 200 | +| SDK 方法总数 | 206 | ## 专题分布 @@ -14,7 +14,7 @@ | ftshare-doc 专题 | SDK 方法数 | API mixin 模块 | Endpoint 模块 | |---|---:|---|---| -| 股票数据 | 95 | `ftshare.apis.stock` | `ftshare.endpoints.stock` | +| 股票数据 | 101 | `ftshare.apis.stock` | `ftshare.endpoints.stock` | | 港股数据 | 14 | `ftshare.apis.hk` | `ftshare.endpoints.hk` | | 美股数据 | 9 | `ftshare.apis.us` | `ftshare.endpoints.us` | | 指数专题 | 10 | `ftshare.apis.index` | `ftshare.endpoints.index` | @@ -83,6 +83,7 @@ df = market.baidu_financial_calendar( | [`limit_up_pool_yesterday`](#api-limit-up-pool-yesterday) | 昨日涨停池 | `GET` | `api/v1/market/data/limit-up-pool-yesterday` | - | `昨日涨停池.md` | | [`margin_trading_details`](#api-margin-trading-details) | 融资融券明细 | `GET` | `api/v1/market/data/margin-trading-details` | `date`, `page`, `page_size` | `融资融券明细.md` | | [`margin_trading_details_paginated`](#api-margin-trading-details-paginated) | 融资融券明细分页 | `GET` | `api/v1/market/data/margin-trading-details` | `date`, `page`, `page_size` | `融资融券明细分页.md` | +| [`namechange`](#api-namechange) | 股票曾用名 | `GET` | `api/v1/market/data/namechange` | `trade_code`, `start_date`, `end_date` | `股票曾用名.md` | | [`northbound`](#api-northbound) | 北向资金交易 | `GET` | `api/v1/market/data/northbound` | `date` | `北向资金交易.md` | | [`nth_trade_date`](#api-nth-trade-date) | 第N个交易日 | `GET` | `api/v1/market/data/time/get-nth-trade-date` | `n` | `第N个交易日.md` | | [`performance_forecasts_paginated`](#api-performance-forecasts-paginated) | 业绩预告 | `GET` | `api/v1/market/data/finance/stock-performance-forecast` | `stock_code`, `year`, `report_type`, `page`, `page_size` | `业绩预告.md` | @@ -93,8 +94,13 @@ df = market.baidu_financial_calendar( | [`sh_hk_stock_connect_members`](#api-sh-hk-stock-connect-members) | 沪股通成份 | `GET` | `api/v1/market/data/sh-hk-stock-connect-members` | - | `沪股通成份.md` | | [`southbound`](#api-southbound) | 南向资金交易 | `GET` | `api/v1/market/data/southbound` | `date` | `南向资金交易.md` | | [`stk_ah_comparison`](#api-stk-ah-comparison) | AH股对比 | `GET` | `api/v1/market/data/hk/stk-ah-comparison` | `hk_code`, `ts_code`, `trade_date`, `start_date`, `end_date`, `page`, `page_size` | `AH股对比.md` | +| [`stk_code_change`](#api-stk-code-change) | A股代码变更 | `GET` | `api/v1/market/data/stk-code-change` | `trade_code`, `start_date`, `end_date` | `A股代码变更.md` | | [`stk_limit`](#api-stk-limit) | 涨跌停价 | `GET` | `api/v1/market/data/stk-limit` | `instrument_type`, `symbol`, `symbol_id`, `market_id`, `trade_date`, `start_date`, `end_date`, `page`, `page_size` | `涨跌停价.md` | +| [`stk_manager_hold`](#api-stk-manager-hold) | 上市公司管理层持股 | `GET` | `api/v1/market/data/stk-manager-hold` | `trade_code`, `end_date` | `上市公司管理层持股.md` | +| [`stk_manager_pay`](#api-stk-manager-pay) | 上市公司管理层薪酬 | `GET` | `api/v1/market/data/stk-manager-pay` | `trade_code`, `end_date` | `上市公司管理层薪酬.md` | +| [`stk_managers`](#api-stk-managers) | 上市公司管理层 | `GET` | `api/v1/market/data/stk-managers` | `trade_code`, `candi_date`, `begin_date`, `end_date` | `上市公司管理层.md` | | [`stk_premarket`](#api-stk-premarket) | 盘前数据 | `GET` | `api/v1/market/data/stk-premarket` | `ts_code`, `trade_date`, `start_date`, `end_date`, `page`, `page_size` | `盘前数据.md` | +| [`stk_status_change`](#api-stk-status-change) | A股状态变更 | `GET` | `api/v1/market/data/stk-status-change` | `trade_code`, `change_date`, `change_type` | `A股状态变更.md` | | [`stock_adjust_factor`](#api-stock-adjust-factor) | 股票复权因子 | `GET` | `api/v1/market/data/stock-adjust-factor` | `symbol`, `trade_date`, `start_date`, `end_date`, `offset`, `limit` | `股票复权因子.md` | | [`stock_candlesticks`](#api-stock-candlesticks) | 股票K线 | `POST` | `api/v1/market/data/stock-candlesticks` | `symbol`, `interval_unit`, `interval_value`, `adjust_kind`, `since_ts_millis`, `until_ts_millis`, `limit` | `股票K线.md` | | [`stock_candlesticks_batch`](#api-stock-candlesticks-batch) | 批量股票K线 | `POST` | `api/v1/market/data/stock-candlesticks/batch` | `symbols`, `interval_unit`, `interval_value`, `adjust_kind`, `since_ts_millis`, `until_ts_millis`, `limit` | `批量股票K线.md` | @@ -1479,6 +1485,37 @@ Returns: payloads when multi-page fetching is used with ``raw=True``. ``` +

namechange

+ +- 接口名称:股票曾用名 +- HTTP:`GET` +- Path:`api/v1/market/data/namechange` +- 参数:`trade_code`, `start_date`, `end_date` +- 来源文档:`股票曾用名.md` +- 原始接口:`get_namechange` + +```text +股票曾用名. + +Endpoint: ``api/v1/market/data/namechange``. +Method: ``GET``. +Documented endpoint: ``get_namechange``. + +Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y). + start_date: 过滤区间起始日期,``YYYYMMDD`` 格式 (type: string; required: N). + end_date: 过滤区间结束日期,``YYYYMMDD`` 格式;与 ``start_date`` 同时提供时须 ``start_date`` ≤ ``end_date`` (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + +Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. +``` +

nth_trade_date

- 接口名称:第N个交易日 @@ -1759,6 +1796,37 @@ Returns: payloads when multi-page fetching is used with ``raw=True``. ``` +

stk_code_change

+ +- 接口名称:A股代码变更 +- HTTP:`GET` +- Path:`api/v1/market/data/stk-code-change` +- 参数:`trade_code`, `start_date`, `end_date` +- 来源文档:`A股代码变更.md` +- 原始接口:`get_stk_code_change` + +```text +A股代码变更. + +Endpoint: ``api/v1/market/data/stk-code-change``. +Method: ``GET``. +Documented endpoint: ``get_stk_code_change``. + +Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y). + start_date: 过滤区间起始日期,``YYYYMMDD`` 格式 (type: string; required: N). + end_date: 过滤区间结束日期,``YYYYMMDD`` 格式;与 ``start_date`` 同时提供时须 ``start_date`` ≤ ``end_date`` (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + +Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. +``` +

stk_limit

- 接口名称:涨跌停价 @@ -1799,6 +1867,98 @@ Returns: payloads when multi-page fetching is used with ``raw=True``. ``` +

stk_manager_hold

+ +- 接口名称:上市公司管理层持股 +- HTTP:`GET` +- Path:`api/v1/market/data/stk-manager-hold` +- 参数:`trade_code`, `end_date` +- 来源文档:`上市公司管理层持股.md` +- 原始接口:`get_stk_manager_hold` + +```text +上市公司管理层持股. + +Endpoint: ``api/v1/market/data/stk-manager-hold``. +Method: ``GET``. +Documented endpoint: ``get_stk_manager_hold``. + +Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y). + end_date: 截止日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + +Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. +``` + +

stk_manager_pay

+ +- 接口名称:上市公司管理层薪酬 +- HTTP:`GET` +- Path:`api/v1/market/data/stk-manager-pay` +- 参数:`trade_code`, `end_date` +- 来源文档:`上市公司管理层薪酬.md` +- 原始接口:`get_stk_manager_pay` + +```text +上市公司管理层薪酬. + +Endpoint: ``api/v1/market/data/stk-manager-pay``. +Method: ``GET``. +Documented endpoint: ``get_stk_manager_pay``. + +Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y). + end_date: 截止日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + +Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. +``` + +

stk_managers

+ +- 接口名称:上市公司管理层 +- HTTP:`GET` +- Path:`api/v1/market/data/stk-managers` +- 参数:`trade_code`, `candi_date`, `begin_date`, `end_date` +- 来源文档:`上市公司管理层.md` +- 原始接口:`get_stk_managers` + +```text +上市公司管理层. + +Endpoint: ``api/v1/market/data/stk-managers``. +Method: ``GET``. +Documented endpoint: ``get_stk_managers``. + +Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y). + candi_date: 候选日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N). + begin_date: 任职起始日过滤,``YYYYMMDD`` 格式 (type: string; required: N). + end_date: 任职截止日过滤,``YYYYMMDD`` 格式;与 ``begin_date`` 同时提供时须 ``begin_date`` ≤ ``end_date`` (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + +Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. +``` +

stk_premarket

- 接口名称:盘前数据 @@ -1836,6 +1996,37 @@ Returns: payloads when multi-page fetching is used with ``raw=True``. ``` +

stk_status_change

+ +- 接口名称:A股状态变更 +- HTTP:`GET` +- Path:`api/v1/market/data/stk-status-change` +- 参数:`trade_code`, `change_date`, `change_type` +- 来源文档:`A股状态变更.md` +- 原始接口:`get_stk_status_change` + +```text +A股状态变更. + +Endpoint: ``api/v1/market/data/stk-status-change``. +Method: ``GET``. +Documented endpoint: ``get_stk_status_change``. + +Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个;不填表示不按代码过滤 (type: string; required: N). + change_date: 变更日期,精确过滤,``YYYYMMDD`` 格式 (type: string; required: N). + change_type: 变更类型,精确过滤,常见值如 ``上市``、``退市``、``暂停上市`` (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + +Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. +``` +

stock_adjust_factor

- 接口名称:股票复权因子 diff --git a/src/ftshare/apis/stock.py b/src/ftshare/apis/stock.py index cb3b0d5..536ecba 100644 --- a/src/ftshare/apis/stock.py +++ b/src/ftshare/apis/stock.py @@ -1865,6 +1865,47 @@ def northbound( **request_params, ) + def namechange( + self, + trade_code: Any | None = None, + start_date: Any | None = None, + end_date: Any | None = None, + *, + raw: bool = False, + fields: Sequence[str] | str | None = None, + as_dataframe: bool = True, + **kwargs: Any, + ) -> Any: + """股票曾用名. + + Endpoint: ``api/v1/market/data/namechange``. + Method: ``GET``. + Documented endpoint: ``get_namechange``. + + Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y). + start_date: 过滤区间起始日期,``YYYYMMDD`` 格式 (type: string; required: N). + end_date: 过滤区间结束日期,``YYYYMMDD`` 格式;与 ``start_date`` 同时提供时须 ``start_date`` ≤ ``end_date`` (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + + Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. + """ + request_params = {'trade_code': trade_code, 'start_date': start_date, 'end_date': end_date} + request_params.update(kwargs) + return self._call_endpoint( + 'namechange', + raw=raw, + fields=fields, + as_dataframe=as_dataframe, + **request_params, + ) + def nth_trade_date( self, n: Any | None = None, @@ -3035,6 +3076,47 @@ def risk_warning_stocks( **request_params, ) + def stk_code_change( + self, + trade_code: Any | None = None, + start_date: Any | None = None, + end_date: Any | None = None, + *, + raw: bool = False, + fields: Sequence[str] | str | None = None, + as_dataframe: bool = True, + **kwargs: Any, + ) -> Any: + """A股代码变更. + + Endpoint: ``api/v1/market/data/stk-code-change``. + Method: ``GET``. + Documented endpoint: ``get_stk_code_change``. + + Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y). + start_date: 过滤区间起始日期,``YYYYMMDD`` 格式 (type: string; required: N). + end_date: 过滤区间结束日期,``YYYYMMDD`` 格式;与 ``start_date`` 同时提供时须 ``start_date`` ≤ ``end_date`` (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + + Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. + """ + request_params = {'trade_code': trade_code, 'start_date': start_date, 'end_date': end_date} + request_params.update(kwargs) + return self._call_endpoint( + 'stk_code_change', + raw=raw, + fields=fields, + as_dataframe=as_dataframe, + **request_params, + ) + def stk_limit( self, instrument_type: Any | None = None, @@ -3101,6 +3183,127 @@ def stk_limit( **request_params, ) + def stk_manager_hold( + self, + trade_code: Any | None = None, + end_date: Any | None = None, + *, + raw: bool = False, + fields: Sequence[str] | str | None = None, + as_dataframe: bool = True, + **kwargs: Any, + ) -> Any: + """上市公司管理层持股. + + Endpoint: ``api/v1/market/data/stk-manager-hold``. + Method: ``GET``. + Documented endpoint: ``get_stk_manager_hold``. + + Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y). + end_date: 截止日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + + Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. + """ + request_params = {'trade_code': trade_code, 'end_date': end_date} + request_params.update(kwargs) + return self._call_endpoint( + 'stk_manager_hold', + raw=raw, + fields=fields, + as_dataframe=as_dataframe, + **request_params, + ) + + def stk_manager_pay( + self, + trade_code: Any | None = None, + end_date: Any | None = None, + *, + raw: bool = False, + fields: Sequence[str] | str | None = None, + as_dataframe: bool = True, + **kwargs: Any, + ) -> Any: + """上市公司管理层薪酬. + + Endpoint: ``api/v1/market/data/stk-manager-pay``. + Method: ``GET``. + Documented endpoint: ``get_stk_manager_pay``. + + Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y). + end_date: 截止日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + + Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. + """ + request_params = {'trade_code': trade_code, 'end_date': end_date} + request_params.update(kwargs) + return self._call_endpoint( + 'stk_manager_pay', + raw=raw, + fields=fields, + as_dataframe=as_dataframe, + **request_params, + ) + + def stk_managers( + self, + trade_code: Any | None = None, + candi_date: Any | None = None, + begin_date: Any | None = None, + end_date: Any | None = None, + *, + raw: bool = False, + fields: Sequence[str] | str | None = None, + as_dataframe: bool = True, + **kwargs: Any, + ) -> Any: + """上市公司管理层. + + Endpoint: ``api/v1/market/data/stk-managers``. + Method: ``GET``. + Documented endpoint: ``get_stk_managers``. + + Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个 (type: string; required: Y). + candi_date: 候选日期,精确匹配,``YYYYMMDD`` 格式 (type: string; required: N). + begin_date: 任职起始日过滤,``YYYYMMDD`` 格式 (type: string; required: N). + end_date: 任职截止日过滤,``YYYYMMDD`` 格式;与 ``begin_date`` 同时提供时须 ``begin_date`` ≤ ``end_date`` (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + + Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. + """ + request_params = {'trade_code': trade_code, 'candi_date': candi_date, 'begin_date': begin_date, 'end_date': end_date} + request_params.update(kwargs) + return self._call_endpoint( + 'stk_managers', + raw=raw, + fields=fields, + as_dataframe=as_dataframe, + **request_params, + ) + def stk_premarket( self, ts_code: Any | None = None, @@ -3161,6 +3364,47 @@ def stk_premarket( **request_params, ) + def stk_status_change( + self, + trade_code: Any | None = None, + change_date: Any | None = None, + change_type: Any | None = None, + *, + raw: bool = False, + fields: Sequence[str] | str | None = None, + as_dataframe: bool = True, + **kwargs: Any, + ) -> Any: + """A股状态变更. + + Endpoint: ``api/v1/market/data/stk-status-change``. + Method: ``GET``. + Documented endpoint: ``get_stk_status_change``. + + Args: + trade_code: 股票代码(带 .SZ/.SH 后缀),支持逗号分隔多个;不填表示不按代码过滤 (type: string; required: N). + change_date: 变更日期,精确过滤,``YYYYMMDD`` 格式 (type: string; required: N). + change_type: 变更类型,精确过滤,常见值如 ``上市``、``退市``、``暂停上市`` (type: string; required: N). + raw: Return the decoded JSON payload without tabular extraction. + fields: Optional field list or comma-separated field string applied after extraction. + as_dataframe: Return a pandas ``DataFrame`` by default; set to ``False`` for Python rows. + **kwargs: Extra request parameters forwarded unchanged. Useful when the service adds parameters before the SDK is regenerated. + + Returns: + A pandas ``DataFrame`` by default, Python rows when + ``as_dataframe=False``, raw JSON when ``raw=True``, or raw page + payloads when multi-page fetching is used with ``raw=True``. + """ + request_params = {'trade_code': trade_code, 'change_date': change_date, 'change_type': change_type} + request_params.update(kwargs) + return self._call_endpoint( + 'stk_status_change', + raw=raw, + fields=fields, + as_dataframe=as_dataframe, + **request_params, + ) + def stock_adjust_factor( self, symbol: Any | None = None, diff --git a/src/ftshare/endpoints/stock.py b/src/ftshare/endpoints/stock.py index c744224..3b47e02 100644 --- a/src/ftshare/endpoints/stock.py +++ b/src/ftshare/endpoints/stock.py @@ -256,6 +256,13 @@ 'original_api': 'northbound', 'params': ('date',), }, + 'namechange': { + 'path': 'api/v1/market/data/namechange', + 'title': '股票曾用名', + 'doc_file': '股票曾用名.md', + 'original_api': 'get_namechange', + 'params': ('trade_code', 'start_date', 'end_date'), + }, 'nth_trade_date': { 'path': 'api/v1/market/data/time/get-nth-trade-date', 'title': '第N个交易日', @@ -320,6 +327,13 @@ 'params': ('hk_code', 'ts_code', 'trade_date', 'start_date', 'end_date', 'page', 'page_size'), 'max_page_size': 1000, }, + 'stk_code_change': { + 'path': 'api/v1/market/data/stk-code-change', + 'title': 'A股代码变更', + 'doc_file': 'A股代码变更.md', + 'original_api': 'get_stk_code_change', + 'params': ('trade_code', 'start_date', 'end_date'), + }, 'stk_limit': { 'path': 'api/v1/market/data/stk-limit', 'title': '涨跌停价', @@ -328,6 +342,27 @@ 'params': ('instrument_type', 'symbol', 'symbol_id', 'market_id', 'trade_date', 'start_date', 'end_date', 'page', 'page_size'), 'max_page_size': 500, }, + 'stk_manager_hold': { + 'path': 'api/v1/market/data/stk-manager-hold', + 'title': '上市公司管理层持股', + 'doc_file': '上市公司管理层持股.md', + 'original_api': 'get_stk_manager_hold', + 'params': ('trade_code', 'end_date'), + }, + 'stk_manager_pay': { + 'path': 'api/v1/market/data/stk-manager-pay', + 'title': '上市公司管理层薪酬', + 'doc_file': '上市公司管理层薪酬.md', + 'original_api': 'get_stk_manager_pay', + 'params': ('trade_code', 'end_date'), + }, + 'stk_managers': { + 'path': 'api/v1/market/data/stk-managers', + 'title': '上市公司管理层', + 'doc_file': '上市公司管理层.md', + 'original_api': 'get_stk_managers', + 'params': ('trade_code', 'candi_date', 'begin_date', 'end_date'), + }, 'stk_premarket': { 'path': 'api/v1/market/data/stk-premarket', 'title': '盘前数据', @@ -336,6 +371,13 @@ 'params': ('ts_code', 'trade_date', 'start_date', 'end_date', 'page', 'page_size'), 'max_page_size': 500, }, + 'stk_status_change': { + 'path': 'api/v1/market/data/stk-status-change', + 'title': 'A股状态变更', + 'doc_file': 'A股状态变更.md', + 'original_api': 'get_stk_status_change', + 'params': ('trade_code', 'change_date', 'change_type'), + }, 'stock_adjust_factor': { 'path': 'api/v1/market/data/stock-adjust-factor', 'title': '股票复权因子', diff --git a/tests/endpoint_cases.py b/tests/endpoint_cases.py index b31e2dc..241f032 100644 --- a/tests/endpoint_cases.py +++ b/tests/endpoint_cases.py @@ -7,11 +7,15 @@ "adjust": "Forward", "adjust_kind": "Forward", "base_date": "2026-07-17", + "begin_date": "20260101", "board": "all", "board_code": "BK001", "cal-type": "1Y", + "candi_date": "20260101", "category": "经济", + "change_date": "20260101", "change_direction": "increase", + "change_type": "上市", "charge_type": "日常申购费", "classify_std": "证监会行业分类", "client_type": "一般", diff --git a/tests/test_client.py b/tests/test_client.py index 83bbda5..ba65803 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1014,3 +1014,76 @@ def test_fund_index_fund_array_response(): assert session.calls[0]["url"] == "https://market.ft.tech/gateway/api/v1/market/data/fund/index-fund" assert session.calls[0]["params"] == {"index_code": "000300", "scope": "etf"} + + +@pytest.mark.parametrize( + ("method_name", "kwargs", "expected_path", "expected_params"), + [ + ( + "namechange", + {"trade_code": "600848.SH", "start_date": "20200101", "end_date": "20241231"}, + "api/v1/market/data/namechange", + {"trade_code": "600848.SH", "start_date": "20200101", "end_date": "20241231"}, + ), + ( + "stk_code_change", + {"trade_code": "001872.SZ,601360.SH", "start_date": "20180101"}, + "api/v1/market/data/stk-code-change", + {"trade_code": "001872.SZ,601360.SH", "start_date": "20180101"}, + ), + ( + "stk_status_change", + {"trade_code": "600848.SH", "change_type": "上市"}, + "api/v1/market/data/stk-status-change", + {"trade_code": "600848.SH", "change_type": "上市"}, + ), + ( + "stk_managers", + {"trade_code": "600848.SH,000001.SZ", "begin_date": "20200101", "end_date": "20241231"}, + "api/v1/market/data/stk-managers", + {"trade_code": "600848.SH,000001.SZ", "begin_date": "20200101", "end_date": "20241231"}, + ), + ( + "stk_manager_hold", + {"trade_code": "600848.SH", "end_date": "20241231"}, + "api/v1/market/data/stk-manager-hold", + {"trade_code": "600848.SH", "end_date": "20241231"}, + ), + ( + "stk_manager_pay", + {"trade_code": "600848.SH", "end_date": "20241231"}, + "api/v1/market/data/stk-manager-pay", + {"trade_code": "600848.SH", "end_date": "20241231"}, + ), + ], +) +def test_a_share_reference_endpoints_map_to_expected_paths( + method_name, kwargs, expected_path, expected_params +): + session = FakeSession([FakeResponse(payload={"items": []})]) + client = FtshareClient(session=session) + + getattr(client, method_name)(**kwargs) + + assert session.calls[0]["url"] == "https://market.ft.tech/gateway/" + expected_path + assert session.calls[0]["params"] == expected_params + + +def test_a_share_reference_endpoints_raw_returns_full_payload(): + payload = [ + {"trade_code": "001872.SZ", "code": "1872", "name": "招商港口", "start_date": "20181226", "end_date": None}, + ] + session = FakeSession([FakeResponse(payload=payload)]) + client = FtshareClient(session=session) + + assert client.stk_code_change(trade_code="001872.SZ", raw=True) == payload + + +def test_a_share_status_change_omits_none_params(): + session = FakeSession([FakeResponse(payload={"items": []})]) + client = FtshareClient(session=session) + + client.stk_status_change() + + assert session.calls[0]["url"] == "https://market.ft.tech/gateway/api/v1/market/data/stk-status-change" + assert session.calls[0]["params"] == {} diff --git a/tests/test_endpoint_contracts.py b/tests/test_endpoint_contracts.py index 302eaed..5c87b66 100644 --- a/tests/test_endpoint_contracts.py +++ b/tests/test_endpoint_contracts.py @@ -52,7 +52,7 @@ def _response_payload(name: str) -> Any: def test_contract_cases_cover_all_public_sdk_methods(): - assert len(PUBLIC_CONTRACTS) == 196 + assert len(PUBLIC_CONTRACTS) == 202 assert PUBLIC_CONTRACTS | NON_PUBLISHED_ENDPOINTS == set(ENDPOINTS) assert not (PUBLIC_CONTRACTS & NON_PUBLISHED_ENDPOINTS)