Files
MoFin/venv/lib/python3.12/site-packages/akshare/bond/bond_info_cm.py
T
知微 fa45d8aa5f fix: 小果地址统一node122(兼容LAN+EasyTier)
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
  Privoxy对node122:18003返回500,直连正常
2026-06-30 02:56:35 +08:00

232 lines
7.9 KiB
Python

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Date: 2024/5/10 14:00
Desc: 中国外汇交易中心暨全国银行间同业拆借中心
https://www.chinamoney.com.cn/chinese/scsjzqxx/
"""
import functools
import pandas as pd
import requests
from akshare.bond.bond_china import bond_china_close_return_map
from akshare.utils.tqdm import get_tqdm
@functools.lru_cache()
def bond_info_cm_query(symbol: str = "评级等级") -> pd.DataFrame:
"""
中国外汇交易中心暨全国银行间同业拆借中心-查询相关指标的参数
https://www.chinamoney.com.cn/chinese/scsjzqxx/
:param symbol: choice of {"主承销商", "债券类型", "息票类型", "发行年份", "评级等级"}
:type symbol: str
:return: 查询相关指标的参数
:rtype: pandas.DataFrame
"""
bond_china_close_return_map()
if symbol == "主承销商":
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/EntyFullNameSearchCondition"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/109.0.0.0 Safari/537.36"
}
r = requests.post(url, headers=headers)
data_json = r.json()
temp_df = pd.DataFrame(data_json["data"]["enty"])
temp_df.columns = ["code", "name"]
temp_df = temp_df[["name", "code"]]
return temp_df
else:
symbol_map = {
"债券类型": "bondType",
"息票类型": "couponType",
"发行年份": "issueYear",
"评级等级": "bondRtngShrt",
}
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondBaseInfoSearchCondition"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/109.0.0.0 Safari/537.36"
}
r = requests.post(url, headers=headers)
data_json = r.json()
temp_df = pd.DataFrame(data_json["data"][f"{symbol_map[symbol]}"])
if temp_df.shape[1] == 1:
temp_df.columns = ["name"]
temp_df["code"] = temp_df["name"]
temp_df.columns = ["code", "name"]
temp_df = temp_df[["name", "code"]]
return temp_df
@functools.lru_cache()
def bond_info_cm(
bond_name: str = "",
bond_code: str = "",
bond_issue: str = "",
bond_type: str = "",
coupon_type: str = "",
issue_year: str = "",
underwriter: str = "",
grade: str = "",
) -> pd.DataFrame:
"""
中国外汇交易中心暨全国银行间同业拆借中心-数据-债券信息-信息查询
https://www.chinamoney.com.cn/chinese/scsjzqxx/
:param bond_name: 债券名称
:type bond_name: str
:param bond_code: 债券代码
:type bond_code: str
:param bond_issue: 发行人/受托机构
:type bond_issue: str
:param bond_type: 债券类型
:type bond_type: str
:param coupon_type: 息票类型
:type coupon_type: str
:param issue_year: 发行年份
:type issue_year: str
:param underwriter: 主承销商
:type underwriter: str
:param grade: 评级等级
:type grade: str
:return: 信息查询结果
:rtype: pandas.DataFrame
"""
bond_china_close_return_map()
if bond_type:
bond_type_df = bond_info_cm_query(symbol="债券类型")
bond_type_df_value = bond_type_df[bond_type_df["name"] == bond_type][
"code"
].values[0]
else:
bond_type_df_value = ""
if coupon_type:
coupon_type_df = bond_info_cm_query(symbol="息票类型")
coupon_type_df_value = coupon_type_df[coupon_type_df["name"] == coupon_type][
"code"
].values[0]
else:
coupon_type_df_value = ""
if underwriter:
underwriter_df = bond_info_cm_query(symbol="主承销商")
underwriter_value = underwriter_df[underwriter_df["name"] == underwriter][
"code"
].values[0]
else:
underwriter_value = ""
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondMarketInfoList2"
payload = {
"pageNo": "1",
"pageSize": "15",
"bondName": bond_name,
"bondCode": bond_code,
"issueEnty": bond_issue,
"bondType": bond_type_df_value if bond_type_df_value else "",
"bondSpclPrjctVrty": "",
"couponType": coupon_type_df_value if coupon_type_df_value else "",
"issueYear": issue_year,
"entyDefinedCode": underwriter_value if underwriter_value else "",
"rtngShrt": grade,
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/109.0.0.0 Safari/537.36"
}
r = requests.post(url, data=payload, headers=headers)
data_json = r.json()
total_page = data_json["data"]["pageTotal"]
big_df = pd.DataFrame()
tqdm = get_tqdm()
for page in tqdm(range(1, total_page + 1), leave=False):
payload.update({"pageNo": page})
r = requests.post(url, data=payload, headers=headers)
data_json = r.json()
temp_df = pd.DataFrame(data_json["data"]["resultList"])
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
big_df.rename(
columns={
"bondDefinedCode": "查询代码",
"bondName": "债券简称",
"bondCode": "债券代码",
"issueStartDate": "发行日期",
"issueEndDate": "-",
"bondTypeCode": "-",
"bondType": "债券类型",
"entyFullName": "发行人/受托机构",
"entyDefinedCode": "-",
"debtRtng": "最新债项评级",
"isin": "-",
"inptTp": "-",
},
inplace=True,
)
big_df = big_df[
[
"债券简称",
"债券代码",
"发行人/受托机构",
"债券类型",
"发行日期",
"最新债项评级",
"查询代码",
]
]
return big_df
@functools.lru_cache()
def bond_info_detail_cm(symbol: str = "淮安农商行CDSD2022021012") -> pd.DataFrame:
"""
中国外汇交易中心暨全国银行间同业拆借中心-数据-债券信息-信息查询-债券详情
https://www.chinamoney.com.cn/chinese/zqjc/?bondDefinedCode=egfjh08154
:param symbol: 债券简称
:type symbol: str
:return: 债券详情
:rtype: pandas.DataFrame
"""
bond_china_close_return_map()
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondDetailInfo"
inner_bond_info_cm_df = bond_info_cm(bond_name=symbol)
bond_code = inner_bond_info_cm_df["查询代码"].values[0]
payload = {"bondDefinedCode": bond_code}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/109.0.0.0 Safari/537.36",
"host": "www.chinamoney.com.cn",
"origin": "https://www.chinamoney.com.cn",
"referer": "https://www.chinamoney.com.cn/chinese/zqjc/?bondDefinedCode=egfjh08154",
}
r = requests.post(url, data=payload, headers=headers)
data_json = r.json()
data_dict = data_json["data"]["bondBaseInfo"]
if data_dict["creditRateEntyList"]:
del data_dict["creditRateEntyList"]
if data_dict["exerciseInfoList"]:
del data_dict["exerciseInfoList"]
temp_df = pd.DataFrame.from_dict(data_dict, orient="index")
temp_df.reset_index(inplace=True)
temp_df.columns = ["name", "value"]
return temp_df
if __name__ == "__main__":
bond_info_cm_df = bond_info_cm(
bond_name="",
bond_code="",
bond_issue="",
bond_type="短期融资券",
coupon_type="零息式",
issue_year="2019",
grade="A-1",
underwriter="重庆农村商业银行股份有限公司",
)
print(bond_info_cm_df)
bond_info_detail_cm_df = bond_info_detail_cm(symbol="19渝机电CP002")
print(bond_info_detail_cm_df)