akshare 1.13.46__py3-none-any.whl → 1.17.99__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. akshare/__init__.py +757 -161
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +3 -7
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/air/sunrise_tad.py +32 -17
  8. akshare/article/cons.py +1 -0
  9. akshare/article/epu_index.py +4 -3
  10. akshare/article/ff_factor.py +19 -8
  11. akshare/article/fred_md.py +4 -1
  12. akshare/article/risk_rv.py +3 -8
  13. akshare/bank/bank_cbirc_2020.py +11 -11
  14. akshare/bank/cons.py +7 -6
  15. akshare/bond/bond_buy_back_em.py +228 -0
  16. akshare/bond/bond_cb_sina.py +1 -0
  17. akshare/bond/bond_cb_ths.py +17 -9
  18. akshare/bond/bond_cbond.py +19 -14
  19. akshare/bond/bond_china.py +38 -39
  20. akshare/bond/bond_china_money.py +75 -48
  21. akshare/bond/bond_convert.py +10 -9
  22. akshare/bond/bond_em.py +37 -17
  23. akshare/bond/bond_info_cm.py +28 -8
  24. akshare/bond/bond_issue_cninfo.py +73 -30
  25. akshare/bond/bond_summary.py +38 -37
  26. akshare/bond/bond_zh_cov.py +31 -40
  27. akshare/bond/bond_zh_sina.py +61 -51
  28. akshare/bond/cons.py +14 -11
  29. akshare/cal/__init__.py +0 -0
  30. akshare/cal/rv.py +170 -0
  31. akshare/cost/cost_living.py +7 -5
  32. akshare/crypto/__init__.py +1 -1
  33. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  34. akshare/crypto/crypto_hold.py +4 -2
  35. akshare/currency/currency.py +1 -0
  36. akshare/currency/currency_china_bank_sina.py +11 -6
  37. akshare/currency/currency_safe.py +7 -6
  38. akshare/data/__init__.py +1 -1
  39. akshare/data/cninfo.js +1 -1
  40. akshare/datasets.py +10 -21
  41. akshare/economic/cons.py +10 -3
  42. akshare/economic/macro_australia.py +74 -69
  43. akshare/economic/macro_bank.py +95 -653
  44. akshare/economic/macro_canada.py +92 -81
  45. akshare/economic/macro_china.py +163 -117
  46. akshare/economic/macro_china_hk.py +0 -1
  47. akshare/economic/macro_china_nbs.py +24 -7
  48. akshare/economic/macro_euro.py +103 -56
  49. akshare/economic/macro_finance_ths.py +135 -0
  50. akshare/economic/macro_germany.py +1 -1
  51. akshare/economic/macro_info_ws.py +100 -0
  52. akshare/economic/macro_japan.py +0 -1
  53. akshare/economic/macro_other.py +1 -6
  54. akshare/economic/macro_swiss.py +2 -3
  55. akshare/economic/macro_uk.py +1 -1
  56. akshare/economic/macro_usa.py +7 -9
  57. akshare/economic/marco_cnbs.py +11 -6
  58. akshare/energy/energy_carbon.py +94 -126
  59. akshare/energy/energy_oil_em.py +1 -2
  60. akshare/event/cons.py +1 -0
  61. akshare/event/migration.py +3 -2
  62. akshare/exceptions.py +43 -0
  63. akshare/file_fold/calendar.json +245 -2
  64. akshare/forex/__init__.py +0 -0
  65. akshare/forex/cons.py +192 -0
  66. akshare/forex/forex_em.py +149 -0
  67. akshare/fortune/fortune_500.py +15 -48
  68. akshare/fortune/fortune_bloomberg.py +6 -3
  69. akshare/fortune/fortune_forbes_500.py +3 -6
  70. akshare/fortune/fortune_hurun.py +2 -1
  71. akshare/fortune/fortune_xincaifu_500.py +17 -14
  72. akshare/fund/fund_amac.py +38 -15
  73. akshare/fund/fund_announcement_em.py +145 -0
  74. akshare/fund/fund_aum_em.py +49 -35
  75. akshare/fund/fund_em.py +251 -220
  76. akshare/fund/fund_etf_em.py +44 -35
  77. akshare/fund/fund_etf_sina.py +76 -27
  78. akshare/fund/fund_etf_ths.py +95 -0
  79. akshare/fund/fund_fee_em.py +172 -0
  80. akshare/fund/fund_fhsp_em.py +42 -32
  81. akshare/fund/fund_init_em.py +8 -5
  82. akshare/fund/fund_lof_em.py +12 -19
  83. akshare/fund/fund_manager.py +25 -11
  84. akshare/fund/fund_overview_em.py +42 -0
  85. akshare/fund/fund_portfolio_em.py +78 -66
  86. akshare/fund/fund_position_lg.py +19 -8
  87. akshare/fund/fund_rank_em.py +90 -84
  88. akshare/fund/fund_rating.py +33 -12
  89. akshare/fund/fund_report_cninfo.py +63 -48
  90. akshare/fund/fund_scale_em.py +24 -13
  91. akshare/fund/fund_scale_sina.py +20 -10
  92. akshare/fund/fund_xq.py +3 -2
  93. akshare/futures/cons.py +141 -46
  94. akshare/futures/cot.py +89 -88
  95. akshare/futures/futures_basis.py +99 -33
  96. akshare/futures/futures_comex_em.py +1 -0
  97. akshare/futures/futures_comm_ctp.py +13 -2
  98. akshare/futures/futures_contract_detail.py +59 -9
  99. akshare/futures/futures_daily_bar.py +75 -62
  100. akshare/futures/futures_foreign.py +14 -8
  101. akshare/futures/futures_hf_em.py +215 -61
  102. akshare/futures/futures_hist_em.py +191 -0
  103. akshare/futures/futures_hq_sina.py +79 -61
  104. akshare/futures/futures_index_ccidx.py +24 -82
  105. akshare/futures/futures_inventory_99.py +70 -272
  106. akshare/futures/futures_inventory_em.py +14 -11
  107. akshare/futures/futures_news_shmet.py +2 -2
  108. akshare/futures/futures_roll_yield.py +11 -24
  109. akshare/futures/futures_rule.py +7 -3
  110. akshare/futures/futures_rule_em.py +38 -0
  111. akshare/futures/futures_settlement_price_sgx.py +21 -6
  112. akshare/futures/futures_stock_js.py +1 -2
  113. akshare/futures/futures_to_spot.py +43 -39
  114. akshare/futures/futures_warehouse_receipt.py +53 -48
  115. akshare/futures/futures_zh_sina.py +4 -4
  116. akshare/futures/receipt.py +298 -165
  117. akshare/futures/requests_fun.py +16 -3
  118. akshare/futures/symbol_var.py +32 -13
  119. akshare/futures_derivative/cons.py +100 -103
  120. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  121. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  122. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  123. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  124. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  125. akshare/futures_derivative/futures_contract_info_shfe.py +7 -8
  126. akshare/futures_derivative/futures_cot_sina.py +28 -19
  127. akshare/futures_derivative/futures_index_sina.py +25 -13
  128. akshare/fx/cons.py +12 -7
  129. akshare/fx/currency_investing.py +19 -285
  130. akshare/fx/fx_c_swap_cm.py +62 -0
  131. akshare/fx/fx_quote.py +3 -2
  132. akshare/fx/fx_quote_baidu.py +2 -1
  133. akshare/hf/__init__.py +1 -1
  134. akshare/hf/hf_sp500.py +8 -7
  135. akshare/index/cons.py +132 -28
  136. akshare/index/index_cflp.py +29 -26
  137. akshare/index/index_cni.py +89 -91
  138. akshare/index/index_cons.py +26 -10
  139. akshare/index/index_csindex.py +68 -0
  140. akshare/index/index_cx.py +263 -62
  141. akshare/index/index_drewry.py +17 -16
  142. akshare/index/index_eri.py +1 -0
  143. akshare/index/index_global_em.py +167 -0
  144. akshare/index/index_global_sina.py +82 -0
  145. akshare/index/index_kq_fz.py +17 -14
  146. akshare/index/index_kq_ss.py +1 -0
  147. akshare/index/index_option_qvix.py +351 -16
  148. akshare/index/index_research_sw.py +38 -38
  149. akshare/index/index_spot.py +9 -5
  150. akshare/index/index_stock_hk.py +6 -10
  151. akshare/index/index_stock_us_sina.py +1 -1
  152. akshare/index/index_stock_zh.py +193 -101
  153. akshare/index/index_stock_zh_csindex.py +15 -369
  154. akshare/index/index_sugar.py +18 -4
  155. akshare/index/index_sw.py +62 -34
  156. akshare/index/index_yw.py +53 -75
  157. akshare/index/index_zh_em.py +15 -82
  158. akshare/interest_rate/interbank_rate_em.py +14 -10
  159. akshare/movie/artist_yien.py +32 -5
  160. akshare/movie/jm.js +0 -1
  161. akshare/movie/movie_yien.py +92 -18
  162. akshare/movie/video_yien.py +28 -5
  163. akshare/news/__init__.py +1 -1
  164. akshare/news/news_baidu.py +395 -220
  165. akshare/news/news_cctv.py +38 -38
  166. akshare/news/news_stock.py +49 -13
  167. akshare/nlp/nlp_interface.py +7 -8
  168. akshare/option/cons.py +12 -12
  169. akshare/option/option_comm_qihuo.py +86 -0
  170. akshare/option/option_commodity.py +355 -211
  171. akshare/option/option_commodity_sina.py +22 -26
  172. akshare/option/option_contract_info_ctp.py +63 -0
  173. akshare/option/option_current_sse.py +61 -0
  174. akshare/option/option_current_szse.py +84 -0
  175. akshare/option/option_czce.py +37 -9
  176. akshare/option/option_daily_stats_sse_szse.py +145 -0
  177. akshare/option/option_em.py +4 -8
  178. akshare/option/option_finance.py +60 -12
  179. akshare/option/option_finance_sina.py +28 -26
  180. akshare/option/option_lhb_em.py +62 -57
  181. akshare/option/option_margin.py +62 -0
  182. akshare/option/option_premium_analysis_em.py +58 -53
  183. akshare/option/option_risk_analysis_em.py +11 -8
  184. akshare/option/option_risk_indicator_sse.py +18 -16
  185. akshare/option/option_value_analysis_em.py +62 -55
  186. akshare/other/__init__.py +1 -1
  187. akshare/other/other_car_cpca.py +20 -20
  188. akshare/pro/__init__.py +0 -1
  189. akshare/pro/client.py +6 -4
  190. akshare/pro/cons.py +3 -2
  191. akshare/pro/data_pro.py +6 -5
  192. akshare/qdii/__init__.py +0 -0
  193. akshare/qdii/qdii_jsl.py +233 -0
  194. akshare/qhkc/__init__.py +1 -6
  195. akshare/qhkc/qhkc_api.py +64 -22
  196. akshare/qhkc_web/__init__.py +1 -6
  197. akshare/qhkc_web/qhkc_fund.py +10 -6
  198. akshare/qhkc_web/qhkc_index.py +28 -14
  199. akshare/qhkc_web/qhkc_tool.py +62 -59
  200. akshare/rate/__init__.py +1 -1
  201. akshare/rate/repo_rate.py +36 -32
  202. akshare/reits/__init__.py +1 -1
  203. akshare/reits/reits_basic.py +149 -13
  204. akshare/request.py +117 -0
  205. akshare/spot/__init__.py +1 -1
  206. akshare/spot/spot_hog_soozhu.py +232 -0
  207. akshare/spot/spot_price_qh.py +121 -0
  208. akshare/spot/spot_sge.py +70 -9
  209. akshare/stock/cons.py +60 -23
  210. akshare/stock/stock_allotment_cninfo.py +10 -9
  211. akshare/stock/stock_ask_bid_em.py +3 -78
  212. akshare/stock/stock_board_concept_em.py +160 -35
  213. akshare/stock/stock_board_industry_em.py +163 -70
  214. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  215. akshare/stock/stock_cg_guarantee.py +41 -51
  216. akshare/stock/stock_cg_lawsuit.py +36 -35
  217. akshare/stock/stock_dividend_cninfo.py +36 -16
  218. akshare/stock/stock_dzjy_em.py +347 -260
  219. akshare/stock/stock_fund_em.py +73 -64
  220. akshare/stock/stock_fund_hold.py +1 -2
  221. akshare/stock/stock_gsrl_em.py +1 -0
  222. akshare/stock/stock_hk_comparison_em.py +175 -0
  223. akshare/stock/stock_hk_famous.py +107 -0
  224. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  225. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  226. akshare/stock/stock_hk_sina.py +91 -42
  227. akshare/stock/stock_hold_control_cninfo.py +100 -15
  228. akshare/stock/stock_hold_control_em.py +4 -5
  229. akshare/stock/stock_hold_num_cninfo.py +18 -12
  230. akshare/stock/stock_hot_rank_em.py +4 -1
  231. akshare/stock/stock_hot_search_baidu.py +32 -19
  232. akshare/stock/stock_hot_up_em.py +4 -1
  233. akshare/stock/stock_hsgt_em.py +155 -0
  234. akshare/stock/stock_industry.py +1 -0
  235. akshare/stock/stock_industry_cninfo.py +25 -20
  236. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  237. akshare/stock/stock_industry_sw.py +5 -9
  238. akshare/stock/stock_info.py +31 -19
  239. akshare/stock/stock_info_em.py +17 -11
  240. akshare/stock/stock_intraday_em.py +9 -80
  241. akshare/stock/stock_intraday_sina.py +2 -2
  242. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  243. akshare/stock/stock_new_cninfo.py +32 -19
  244. akshare/stock/stock_news_cx.py +39 -0
  245. akshare/stock/stock_profile_cninfo.py +9 -8
  246. akshare/stock/stock_profile_em.py +302 -0
  247. akshare/stock/stock_rank_forecast.py +8 -6
  248. akshare/stock/stock_repurchase_em.py +7 -2
  249. akshare/stock/stock_share_changes_cninfo.py +18 -14
  250. akshare/stock/stock_share_hold.py +24 -20
  251. akshare/stock/stock_stop.py +6 -6
  252. akshare/stock/stock_summary.py +153 -417
  253. akshare/stock/stock_us_famous.py +19 -11
  254. akshare/stock/stock_us_js.py +3 -2
  255. akshare/stock/stock_us_pink.py +38 -27
  256. akshare/stock/stock_us_sina.py +15 -12
  257. akshare/stock/stock_weibo_nlp.py +18 -20
  258. akshare/stock/stock_xq.py +36 -9
  259. akshare/stock/stock_zh_a_sina.py +58 -80
  260. akshare/stock/stock_zh_a_special.py +240 -243
  261. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  262. akshare/stock/stock_zh_ah_tx.py +23 -26
  263. akshare/stock/stock_zh_b_sina.py +32 -55
  264. akshare/stock/stock_zh_comparison_em.py +250 -0
  265. akshare/stock/stock_zh_kcb_report.py +11 -9
  266. akshare/stock/stock_zh_kcb_sina.py +67 -64
  267. akshare/stock_a/__init__.py +0 -0
  268. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  269. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  270. akshare/stock_a/stock_zh_a_spot.py +212 -0
  271. akshare/stock_feature/cons.py +1 -0
  272. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  273. akshare/stock_feature/stock_a_high_low.py +5 -2
  274. akshare/stock_feature/stock_a_indicator.py +15 -57
  275. akshare/stock_feature/stock_a_pe_and_pb.py +39 -9
  276. akshare/stock_feature/stock_account_em.py +0 -1
  277. akshare/stock_feature/stock_all_pb.py +2 -1
  278. akshare/stock_feature/stock_analyst_em.py +36 -30
  279. akshare/stock_feature/stock_board_concept_ths.py +144 -252
  280. akshare/stock_feature/stock_board_industry_ths.py +137 -401
  281. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  282. akshare/stock_feature/stock_classify_sina.py +3 -6
  283. akshare/stock_feature/stock_comment_em.py +81 -144
  284. akshare/stock_feature/stock_concept_futu.py +183 -0
  285. akshare/stock_feature/stock_congestion_lg.py +2 -1
  286. akshare/stock_feature/stock_cyq_em.py +5 -11
  287. akshare/stock_feature/stock_disclosure_cninfo.py +20 -10
  288. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  289. akshare/stock_feature/stock_ebs_lg.py +5 -4
  290. akshare/stock_feature/stock_esg_sina.py +33 -15
  291. akshare/stock_feature/stock_fhps_em.py +62 -26
  292. akshare/stock_feature/stock_fhps_ths.py +34 -7
  293. akshare/stock_feature/stock_fund_flow.py +38 -25
  294. akshare/stock_feature/stock_gddh_em.py +19 -11
  295. akshare/stock_feature/stock_gdfx_em.py +226 -113
  296. akshare/stock_feature/stock_gdhs.py +75 -50
  297. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  298. akshare/stock_feature/stock_gpzy_em.py +78 -46
  299. akshare/stock_feature/stock_gxl_lg.py +3 -2
  300. akshare/stock_feature/stock_hist_em.py +158 -237
  301. akshare/stock_feature/stock_hist_tx.py +13 -10
  302. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  303. akshare/stock_feature/stock_hot_xq.py +4 -6
  304. akshare/stock_feature/stock_hsgt_em.py +269 -97
  305. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  306. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  307. akshare/stock_feature/stock_info.py +8 -81
  308. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  309. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  310. akshare/stock_feature/stock_jgdy_em.py +43 -40
  311. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  312. akshare/stock_feature/stock_lhb_em.py +165 -35
  313. akshare/stock_feature/stock_lhb_sina.py +93 -46
  314. akshare/stock_feature/stock_margin_em.py +101 -0
  315. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -17
  316. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +7 -7
  317. akshare/stock_feature/stock_market_legu.py +4 -2
  318. akshare/stock_feature/stock_pankou_em.py +71 -35
  319. akshare/stock_feature/stock_qsjy_em.py +13 -4
  320. akshare/stock_feature/stock_report_em.py +152 -8
  321. akshare/stock_feature/stock_research_report_em.py +55 -20
  322. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  323. akshare/stock_feature/stock_sy_em.py +20 -15
  324. akshare/stock_feature/stock_technology_ths.py +152 -120
  325. akshare/stock_feature/stock_tfp_em.py +37 -14
  326. akshare/stock_feature/stock_three_report_em.py +120 -78
  327. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  328. akshare/stock_feature/stock_value_em.py +83 -0
  329. akshare/stock_feature/stock_yjbb_em.py +58 -32
  330. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  331. akshare/stock_feature/stock_yjyg_em.py +1 -1
  332. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  333. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  334. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  335. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  336. akshare/stock_feature/stock_ztb_em.py +39 -24
  337. akshare/stock_fundamental/__init__.py +1 -1
  338. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  339. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  340. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +203 -59
  341. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  342. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  343. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  344. akshare/stock_fundamental/stock_hold.py +26 -17
  345. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  346. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  347. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  348. akshare/stock_fundamental/stock_notice.py +41 -18
  349. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  350. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  351. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  352. akshare/stock_fundamental/stock_recommend.py +20 -4
  353. akshare/stock_fundamental/stock_register_em.py +448 -0
  354. akshare/stock_fundamental/stock_zygc.py +5 -62
  355. akshare/tool/trade_date_hist.py +1 -1
  356. akshare/utils/context.py +43 -0
  357. akshare/utils/demjson.py +2009 -1338
  358. akshare/utils/func.py +49 -2
  359. akshare/utils/multi_decrypt.py +53 -0
  360. akshare/utils/token_process.py +6 -5
  361. akshare/utils/tqdm.py +13 -3
  362. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/METADATA +56 -86
  363. akshare-1.17.99.dist-info/RECORD +409 -0
  364. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  365. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  366. tests/test_func.py +3 -5
  367. akshare/bond/bond_futures.py +0 -50
  368. akshare/bond/bond_investing.py +0 -139
  369. akshare/crypto/crypto_hist_investing.py +0 -249
  370. akshare/fortune/fortune_it_juzi.py +0 -123
  371. akshare/fund/fund_announcement.py +0 -56
  372. akshare/futures/futures_international.py +0 -170
  373. akshare/futures/futures_news_baidu.py +0 -54
  374. akshare/futures/inventory_data.py +0 -100
  375. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  376. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  377. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  378. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  379. akshare/index/index_fear_greed_funddb.py +0 -78
  380. akshare/index/index_investing.py +0 -232
  381. akshare/sport/__init__.py +0 -6
  382. akshare/sport/sport_olympic.py +0 -27
  383. akshare/sport/sport_olympic_winter.py +0 -39
  384. akshare/stock_feature/stock_wencai.py +0 -104
  385. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  386. akshare/stock_fundamental/stock_register.py +0 -292
  387. akshare-1.13.46.dist-info/RECORD +0 -380
  388. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
@@ -1,15 +1,116 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/3/21 22:27
4
+ Date: 2025/3/10 19:30
5
5
  Desc: 东方财富-沪深板块-行业板块
6
6
  https://quote.eastmoney.com/center/boardlist.html#industry_board
7
7
  """
8
+
8
9
  import re
10
+ from functools import lru_cache
9
11
 
10
12
  import pandas as pd
11
13
  import requests
12
14
 
15
+ from akshare.utils.func import fetch_paginated_data
16
+
17
+
18
+ @lru_cache()
19
+ def __stock_board_industry_name_em() -> pd.DataFrame:
20
+ """
21
+ 东方财富网-沪深板块-行业板块-名称
22
+ https://quote.eastmoney.com/center/boardlist.html#industry_board
23
+ :return: 行业板块-名称
24
+ :rtype: pandas.DataFrame
25
+ """
26
+ url = "https://17.push2.eastmoney.com/api/qt/clist/get"
27
+ params = {
28
+ "pn": "1",
29
+ "pz": "100",
30
+ "po": "1",
31
+ "np": "1",
32
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
33
+ "fltt": "2",
34
+ "invt": "2",
35
+ "fid": "f3",
36
+ "fs": "m:90 t:2 f:!50",
37
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,"
38
+ "f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,"
39
+ "f140,f141,f207,f208,f209,f222",
40
+ }
41
+ temp_df = fetch_paginated_data(url, params)
42
+ temp_df.columns = [
43
+ "排名",
44
+ "-",
45
+ "最新价",
46
+ "涨跌幅",
47
+ "涨跌额",
48
+ "-",
49
+ "_",
50
+ "-",
51
+ "换手率",
52
+ "-",
53
+ "-",
54
+ "-",
55
+ "板块代码",
56
+ "-",
57
+ "板块名称",
58
+ "-",
59
+ "-",
60
+ "-",
61
+ "-",
62
+ "总市值",
63
+ "-",
64
+ "-",
65
+ "-",
66
+ "-",
67
+ "-",
68
+ "-",
69
+ "-",
70
+ "-",
71
+ "上涨家数",
72
+ "下跌家数",
73
+ "-",
74
+ "-",
75
+ "-",
76
+ "领涨股票",
77
+ "-",
78
+ "-",
79
+ "领涨股票-涨跌幅",
80
+ "-",
81
+ "-",
82
+ "-",
83
+ "-",
84
+ "-",
85
+ ]
86
+ temp_df = temp_df[
87
+ [
88
+ "排名",
89
+ "板块名称",
90
+ "板块代码",
91
+ "最新价",
92
+ "涨跌额",
93
+ "涨跌幅",
94
+ "总市值",
95
+ "换手率",
96
+ "上涨家数",
97
+ "下跌家数",
98
+ "领涨股票",
99
+ "领涨股票-涨跌幅",
100
+ ]
101
+ ]
102
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
103
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
104
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
105
+ temp_df["总市值"] = pd.to_numeric(temp_df["总市值"], errors="coerce")
106
+ temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
107
+ temp_df["上涨家数"] = pd.to_numeric(temp_df["上涨家数"], errors="coerce")
108
+ temp_df["下跌家数"] = pd.to_numeric(temp_df["下跌家数"], errors="coerce")
109
+ temp_df["领涨股票-涨跌幅"] = pd.to_numeric(
110
+ temp_df["领涨股票-涨跌幅"], errors="coerce"
111
+ )
112
+ return temp_df
113
+
13
114
 
14
115
  def stock_board_industry_name_em() -> pd.DataFrame:
15
116
  """
@@ -18,10 +119,10 @@ def stock_board_industry_name_em() -> pd.DataFrame:
18
119
  :return: 行业板块-名称
19
120
  :rtype: pandas.DataFrame
20
121
  """
21
- url = "http://17.push2.eastmoney.com/api/qt/clist/get"
122
+ url = "https://17.push2.eastmoney.com/api/qt/clist/get"
22
123
  params = {
23
124
  "pn": "1",
24
- "pz": "2000",
125
+ "pz": "100",
25
126
  "po": "1",
26
127
  "np": "1",
27
128
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
@@ -29,14 +130,11 @@ def stock_board_industry_name_em() -> pd.DataFrame:
29
130
  "invt": "2",
30
131
  "fid": "f3",
31
132
  "fs": "m:90 t:2 f:!50",
32
- "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222",
33
- "_": "1626075887768",
133
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,"
134
+ "f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,"
135
+ "f140,f141,f207,f208,f209,f222",
34
136
  }
35
- r = requests.get(url, params=params)
36
- data_json = r.json()
37
- temp_df = pd.DataFrame(data_json["data"]["diff"])
38
- temp_df.reset_index(inplace=True)
39
- temp_df["index"] = temp_df.index + 1
137
+ temp_df = fetch_paginated_data(url, params)
40
138
  temp_df.columns = [
41
139
  "排名",
42
140
  "-",
@@ -104,7 +202,9 @@ def stock_board_industry_name_em() -> pd.DataFrame:
104
202
  temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
105
203
  temp_df["上涨家数"] = pd.to_numeric(temp_df["上涨家数"], errors="coerce")
106
204
  temp_df["下跌家数"] = pd.to_numeric(temp_df["下跌家数"], errors="coerce")
107
- temp_df["领涨股票-涨跌幅"] = pd.to_numeric(temp_df["领涨股票-涨跌幅"], errors="coerce")
205
+ temp_df["领涨股票-涨跌幅"] = pd.to_numeric(
206
+ temp_df["领涨股票-涨跌幅"], errors="coerce"
207
+ )
108
208
  return temp_df
109
209
 
110
210
 
@@ -117,7 +217,7 @@ def stock_board_industry_spot_em(symbol: str = "小金属") -> pd.DataFrame:
117
217
  :return: 实时行情
118
218
  :rtype: pandas.DataFrame
119
219
  """
120
- url = "http://91.push2.eastmoney.com/api/qt/stock/get"
220
+ url = "https://91.push2.eastmoney.com/api/qt/stock/get"
121
221
  field_map = {
122
222
  "f43": "最新",
123
223
  "f44": "最高",
@@ -131,41 +231,39 @@ def stock_board_industry_spot_em(symbol: str = "小金属") -> pd.DataFrame:
131
231
  "f169": "涨跌额",
132
232
  }
133
233
 
134
- if re.match(r'^BK\d+', symbol):
234
+ if re.match(pattern=r"^BK\d+", string=symbol):
135
235
  em_code = symbol
136
236
  else:
137
- industry_listing = stock_board_industry_name_em()
138
- em_code = industry_listing.query('板块名称 == @symbol')["板块代码"].values[0]
139
-
237
+ industry_listing = __stock_board_industry_name_em()
238
+ em_code = industry_listing.query("板块名称 == @symbol")["板块代码"].values[0]
140
239
  params = dict(
141
- fields=','.join(field_map.keys()),
240
+ fields=",".join(field_map.keys()),
142
241
  mpi="1000",
143
242
  invt="2",
144
243
  fltt="1",
145
244
  secid=f"90.{em_code}",
146
- ut="fa5fd1943c7b386f172d6893dbfba10b",
147
245
  )
148
246
  r = requests.get(url, params=params)
149
247
  data_dict = r.json()
150
248
  result = pd.DataFrame.from_dict(data_dict["data"], orient="index")
151
249
  result.rename(field_map, inplace=True)
152
250
  result.reset_index(inplace=True)
153
- result.columns = ['item', "value"]
154
- result['value'] = pd.to_numeric(result['value'], errors="coerce")
251
+ result.columns = ["item", "value"]
252
+ result["value"] = pd.to_numeric(result["value"], errors="coerce")
155
253
 
156
254
  # 各项转换成正常单位. 除了成交量与成交额, 原始数据中已是正常单位(元)
157
- result['value'] = result['value'] * 1e-2
255
+ result["value"] = result["value"] * 1e-2
158
256
  result.iloc[4, 1] = result.iloc[4, 1] * 1e2
159
257
  result.iloc[5, 1] = result.iloc[5, 1] * 1e2
160
258
  return result
161
259
 
162
260
 
163
261
  def stock_board_industry_hist_em(
164
- symbol: str = "小金属",
165
- start_date: str = "20211201",
166
- end_date: str = "20220401",
167
- period: str = "日k",
168
- adjust: str = "",
262
+ symbol: str = "小金属",
263
+ start_date: str = "20211201",
264
+ end_date: str = "20220401",
265
+ period: str = "日k",
266
+ adjust: str = "",
169
267
  ) -> pd.DataFrame:
170
268
  """
171
269
  东方财富网-沪深板块-行业板块-历史行情
@@ -183,20 +281,20 @@ def stock_board_industry_hist_em(
183
281
  :return: 历史行情
184
282
  :rtype: pandas.DataFrame
185
283
  """
284
+ if re.match(pattern=r"^BK\d+", string=symbol):
285
+ em_code = symbol
286
+ else:
287
+ industry_listing = __stock_board_industry_name_em()
288
+ em_code = industry_listing.query("板块名称 == @symbol")["板块代码"].values[0]
186
289
  period_map = {
187
- "日k": '101',
188
- "周k": '102',
189
- "月k": '103',
290
+ "日k": "101",
291
+ "周k": "102",
292
+ "月k": "103",
190
293
  }
191
- stock_board_concept_em_map = stock_board_industry_name_em()
192
- stock_board_code = stock_board_concept_em_map[
193
- stock_board_concept_em_map["板块名称"] == symbol
194
- ]["板块代码"].values[0]
195
294
  adjust_map = {"": "0", "qfq": "1", "hfq": "2"}
196
295
  url = "http://7.push2his.eastmoney.com/api/qt/stock/kline/get"
197
296
  params = {
198
- "secid": f"90.{stock_board_code}",
199
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
297
+ "secid": f"90.{em_code}",
200
298
  "fields1": "f1,f2,f3,f4,f5,f6",
201
299
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
202
300
  "klt": period_map[period],
@@ -205,13 +303,10 @@ def stock_board_industry_hist_em(
205
303
  "end": end_date,
206
304
  "smplmt": "10000",
207
305
  "lmt": "1000000",
208
- "_": "1626079488673",
209
306
  }
210
307
  r = requests.get(url, params=params)
211
308
  data_json = r.json()
212
- temp_df = pd.DataFrame(
213
- [item.split(",") for item in data_json["data"]["klines"]]
214
- )
309
+ temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
215
310
  temp_df.columns = [
216
311
  "日期",
217
312
  "开盘",
@@ -254,7 +349,7 @@ def stock_board_industry_hist_em(
254
349
 
255
350
 
256
351
  def stock_board_industry_hist_min_em(
257
- symbol: str = "小金属", period: str = "5"
352
+ symbol: str = "小金属", period: str = "5"
258
353
  ) -> pd.DataFrame:
259
354
  """
260
355
  东方财富网-沪深板块-行业板块-分时历史行情
@@ -266,20 +361,19 @@ def stock_board_industry_hist_min_em(
266
361
  :return: 分时历史行情
267
362
  :rtype: pandas.DataFrame
268
363
  """
269
- stock_board_concept_em_map = stock_board_industry_name_em()
270
- stock_board_code = stock_board_concept_em_map[
271
- stock_board_concept_em_map["板块名称"] == symbol
272
- ]["板块代码"].values[0]
364
+ if re.match(pattern=r"^BK\d+", string=symbol):
365
+ em_code = symbol
366
+ else:
367
+ industry_listing = __stock_board_industry_name_em()
368
+ em_code = industry_listing.query("板块名称 == @symbol")["板块代码"].values[0]
273
369
  if period == "1":
274
370
  url = "https://push2his.eastmoney.com/api/qt/stock/trends2/get"
275
371
  params = {
276
372
  "fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13",
277
373
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58",
278
- "ut": 'fa5fd1943c7b386f172d6893dbfba10b',
279
- "iscr": '0',
280
- "ndays": '1',
281
- "secid": f"90.{stock_board_code}",
282
- "_": "1687852931312",
374
+ "iscr": "0",
375
+ "ndays": "1",
376
+ "secid": f"90.{em_code}",
283
377
  }
284
378
  r = requests.get(url, params=params)
285
379
  data_json = r.json()
@@ -306,10 +400,9 @@ def stock_board_industry_hist_min_em(
306
400
  temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
307
401
  return temp_df
308
402
  else:
309
- url = "http://7.push2his.eastmoney.com/api/qt/stock/kline/get"
403
+ url = "https://7.push2his.eastmoney.com/api/qt/stock/kline/get"
310
404
  params = {
311
- "secid": f"90.{stock_board_code}",
312
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
405
+ "secid": f"90.{em_code}",
313
406
  "fields1": "f1,f2,f3,f4,f5,f6",
314
407
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
315
408
  "klt": period,
@@ -318,7 +411,6 @@ def stock_board_industry_hist_min_em(
318
411
  "end": "20500101",
319
412
  "smplmt": "10000",
320
413
  "lmt": "1000000",
321
- "_": "1626079488673",
322
414
  }
323
415
  r = requests.get(url, params=params)
324
416
  data_json = r.json()
@@ -370,19 +462,22 @@ def stock_board_industry_cons_em(symbol: str = "小金属") -> pd.DataFrame:
370
462
  """
371
463
  东方财富网-沪深板块-行业板块-板块成份
372
464
  https://data.eastmoney.com/bkzj/BK1027.html
373
- :param symbol: 板块名称
465
+ :param symbol: 板块名称或者板块代码
374
466
  :type symbol: str
375
467
  :return: 板块成份
376
468
  :rtype: pandas.DataFrame
377
469
  """
378
- stock_board_concept_em_map = stock_board_industry_name_em()
379
- stock_board_code = stock_board_concept_em_map[
380
- stock_board_concept_em_map["板块名称"] == symbol
470
+ if re.match(pattern=r"^BK\d+", string=symbol):
471
+ stock_board_code = symbol
472
+ else:
473
+ stock_board_concept_em_map = __stock_board_industry_name_em()
474
+ stock_board_code = stock_board_concept_em_map[
475
+ stock_board_concept_em_map["板块名称"] == symbol
381
476
  ]["板块代码"].values[0]
382
- url = "http://29.push2.eastmoney.com/api/qt/clist/get"
477
+ url = "https://29.push2.eastmoney.com/api/qt/clist/get"
383
478
  params = {
384
479
  "pn": "1",
385
- "pz": "2000",
480
+ "pz": "100",
386
481
  "po": "1",
387
482
  "np": "1",
388
483
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
@@ -390,14 +485,10 @@ def stock_board_industry_cons_em(symbol: str = "小金属") -> pd.DataFrame:
390
485
  "invt": "2",
391
486
  "fid": "f3",
392
487
  "fs": f"b:{stock_board_code} f:!50",
393
- "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",
394
- "_": "1626081702127",
488
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,"
489
+ "f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45",
395
490
  }
396
- r = requests.get(url, params=params)
397
- data_json = r.json()
398
- temp_df = pd.DataFrame(data_json["data"]["diff"])
399
- temp_df.reset_index(inplace=True)
400
- temp_df["index"] = range(1, len(temp_df) + 1)
491
+ temp_df = fetch_paginated_data(url, params)
401
492
  temp_df.columns = [
402
493
  "序号",
403
494
  "_",
@@ -477,7 +568,11 @@ if __name__ == "__main__":
477
568
  print(stock_board_industry_spot_em_df)
478
569
 
479
570
  stock_board_industry_hist_em_df = stock_board_industry_hist_em(
480
- symbol="小金属", start_date="20211201", end_date="20240222", period="日k", adjust=""
571
+ symbol="小金属",
572
+ start_date="20211201",
573
+ end_date="20240222",
574
+ period="日k",
575
+ adjust="",
481
576
  )
482
577
  print(stock_board_industry_hist_em_df)
483
578
 
@@ -486,7 +581,5 @@ if __name__ == "__main__":
486
581
  )
487
582
  print(stock_board_industry_hist_min_em_df)
488
583
 
489
- stock_board_industry_cons_em_df = stock_board_industry_cons_em(
490
- symbol="小金属"
491
- )
584
+ stock_board_industry_cons_em_df = stock_board_industry_cons_em(symbol="互联网服务")
492
585
  print(stock_board_industry_cons_em_df)
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/5/29 23:34
4
+ Date: 2024/7/24 23:30
5
5
  Desc: 巨潮资讯-数据中心-专题统计-公司治理-股权质押
6
- http://webapi.cninfo.com.cn/#/thematicStatistics
6
+ https://webapi.cninfo.com.cn/#/thematicStatistics
7
7
  """
8
+
8
9
  import pandas as pd
10
+ import py_mini_racer
9
11
  import requests
10
- from py_mini_racer import py_mini_racer
11
12
 
12
13
  from akshare.datasets import get_ths_js
13
14
 
@@ -21,7 +22,7 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
21
22
  :rtype: str
22
23
  """
23
24
  setting_file_path = get_ths_js(file)
24
- with open(setting_file_path) as f:
25
+ with open(setting_file_path, encoding="utf-8") as f:
25
26
  file_data = f.read()
26
27
  return file_data
27
28
 
@@ -29,13 +30,13 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
29
30
  def stock_cg_equity_mortgage_cninfo(date: str = "20210930") -> pd.DataFrame:
30
31
  """
31
32
  巨潮资讯-数据中心-专题统计-公司治理-股权质押
32
- http://webapi.cninfo.com.cn/#/thematicStatistics
33
+ https://webapi.cninfo.com.cn/#/thematicStatistics
33
34
  :param date: 开始统计时间
34
35
  :type date: str
35
36
  :return: 股权质押
36
37
  :rtype: pandas.DataFrame
37
38
  """
38
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1094"
39
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1094"
39
40
  js_code = py_mini_racer.MiniRacer()
40
41
  js_content = _get_file_content_ths("cninfo.js")
41
42
  js_code.eval(js_content)
@@ -48,11 +49,12 @@ def stock_cg_equity_mortgage_cninfo(date: str = "20210930") -> pd.DataFrame:
48
49
  "Cache-Control": "no-cache",
49
50
  "Content-Length": "0",
50
51
  "Host": "webapi.cninfo.com.cn",
51
- "Origin": "http://webapi.cninfo.com.cn",
52
+ "Origin": "https://webapi.cninfo.com.cn",
52
53
  "Pragma": "no-cache",
53
54
  "Proxy-Connection": "keep-alive",
54
- "Referer": "http://webapi.cninfo.com.cn/",
55
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
55
+ "Referer": "https://webapi.cninfo.com.cn/",
56
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
57
+ "Chrome/93.0.4577.63 Safari/537.36",
56
58
  "X-Requested-With": "XMLHttpRequest",
57
59
  }
58
60
  params = {
@@ -87,11 +89,13 @@ def stock_cg_equity_mortgage_cninfo(date: str = "20210930") -> pd.DataFrame:
87
89
  "累计质押占总股本比例",
88
90
  ]
89
91
  ]
90
- temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"]).dt.date
92
+ temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
91
93
  temp_df["质押数量"] = pd.to_numeric(temp_df["质押数量"], errors="coerce")
92
94
  temp_df["占总股本比例"] = pd.to_numeric(temp_df["占总股本比例"], errors="coerce")
93
95
  temp_df["质押解除数量"] = pd.to_numeric(temp_df["质押解除数量"], errors="coerce")
94
- temp_df["累计质押占总股本比例"] = pd.to_numeric(temp_df["累计质押占总股本比例"], errors="coerce")
96
+ temp_df["累计质押占总股本比例"] = pd.to_numeric(
97
+ temp_df["累计质押占总股本比例"], errors="coerce"
98
+ )
95
99
  return temp_df
96
100
 
97
101
 
@@ -1,45 +1,30 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2021/9/26 23:19
4
+ Date: 2024/5/19 18:34
5
5
  Desc: 巨潮资讯-数据中心-专题统计-公司治理-对外担保
6
- http://webapi.cninfo.com.cn/#/thematicStatistics
6
+ https://webapi.cninfo.com.cn/#/thematicStatistics
7
7
  """
8
- import time
9
8
 
10
9
  import pandas as pd
11
10
  import requests
12
- from py_mini_racer import py_mini_racer
11
+ import py_mini_racer
12
+
13
+ from akshare.datasets import get_ths_js
13
14
 
14
- js_str = """
15
- function mcode(input) {
16
- var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "=";
17
- var output = "";
18
- var chr1, chr2, chr3 = "";
19
- var enc1, enc2, enc3, enc4 = "";
20
- var i = 0;
21
- do {
22
- chr1 = input.charCodeAt(i++);
23
- chr2 = input.charCodeAt(i++);
24
- chr3 = input.charCodeAt(i++);
25
- enc1 = chr1 >> 2;
26
- enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
27
- enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
28
- enc4 = chr3 & 63;
29
- if (isNaN(chr2)) {
30
- enc3 = enc4 = 64;
31
- } else if (isNaN(chr3)) {
32
- enc4 = 64;
33
- }
34
- output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)
35
- + keyStr.charAt(enc3) + keyStr.charAt(enc4);
36
- chr1 = chr2 = chr3 = "";
37
- enc1 = enc2 = enc3 = enc4 = "";
38
- } while (i < input.length);
39
-
40
- return output;
41
- }
42
- """
15
+
16
+ def _get_file_content_ths(file: str = "cninfo.js") -> str:
17
+ """
18
+ 获取 JS 文件的内容
19
+ :param file: JS 文件名
20
+ :type file: str
21
+ :return: 文件内容
22
+ :rtype: str
23
+ """
24
+ setting_file_path = get_ths_js(file)
25
+ with open(setting_file_path, encoding="utf-8") as f:
26
+ file_data = f.read()
27
+ return file_data
43
28
 
44
29
 
45
30
  def stock_cg_guarantee_cninfo(
@@ -47,7 +32,7 @@ def stock_cg_guarantee_cninfo(
47
32
  ) -> pd.DataFrame:
48
33
  """
49
34
  巨潮资讯-数据中心-专题统计-公司治理-对外担保
50
- http://webapi.cninfo.com.cn/#/thematicStatistics
35
+ https://webapi.cninfo.com.cn/#/thematicStatistics
51
36
  :param symbol: choice of {"全部", "深市主板", "沪市", "创业板", "科创板"}
52
37
  :type symbol: str
53
38
  :param start_date: 开始统计时间
@@ -58,17 +43,17 @@ def stock_cg_guarantee_cninfo(
58
43
  :rtype: pandas.DataFrame
59
44
  """
60
45
  symbol_map = {
61
- "全部": '',
62
- "深市主板": '012002',
63
- "沪市": '012001',
64
- "创业板": '012015',
65
- "科创板": '012029',
46
+ "全部": "",
47
+ "深市主板": "012002",
48
+ "沪市": "012001",
49
+ "创业板": "012015",
50
+ "科创板": "012029",
66
51
  }
67
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1054"
68
- random_time_str = str(int(time.time()))
52
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1054"
69
53
  js_code = py_mini_racer.MiniRacer()
70
- js_code.eval(js_str)
71
- mcode = js_code.call("mcode", random_time_str)
54
+ js_content = _get_file_content_ths("cninfo.js")
55
+ js_code.eval(js_content)
56
+ mcode = js_code.call("getResCode1")
72
57
  headers = {
73
58
  "Accept": "*/*",
74
59
  "Accept-Encoding": "gzip, deflate",
@@ -76,12 +61,13 @@ def stock_cg_guarantee_cninfo(
76
61
  "Cache-Control": "no-cache",
77
62
  "Content-Length": "0",
78
63
  "Host": "webapi.cninfo.com.cn",
79
- "mcode": mcode,
80
- "Origin": "http://webapi.cninfo.com.cn",
64
+ "Accept-Enckey": mcode,
65
+ "Origin": "https://webapi.cninfo.com.cn",
81
66
  "Pragma": "no-cache",
82
67
  "Proxy-Connection": "keep-alive",
83
- "Referer": "http://webapi.cninfo.com.cn/",
84
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36",
68
+ "Referer": "https://webapi.cninfo.com.cn/",
69
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
70
+ "Chrome/93.0.4577.63 Safari/537.36",
85
71
  "X-Requested-With": "XMLHttpRequest",
86
72
  }
87
73
  params = {
@@ -112,10 +98,14 @@ def stock_cg_guarantee_cninfo(
112
98
  "担保金融占净资产比例",
113
99
  ]
114
100
  ]
115
- temp_df["担保笔数"] = pd.to_numeric(temp_df["担保笔数"])
116
- temp_df["担保金额"] = pd.to_numeric(temp_df["担保金额"])
117
- temp_df["归属于母公司所有者权益"] = pd.to_numeric(temp_df["归属于母公司所有者权益"])
118
- temp_df["担保金融占净资产比例"] = pd.to_numeric(temp_df["担保金融占净资产比例"])
101
+ temp_df["担保笔数"] = pd.to_numeric(temp_df["担保笔数"], errors="coerce")
102
+ temp_df["担保金额"] = pd.to_numeric(temp_df["担保金额"], errors="coerce")
103
+ temp_df["归属于母公司所有者权益"] = pd.to_numeric(
104
+ temp_df["归属于母公司所有者权益"], errors="coerce"
105
+ )
106
+ temp_df["担保金融占净资产比例"] = pd.to_numeric(
107
+ temp_df["担保金融占净资产比例"], errors="coerce"
108
+ )
119
109
  return temp_df
120
110
 
121
111