80 lines
2.7 KiB
Python
80 lines
2.7 KiB
Python
|
|
"""
|
|||
|
|
调试巨潮API - 使用orgId精确查询
|
|||
|
|
"""
|
|||
|
|
import asyncio
|
|||
|
|
import httpx
|
|||
|
|
|
|||
|
|
async def debug_api():
|
|||
|
|
print("=" * 60)
|
|||
|
|
print("调试巨潮API - 使用orgId精确查询")
|
|||
|
|
print("=" * 60)
|
|||
|
|
|
|||
|
|
headers = {
|
|||
|
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
|
|||
|
|
"Accept": "application/json, text/javascript, */*; q=0.01",
|
|||
|
|
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
|||
|
|
"Origin": "https://www.cninfo.com.cn",
|
|||
|
|
"Referer": "https://www.cninfo.com.cn/new/disclosure",
|
|||
|
|
"X-Requested-With": "XMLHttpRequest",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
stock_code = "300622"
|
|||
|
|
|
|||
|
|
# 第一步:搜索获取orgId
|
|||
|
|
print(f"\n1. 搜索 {stock_code} 获取orgId...")
|
|||
|
|
search_url = "https://www.cninfo.com.cn/new/information/topSearch/query"
|
|||
|
|
search_data = {"keyWord": stock_code, "maxNum": 5}
|
|||
|
|
|
|||
|
|
org_id = None
|
|||
|
|
async with httpx.AsyncClient(timeout=30.0, verify=False) as client:
|
|||
|
|
response = await client.post(search_url, data=search_data, headers=headers)
|
|||
|
|
if response.status_code == 200:
|
|||
|
|
results = response.json()
|
|||
|
|
for item in results:
|
|||
|
|
if item.get("code") == stock_code:
|
|||
|
|
org_id = item.get("orgId")
|
|||
|
|
print(f" 找到 orgId: {org_id}")
|
|||
|
|
print(f" 公司简称: {item.get('zwjc')}")
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
if not org_id:
|
|||
|
|
print(" 未找到orgId")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# 第二步:使用orgId查询公告
|
|||
|
|
print(f"\n2. 使用 orgId={org_id} 查询年报...")
|
|||
|
|
api_url = "https://www.cninfo.com.cn/new/hisAnnouncement/query"
|
|||
|
|
|
|||
|
|
form_data = {
|
|||
|
|
"pageNum": "1",
|
|||
|
|
"pageSize": "30",
|
|||
|
|
"column": "szse",
|
|||
|
|
"tabName": "fulltext",
|
|||
|
|
"plate": "",
|
|||
|
|
"stock": f"{stock_code},{org_id}", # 使用 "代码,orgId" 格式
|
|||
|
|
"searchkey": "",
|
|||
|
|
"secid": "",
|
|||
|
|
"category": "category_ndbg_szsh",
|
|||
|
|
"trade": "",
|
|||
|
|
"seDate": "",
|
|||
|
|
"sortName": "",
|
|||
|
|
"sortType": "",
|
|||
|
|
"isHLtitle": "true"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
async with httpx.AsyncClient(timeout=30.0, verify=False) as client:
|
|||
|
|
response = await client.post(api_url, data=form_data, headers=headers)
|
|||
|
|
if response.status_code == 200:
|
|||
|
|
data = response.json()
|
|||
|
|
announcements = data.get("announcements", [])
|
|||
|
|
print(f" 返回 {len(announcements)} 条记录")
|
|||
|
|
|
|||
|
|
for ann in announcements[:5]:
|
|||
|
|
sec_code = ann.get("secCode", "")
|
|||
|
|
sec_name = ann.get("secName", "")
|
|||
|
|
title = ann.get("announcementTitle", "")
|
|||
|
|
print(f" [{sec_code}] {sec_name}: {title[:40]}")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
asyncio.run(debug_api())
|