Skip to content

Commit ad0eabe

Browse files
committed
feat:适配股票基础信息接口调整。
1 parent 95e7644 commit ad0eabe

4 files changed

Lines changed: 72 additions & 13 deletions

File tree

‎docs/API_REFERENCE.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
| [`stock_comment_score_em`](#api-stock-comment-score-em) | 千股千评评分 | `GET` | `api/v1/market/data/stock-comment/score` | `symbol` | `千股千评评分.md` |
103103
| [`stock_connect_members`](#api-stock-connect-members) | 互联互通成份 | `GET` | `api/v1/market/data/stock-connect-members` | `direction`, `channel`, `page`, `page_size` | `互联互通成份.md` |
104104
| [`stock_daec_stocks`](#api-stock-daec-stocks) | A股行情列表 | `GET` | `api/v1/market/data/daec/stocks/{board}` | `board`, `page`, `page_size`, `filter`, `order_by` | `A股行情列表.md` |
105-
| [`stock_description_all`](#api-stock-description-all) | 股票基础信息 | `GET` | `api/v1/market/data/stock-description-all` | - | `股票基础信息.md` |
105+
| [`stock_description`](#api-stock-description) | 股票基础信息 | `GET` | `api/v1/market/data/stock-description` | `symbol_id`, `page`, `page_size` | `股票基础信息.md` |
106106
| [`stock_dividends`](#api-stock-dividends) | 股票分红记录 | `GET` | `api/v1/market/data/stock-dividends` | `symbol`, `since_date`, `until_date`, `page`, `page_size` | `股票分红记录.md` |
107107
| [`stock_filter`](#api-stock-filter) | 股票筛选 | `GET` | `api/v2/market/data/stock-list/filter` | `symbol`, `board`, `listing_date_since`, `page`, `page_size` | `股票筛选.md` |
108108
| [`stock_float_holders`](#api-stock-float-holders) | 十大流通股东 | `GET` | `api/v1/market/data/holder/stock-holder-ften` | `stock_code`, `is_last`, `page`, `page_size` | `十大流通股东.md` |
@@ -2068,14 +2068,14 @@ Returns:
20682068
payloads when multi-page fetching is used with ``raw=True``.
20692069
```
20702070

2071-
<h4 id="api-stock-description-all"><code>stock_description_all</code></h4>
2071+
<h4 id="api-stock-description"><code>stock_description</code></h4>
20722072

20732073
- 接口名称:股票基础信息
20742074
- HTTP:`GET`
2075-
- Path:`api/v1/market/data/stock-description-all`
2076-
- 参数:-
2075+
- Path:`api/v1/market/data/stock-description`
2076+
- 参数:`symbol_id`, `page`, `page_size`
20772077
- 来源文档:`股票基础信息.md`
2078-
- 原始接口:`stock_description_all`
2078+
- 原始接口:`stock_description`
20792079

20802080
```text
20812081
股票基础信息.

‎src/ftshare/apis/stock.py‎

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3707,11 +3707,41 @@ def stock_unlock(
37073707
as_dataframe=as_dataframe,
37083708
**request_params,
37093709
)
3710-
def stock_description_all(self, page: int | None = None, page_size: int | None = None, *, raw: bool = False, fields: Sequence[str] | str | None = None, as_dataframe: bool = True, **kwargs: Any) -> Any:
3711-
"""股票基础信息."""
3712-
params = {'page': page, 'page_size': page_size}
3710+
def stock_description(
3711+
self,
3712+
symbol_id: Any | None = None,
3713+
page: int | None = None,
3714+
page_size: int | None = None,
3715+
limit: int | None = None,
3716+
all_pages: bool = False,
3717+
max_pages: int | None = None,
3718+
*,
3719+
raw: bool = False,
3720+
fields: Sequence[str] | str | None = None,
3721+
as_dataframe: bool = True,
3722+
**kwargs: Any,
3723+
) -> Any:
3724+
"""股票基础信息.
3725+
3726+
Endpoint: ``api/v1/market/data/stock-description``.
3727+
Method: ``GET``.
3728+
Documented endpoint: ``stock_description``.
3729+
"""
3730+
params = {'symbol_id': symbol_id}
37133731
params.update(kwargs)
3714-
return self._call_endpoint('stock_description_all', raw=raw, fields=fields, as_dataframe=as_dataframe, **params)
3732+
return self.get_paginated(
3733+
ENDPOINTS['stock_description'].path,
3734+
page=page,
3735+
page_size=page_size,
3736+
limit=limit,
3737+
all_pages=all_pages,
3738+
max_pages=max_pages,
3739+
max_page_size=ENDPOINTS['stock_description'].max_page_size,
3740+
raw=raw,
3741+
fields=fields,
3742+
as_dataframe=as_dataframe,
3743+
**params,
3744+
)
37153745

37163746

37173747
def tdx_board_index(self, ts_code: Any | None = None, idx_name: Any | None = None, idx_type: Any | None = None, idx_type_code: Any | None = None, market: Any | None = None, page: int | None = None, page_size: int | None = None, *, raw: bool = False, fields: Sequence[str] | str | None = None, as_dataframe: bool = True, **kwargs: Any) -> Any:

‎src/ftshare/endpoints/stock.py‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -546,11 +546,13 @@
546546
'original_api': 'get_yzxdr_detail',
547547
'params': ('year', 'quarter', 'stock_code', 'page', 'page_size'),
548548
},
549-
'stock_description_all': {
550-
'path': 'api/v1/market/data/stock-description-all',
549+
'stock_description': {
550+
'path': 'api/v1/market/data/stock-description',
551551
'title': '股票基础信息',
552552
'doc_file': '股票基础信息.md',
553-
'original_api': 'stock_description_all',
553+
'original_api': 'stock_description',
554+
'params': ('symbol_id', 'page', 'page_size'),
555+
'max_page_size': 200,
554556
},
555557

556558
'tdx_board_index': {

‎tests/test_client.py‎

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,34 @@ def test_new_batch_endpoints_forward_symbols_and_documented_parameters():
288288
assert session.calls[0]["params"] == kwargs
289289

290290

291-
def test_new_paginated_endpoints_use_documented_page_size_limits():
291+
def test_stock_description_uses_paginated_route_and_filters():
292+
session = FakeSession([FakeResponse(payload=paginated_records([{"symbol": "600000.SH"}]))])
293+
client = FtshareClient(session=session)
294+
295+
rows = client.stock_description(
296+
symbol_id="600000.SH",
297+
page=1,
298+
page_size=1,
299+
as_dataframe=False,
300+
)
301+
302+
assert rows == [{"symbol": "600000.SH"}]
303+
assert session.calls[0]["url"] == "https://market.ft.tech/gateway/api/v1/market/data/stock-description"
304+
assert session.calls[0]["params"] == {
305+
"symbol_id": "600000.SH",
306+
"page": 1,
307+
"page_size": 1,
308+
}
309+
310+
311+
def test_stock_description_rejects_page_size_above_200():
312+
client = FtshareClient(session=FakeSession([]))
313+
314+
with pytest.raises(ValueError, match="page_size must be between 1 and 200"):
315+
client.stock_description(page_size=201)
316+
317+
318+
292319
session = FakeSession([FakeResponse(payload=paginated_records([]))] * 2)
293320
client = FtshareClient(session=session)
294321

0 commit comments

Comments
 (0)