ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

【零依赖量化数据实战 #32】沪深公司面补充:财务股东·股本·经营范围

【零依赖量化数据实战 #32】沪深公司面补充:财务股东·股本·经营范围 【零依赖量化数据实战 #32】沪深公司面补充财务股东·股本·经营范围系列《零依赖量化数据实战》零依赖 · 纯 GET · 不 import 任何 SDK适用想用 Python 补齐沪深公司面里还没覆盖的字段——流通股东、户均、上市天数、业绩预告、股本变化、经营范围——的量化爱好者不依赖任何行情终端。1. 你将得到什么6 个官方接口的最小可用封装分两组公司面剩余/hs/gs/*4带{股票代码}sszs上市天数、yjyg业绩预告、gdbh股本变化、jyfw经营范围。财务股东/hs/fin/*2带{股票代码}flowholder流通股东、hm户均持股户数/户均持股。一个对字段名不敏感的排名函数rank_by按候选键如流通市值/lt_mv/market_cap降序取前 N。2. 端点语义表GET https://api.zhituapi.com/hs/gs/sszs/000001.SZ?token你的token - 上市天数 GET https://api.zhituapi.com/hs/gs/yjyg/000001.SZ?token你的token - 业绩预告 GET https://api.zhituapi.com/hs/gs/gdbh/000001.SZ?token你的token - 股本变化 GET https://api.zhituapi.com/hs/gs/jyfw/000001.SZ?token你的token - 经营范围 GET https://api.zhituapi.com/hs/fin/flowholder/000001.SZ?token你的token - 流通股东 GET https://api.zhituapi.com/hs/fin/hm/000001.SZ?token你的token - 户均持股户数/户均持股鉴权token走查询参数{股票代码}是路径参数沪深代码带市场后缀如000001.SZ。3. 字段名不固定用候选键命中财务股东返回的「流通市值」可能叫流通市值/lt_mv/market_cap。统一候选键命中def_hit_key(d,keys):ifnotisinstance(d,dict):returnNoneforkinkeys:ifkindandd[k]isnotNone:returnd[k]low{str(x).lower():xforxind.keys()}forkinkeys:klk.lower()ifklinlow:returnd[low[kl]]returnNone4. 核心模板函数importsys,requests BASEhttps://api.zhituapi.comTOKEN你的token# 占位换成你申请的真实 tokendef_hit_key(d,keys):ifnotisinstance(d,dict):returnNoneforkinkeys:ifkindandd[k]isnotNone:returnd[k]low{str(x).lower():xforxind.keys()}forkinkeys:klk.lower()ifklinlow:returnd[low[kl]]returnNonedef_to_float(v):try:returnNoneifvisNoneelsefloat(v)except(TypeError,ValueError):returnNonedef_get(path,paramsNone):pdict(paramsor{})p[token]TOKENtry:rrequests.get(f{BASE}{path},paramsp,timeout10)exceptExceptionase:returnNone,f网络异常{e}ifr.status_code!200:returnNone,f{r.status_code}{r.text.strip()[:140]}try:returnr.json(),NoneexceptException:returnNone,f非 JSON{r.text.strip()[:140]}# 公司面剩余字段/hs/gs/*带 {股票代码}deffetch_gs(sub,code):return_get(f/hs/gs/{sub}/{code})# 财务股东/户均/hs/fin/*带 {股票代码}deffetch_fin(sub,code):return_get(f/hs/fin/{sub}/{code})defrank_by(rows,keys,descendingTrue,topnNone):ifnotisinstance(rows,list):returnrowsdefsc(x):return_to_float(_hit_key(x,keys))or0.0outsorted(rows,keysc,reversedescending)returnout[:topn]iftopnelseoutdefrun_check():# 合成数据仅逻辑校验非真实行情rows[{code:000001.SZ,流通市值:100.0},{code:600000.SH,lt_mv:300.0},{code:300750.SZ,market_cap:200.0},]toprank_by(rows,[流通市值,lt_mv,market_cap],topn2)assert[x[code]forxintop][600000.SH,300750.SZ],topforsubin(sszs,yjyg,gdbh,jyfw):assertsubin(sszs,yjyg,gdbh,jyfw)forsubin(flowholder,hm):assertsubin(flowholder,hm)print(校验通过)if__name____main__:iflen(sys.argv)1andsys.argv[1]--run_check:run_check()else:forsubin(sszs,yjyg,gdbh,jyfw):print(fgs.{sub}-,fetch_gs(sub,000001.SZ))forsubin(flowholder,hm):print(ffin.{sub}-,fetch_fin(sub,000001.SZ))跑通示例把上面的代码复制到本地填入你的 token 即可直接运行它会请求对应接口、拉取真实数据并输出归一化后的结构化字典各字段含义见前文各小节。6. 坑与注意事项102 不代表路径对404 102是「证书不存在」鉴权先于路由路径合法与否要靠客户端白名单自查。代码带市场后缀/hs/gs/*、/hs/fin/*的{股票代码}要带市场如000001.SZ。与 #27 互补不重叠本篇是/hs/gs/里未被 #27 覆盖的字段上市天数/业绩预告/股本变化/经营范围与/hs/fin/的流通股东/户均#27 已覆盖治理/分红/解禁/季度利润现金流。字段名中英文混用「流通市值」可能叫流通市值/lt_mv/market_cap务必候选键命中。7. 小结与下篇预告本篇把「沪深公司面补充字段」拧成了 6 个零依赖接口的最小封装重点解决了代码带市场后缀、与 #27 互补不重叠两个坑配rank_by候选键排名即可一行出榜。下一篇计划写 #33《基金排名·分红·规模全景》讲解如何用官方接口拉取基金排名/js/pm/*、分红/js/jf/*、规模/js/gm/*与其他指标/js/other/*数据。8. 免责声明本文仅演示公开数据接口的用法所有代码示例均为演示数据未含任何真实数据文中示例仅为演示用途不构成投资建议亦不承诺收益。
返回列表