fa45d8aa5f
- 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,直连正常
232 lines
7.9 KiB
Python
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)
|