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
@@ -4,6 +4,7 @@
4
4
  Date: 2023/7/6 19:28
5
5
  Desc: 新浪财经-科创板-实时行情数据和历史行情数据(包含前复权和后复权因子)
6
6
  """
7
+
7
8
  import datetime
8
9
  import re
9
10
 
@@ -61,59 +62,61 @@ def stock_zh_kcb_spot() -> pd.DataFrame:
61
62
  "最新价",
62
63
  "涨跌额",
63
64
  "涨跌幅",
64
- '买入',
65
- '卖出',
66
- '昨收',
67
- '今开',
68
- '最高',
69
- '最低',
70
- '成交量',
71
- '成交额',
72
- '时点',
73
- '市盈率',
74
- '市净率',
75
- '流通市值',
76
- '总市值',
77
- '换手率',
65
+ "买入",
66
+ "卖出",
67
+ "昨收",
68
+ "今开",
69
+ "最高",
70
+ "最低",
71
+ "成交量",
72
+ "成交额",
73
+ "时点",
74
+ "市盈率",
75
+ "市净率",
76
+ "流通市值",
77
+ "总市值",
78
+ "换手率",
79
+ ]
80
+ big_df = big_df[
81
+ [
82
+ "代码",
83
+ "名称",
84
+ "最新价",
85
+ "涨跌额",
86
+ "涨跌幅",
87
+ "买入",
88
+ "卖出",
89
+ "昨收",
90
+ "今开",
91
+ "最高",
92
+ "最低",
93
+ "成交量",
94
+ "成交额",
95
+ "时点",
96
+ "市盈率",
97
+ "市净率",
98
+ "流通市值",
99
+ "总市值",
100
+ "换手率",
101
+ ]
78
102
  ]
79
- big_df = big_df[[
80
- "代码",
81
- "名称",
82
- "最新价",
83
- "涨跌额",
84
- "涨跌幅",
85
- '买入',
86
- '卖出',
87
- '昨收',
88
- '今开',
89
- '最高',
90
- '最低',
91
- '成交量',
92
- '成交额',
93
- '时点',
94
- '市盈率',
95
- '市净率',
96
- '流通市值',
97
- '总市值',
98
- '换手率',
99
- ]]
100
103
 
101
- big_df['最新价'] = pd.to_numeric(big_df['最新价'])
102
- big_df['涨跌额'] = pd.to_numeric(big_df['涨跌额'])
103
- big_df['涨跌幅'] = pd.to_numeric(big_df['涨跌幅'])
104
- big_df['买入'] = pd.to_numeric(big_df['买入'])
105
- big_df['卖出'] = pd.to_numeric(big_df['卖出'])
106
- big_df['昨收'] = pd.to_numeric(big_df['昨收'])
107
- big_df['今开'] = pd.to_numeric(big_df['今开'])
108
- big_df['最高'] = pd.to_numeric(big_df['最高'])
109
- big_df['最低'] = pd.to_numeric(big_df['最低'])
110
- big_df['成交量'] = pd.to_numeric(big_df['成交量'])
111
- big_df['成交额'] = pd.to_numeric(big_df['成交额'])
112
- big_df['市盈率'] = pd.to_numeric(big_df['市盈率'])
113
- big_df['市净率'] = pd.to_numeric(big_df['市净率'])
114
- big_df['流通市值'] = pd.to_numeric(big_df['流通市值'])
115
- big_df['总市值'] = pd.to_numeric(big_df['总市值'])
116
- big_df['换手率'] = pd.to_numeric(big_df['换手率'])
104
+ big_df["最新价"] = pd.to_numeric(big_df["最新价"])
105
+ big_df["涨跌额"] = pd.to_numeric(big_df["涨跌额"])
106
+ big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"])
107
+ big_df["买入"] = pd.to_numeric(big_df["买入"])
108
+ big_df["卖出"] = pd.to_numeric(big_df["卖出"])
109
+ big_df["昨收"] = pd.to_numeric(big_df["昨收"])
110
+ big_df["今开"] = pd.to_numeric(big_df["今开"])
111
+ big_df["最高"] = pd.to_numeric(big_df["最高"])
112
+ big_df["最低"] = pd.to_numeric(big_df["最低"])
113
+ big_df["成交量"] = pd.to_numeric(big_df["成交量"])
114
+ big_df["成交额"] = pd.to_numeric(big_df["成交额"])
115
+ big_df["市盈率"] = pd.to_numeric(big_df["市盈率"])
116
+ big_df["市净率"] = pd.to_numeric(big_df["市净率"])
117
+ big_df["流通市值"] = pd.to_numeric(big_df["流通市值"])
118
+ big_df["总市值"] = pd.to_numeric(big_df["总市值"])
119
+ big_df["换手率"] = pd.to_numeric(big_df["换手率"])
117
120
  return big_df
118
121
 
119
122
 
@@ -123,7 +126,7 @@ def stock_zh_kcb_daily(symbol: str = "sh688399", adjust: str = "") -> pd.DataFra
123
126
  https://finance.sina.com.cn/realstock/company/sh688005/nc.shtml
124
127
  :param symbol: 股票代码; 带市场标识的股票代码
125
128
  :type symbol: str
126
- :param adjust: 默认不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; hfq-factor: 返回前复权因子
129
+ :param adjust: 默认不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; qfq-factor: 返回前复权因子
127
130
  :type adjust: str
128
131
  :return: 科创板股票的历史行情数据
129
132
  :rtype: pandas.DataFrame
@@ -150,12 +153,12 @@ def stock_zh_kcb_daily(symbol: str = "sh688399", adjust: str = "") -> pd.DataFra
150
153
  try:
151
154
  # try for pandas >= 2.1.0
152
155
  temp_df.ffill(inplace=True)
153
- except Exception as e:
156
+ except Exception:
154
157
  try:
155
- # try for pandas < 2.1.0
158
+ # try for pandas < 2.1.0
156
159
  temp_df.fillna(method="ffill", inplace=True)
157
160
  except Exception as e:
158
- print("Error:", e)
161
+ print("Error:", e)
159
162
  temp_df = temp_df.astype(float)
160
163
  temp_df["amount"] = temp_df["amount"] * 10000
161
164
  temp_df["turnover"] = temp_df["v"] / temp_df["amount"]
@@ -173,7 +176,7 @@ def stock_zh_kcb_daily(symbol: str = "sh688399", adjust: str = "") -> pd.DataFra
173
176
 
174
177
  if not adjust:
175
178
  temp_df.reset_index(inplace=True)
176
- temp_df['date'] = pd.to_datetime(temp_df['date']).dt.date
179
+ temp_df["date"] = pd.to_datetime(temp_df["date"]).dt.date
177
180
  return temp_df
178
181
 
179
182
  if adjust == "hfq":
@@ -191,9 +194,9 @@ def stock_zh_kcb_daily(symbol: str = "sh688399", adjust: str = "") -> pd.DataFra
191
194
  try:
192
195
  # try for pandas >= 2.1.0
193
196
  temp_df.ffill(inplace=True)
194
- except Exception as e:
197
+ except Exception:
195
198
  try:
196
- # try for pandas < 2.1.0
199
+ # try for pandas < 2.1.0
197
200
  temp_df.fillna(method="ffill", inplace=True)
198
201
  except Exception as e:
199
202
  print("Error:", e)
@@ -204,7 +207,7 @@ def stock_zh_kcb_daily(symbol: str = "sh688399", adjust: str = "") -> pd.DataFra
204
207
  temp_df["low"] = temp_df["low"] * temp_df["hfq_factor"]
205
208
  temp_df = temp_df.iloc[:, :-1]
206
209
  temp_df.reset_index(inplace=True)
207
- temp_df['date'] = pd.to_datetime(temp_df['date']).dt.date
210
+ temp_df["date"] = pd.to_datetime(temp_df["date"]).dt.date
208
211
  return temp_df
209
212
 
210
213
  if adjust == "qfq":
@@ -222,9 +225,9 @@ def stock_zh_kcb_daily(symbol: str = "sh688399", adjust: str = "") -> pd.DataFra
222
225
  try:
223
226
  # try for pandas >= 2.1.0
224
227
  temp_df.ffill(inplace=True)
225
- except Exception as e:
228
+ except Exception:
226
229
  try:
227
- # try for pandas < 2.1.0
230
+ # try for pandas < 2.1.0
228
231
  temp_df.fillna(method="ffill", inplace=True)
229
232
  except Exception as e:
230
233
  print("Error:", e)
@@ -235,7 +238,7 @@ def stock_zh_kcb_daily(symbol: str = "sh688399", adjust: str = "") -> pd.DataFra
235
238
  temp_df["low"] = temp_df["low"] / temp_df["qfq_factor"]
236
239
  temp_df = temp_df.iloc[:, :-1]
237
240
  temp_df.reset_index(inplace=True)
238
- temp_df['date'] = pd.to_datetime(temp_df['date']).dt.date
241
+ temp_df["date"] = pd.to_datetime(temp_df["date"]).dt.date
239
242
  return temp_df
240
243
 
241
244
  if adjust == "hfq-factor":
@@ -247,7 +250,7 @@ def stock_zh_kcb_daily(symbol: str = "sh688399", adjust: str = "") -> pd.DataFra
247
250
  hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)
248
251
  del hfq_factor_df["date"]
249
252
  hfq_factor_df.reset_index(inplace=True)
250
- hfq_factor_df['date'] = pd.to_datetime(hfq_factor_df['date']).dt.date
253
+ hfq_factor_df["date"] = pd.to_datetime(hfq_factor_df["date"]).dt.date
251
254
  return hfq_factor_df
252
255
 
253
256
  if adjust == "qfq-factor":
@@ -259,7 +262,7 @@ def stock_zh_kcb_daily(symbol: str = "sh688399", adjust: str = "") -> pd.DataFra
259
262
  qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)
260
263
  del qfq_factor_df["date"]
261
264
  qfq_factor_df.reset_index(inplace=True)
262
- qfq_factor_df['date'] = pd.to_datetime(qfq_factor_df['date']).dt.date
265
+ qfq_factor_df["date"] = pd.to_datetime(qfq_factor_df["date"]).dt.date
263
266
  return qfq_factor_df
264
267
 
265
268
 
File without changes
@@ -0,0 +1,170 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/3/22 18:00
5
+ Desc: 东方财富网-行情中心-沪深京板块-概念板块-名称
6
+ https://quote.eastmoney.com/center/boardlist.html#concept_board
7
+ 异步接口-测试版
8
+ """
9
+
10
+ import asyncio
11
+ from typing import Dict, List
12
+
13
+ import aiohttp
14
+ import pandas as pd
15
+
16
+
17
+ async def fetch_single_page(
18
+ session: aiohttp.ClientSession, url: str, params: Dict
19
+ ) -> Dict:
20
+ """异步获取单页数据"""
21
+ async with session.get(url, params=params, ssl=False) as response:
22
+ return await response.json()
23
+
24
+
25
+ async def fetch_all_pages_async(url: str, base_params: Dict) -> List[Dict]:
26
+ """异步获取所有页面数据"""
27
+ # 首先获取总数以计算页数
28
+ first_page_params = base_params.copy()
29
+ first_page_params["pn"] = "1"
30
+
31
+ async with aiohttp.ClientSession() as session:
32
+ first_page_data = await fetch_single_page(session, url, first_page_params)
33
+
34
+ # 检查是否成功获取数据
35
+ if first_page_data.get("rc") != 0 or not first_page_data.get("data"):
36
+ return [first_page_data] # 返回错误信息
37
+
38
+ total = first_page_data["data"]["total"]
39
+ page_size = int(base_params["pz"])
40
+ total_pages = (total + page_size - 1) // page_size
41
+
42
+ # 限制页数,避免过大请求
43
+ total_pages = min(total_pages, 100)
44
+
45
+ # 创建所有页面的任务
46
+ tasks = []
47
+ for page in range(1, total_pages + 1):
48
+ page_params = base_params.copy()
49
+ page_params["pn"] = str(page)
50
+ tasks.append(fetch_single_page(session, url, page_params))
51
+
52
+ # 并发执行所有任务
53
+ results = await asyncio.gather(*tasks)
54
+ return results
55
+
56
+
57
+ def process_concept_board_data(page_results: List[Dict]) -> pd.DataFrame:
58
+ """处理概念板块数据,转换为DataFrame"""
59
+ all_data = []
60
+
61
+ for result in page_results:
62
+ if result.get("data") and result["data"].get("diff"):
63
+ page_data = result["data"]["diff"]
64
+ all_data.extend(page_data)
65
+
66
+ if not all_data:
67
+ return pd.DataFrame()
68
+
69
+ temp_df = pd.DataFrame(all_data)
70
+
71
+ # 转换数值类型,确保排序正确
72
+ numeric_columns = ["f2", "f3", "f4", "f8", "f20", "f104", "f105", "f136"]
73
+ for col in numeric_columns:
74
+ if col in temp_df.columns:
75
+ temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
76
+
77
+ # 按涨跌幅(f3)降序排序
78
+ if "f3" in temp_df.columns:
79
+ temp_df.sort_values(by="f3", ascending=False, inplace=True)
80
+
81
+ # 重命名列
82
+ columns_map = {
83
+ "f2": "最新价",
84
+ "f3": "涨跌幅",
85
+ "f4": "涨跌额",
86
+ "f8": "换手率",
87
+ "f12": "板块代码",
88
+ "f14": "板块名称",
89
+ "f20": "总市值",
90
+ "f104": "上涨家数",
91
+ "f105": "下跌家数",
92
+ "f128": "领涨股票",
93
+ "f136": "领涨股票-涨跌幅",
94
+ }
95
+
96
+ # 选择需要的列并重命名
97
+ selected_columns = list(columns_map.keys())
98
+ available_columns = [col for col in selected_columns if col in temp_df.columns]
99
+ temp_df = temp_df[available_columns]
100
+ temp_df.rename(columns=columns_map, inplace=True)
101
+
102
+ # 重置索引并添加排名列
103
+ temp_df.reset_index(drop=True, inplace=True)
104
+ temp_df.insert(0, "排名", range(1, len(temp_df) + 1))
105
+
106
+ # 调整列顺序,与原函数保持一致
107
+ final_columns = [
108
+ "排名",
109
+ "板块名称",
110
+ "板块代码",
111
+ "最新价",
112
+ "涨跌额",
113
+ "涨跌幅",
114
+ "总市值",
115
+ "换手率",
116
+ "上涨家数",
117
+ "下跌家数",
118
+ "领涨股票",
119
+ "领涨股票-涨跌幅",
120
+ ]
121
+
122
+ # 只保留存在的列
123
+ final_columns = [col for col in final_columns if col in temp_df.columns]
124
+ temp_df = temp_df[final_columns]
125
+
126
+ return temp_df
127
+
128
+
129
+ async def stock_board_concept_name_em_async() -> pd.DataFrame:
130
+ """
131
+ 异步获取东方财富网-行情中心-沪深京板块-概念板块-名称
132
+ https://quote.eastmoney.com/center/boardlist.html#concept_board
133
+ :return: 概念板块-名称
134
+ :rtype: pandas.DataFrame
135
+ """
136
+ url = "https://79.push2.eastmoney.com/api/qt/clist/get"
137
+ params = {
138
+ "pn": "1",
139
+ "pz": "100",
140
+ "po": "1", # 按涨跌幅排序,1为降序
141
+ "np": "1",
142
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
143
+ "fltt": "2",
144
+ "invt": "2",
145
+ "fid": "f3", # 按涨跌幅排序
146
+ "fs": "m:90 t:3 f:!50",
147
+ "fields": "f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136",
148
+ }
149
+
150
+ results = await fetch_all_pages_async(url, params)
151
+ return process_concept_board_data(results)
152
+
153
+
154
+ def stock_board_concept_name_em() -> pd.DataFrame:
155
+ """
156
+ 东方财富网-行情中心-沪深京板块-概念板块-名称 (同步接口)
157
+ https://quote.eastmoney.com/center/boardlist.html#concept_board
158
+ :return: 概念板块-名称
159
+ :rtype: pandas.DataFrame
160
+ """
161
+ import nest_asyncio
162
+
163
+ nest_asyncio.apply()
164
+ return asyncio.run(stock_board_concept_name_em_async())
165
+
166
+
167
+ if __name__ == "__main__":
168
+ # 测试同步接口
169
+ stock_board_concept_name_em_df = stock_board_concept_name_em()
170
+ print(stock_board_concept_name_em_df)
@@ -0,0 +1,258 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/3/22 18:00
5
+ Desc: 东方财富网-数据中心-资金流向-排名
6
+ https://data.eastmoney.com/zjlx/detail.html
7
+ 异步接口-测试版
8
+ """
9
+
10
+ import asyncio
11
+ from typing import Dict, List
12
+
13
+ import aiohttp
14
+ import pandas as pd
15
+
16
+
17
+ async def fetch_single_page(
18
+ session: aiohttp.ClientSession, url: str, params: Dict
19
+ ) -> Dict:
20
+ """异步获取单页数据"""
21
+ async with session.get(url, params=params, ssl=False) as response:
22
+ return await response.json()
23
+
24
+
25
+ async def fetch_all_pages_async(url: str, base_params: Dict) -> List[Dict]:
26
+ """异步获取所有页面数据"""
27
+ # 首先获取总数以计算页数
28
+ first_page_params = base_params.copy()
29
+ first_page_params["pn"] = "1"
30
+
31
+ async with aiohttp.ClientSession() as session:
32
+ first_page_data = await fetch_single_page(session, url, first_page_params)
33
+
34
+ # 检查是否成功获取数据
35
+ if first_page_data.get("rc") != 0 or not first_page_data.get("data"):
36
+ return [first_page_data] # 返回错误信息
37
+
38
+ total = first_page_data["data"]["total"]
39
+ page_size = int(base_params["pz"])
40
+ total_pages = (total + page_size - 1) // page_size
41
+
42
+ # 限制页数,避免过大请求
43
+ total_pages = min(total_pages, 100)
44
+
45
+ # 创建所有页面的任务
46
+ tasks = []
47
+ for page in range(1, total_pages + 1):
48
+ page_params = base_params.copy()
49
+ page_params["pn"] = str(page)
50
+ tasks.append(fetch_single_page(session, url, page_params))
51
+
52
+ # 并发执行所有任务
53
+ results = await asyncio.gather(*tasks)
54
+ return results
55
+
56
+
57
+ def process_fund_flow_data(page_results: List[Dict], indicator: str) -> pd.DataFrame:
58
+ """处理资金流向排名数据,转换为DataFrame"""
59
+ all_data = []
60
+
61
+ for result in page_results:
62
+ if result.get("data") and result["data"].get("diff"):
63
+ page_data = result["data"]["diff"]
64
+ all_data.extend(page_data)
65
+
66
+ if not all_data:
67
+ return pd.DataFrame()
68
+
69
+ temp_df = pd.DataFrame(all_data)
70
+
71
+ # 根据不同的指标设置列名并选择需要的列
72
+ if indicator == "今日":
73
+ columns_map = {
74
+ "f12": "代码",
75
+ "f14": "名称",
76
+ "f2": "最新价",
77
+ "f3": "今日涨跌幅",
78
+ "f62": "今日主力净流入-净额",
79
+ "f184": "今日主力净流入-净占比",
80
+ "f66": "今日超大单净流入-净额",
81
+ "f69": "今日超大单净流入-净占比",
82
+ "f72": "今日大单净流入-净额",
83
+ "f75": "今日大单净流入-净占比",
84
+ "f78": "今日中单净流入-净额",
85
+ "f81": "今日中单净流入-净占比",
86
+ "f84": "今日小单净流入-净额",
87
+ "f87": "今日小单净流入-净占比",
88
+ }
89
+ main_column = "f62" # 今日主力净流入-净额
90
+
91
+ elif indicator == "3日":
92
+ columns_map = {
93
+ "f12": "代码",
94
+ "f14": "名称",
95
+ "f2": "最新价",
96
+ "f127": "3日涨跌幅",
97
+ "f267": "3日主力净流入-净额",
98
+ "f268": "3日主力净流入-净占比",
99
+ "f269": "3日超大单净流入-净额",
100
+ "f270": "3日超大单净流入-净占比",
101
+ "f271": "3日大单净流入-净额",
102
+ "f272": "3日大单净流入-净占比",
103
+ "f273": "3日中单净流入-净额",
104
+ "f274": "3日中单净流入-净占比",
105
+ "f275": "3日小单净流入-净额",
106
+ "f276": "3日小单净流入-净占比",
107
+ }
108
+ main_column = "f267" # 3日主力净流入-净额
109
+
110
+ elif indicator == "5日":
111
+ columns_map = {
112
+ "f12": "代码",
113
+ "f14": "名称",
114
+ "f2": "最新价",
115
+ "f109": "5日涨跌幅",
116
+ "f164": "5日主力净流入-净额",
117
+ "f165": "5日主力净流入-净占比",
118
+ "f166": "5日超大单净流入-净额",
119
+ "f167": "5日超大单净流入-净占比",
120
+ "f168": "5日大单净流入-净额",
121
+ "f169": "5日大单净流入-净占比",
122
+ "f170": "5日中单净流入-净额",
123
+ "f171": "5日中单净流入-净占比",
124
+ "f172": "5日小单净流入-净额",
125
+ "f173": "5日小单净流入-净占比",
126
+ }
127
+ main_column = "f164" # 5日主力净流入-净额
128
+
129
+ elif indicator == "10日":
130
+ columns_map = {
131
+ "f12": "代码",
132
+ "f14": "名称",
133
+ "f2": "最新价",
134
+ "f160": "10日涨跌幅",
135
+ "f174": "10日主力净流入-净额",
136
+ "f175": "10日主力净流入-净占比",
137
+ "f176": "10日超大单净流入-净额",
138
+ "f177": "10日超大单净流入-净占比",
139
+ "f178": "10日大单净流入-净额",
140
+ "f179": "10日大单净流入-净占比",
141
+ "f180": "10日中单净流入-净额",
142
+ "f181": "10日中单净流入-净占比",
143
+ "f182": "10日小单净流入-净额",
144
+ "f183": "10日小单净流入-净占比",
145
+ }
146
+ main_column = "f174" # 10日主力净流入-净额
147
+
148
+ # 确保数值型列为数值类型
149
+ numeric_columns = [
150
+ col
151
+ for col in temp_df.columns
152
+ if col.startswith("f") and col not in ["f12", "f14"]
153
+ ]
154
+ for col in numeric_columns:
155
+ if col in temp_df.columns:
156
+ temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
157
+
158
+ # 按照主力净流入额降序排序
159
+ if main_column in temp_df.columns:
160
+ temp_df.sort_values(by=main_column, ascending=False, inplace=True)
161
+
162
+ # 首先重命名列
163
+ temp_df.rename(columns=columns_map, inplace=True)
164
+
165
+ # 选择需要的列
166
+ selected_columns = list(columns_map.values())
167
+ available_columns = [col for col in selected_columns if col in temp_df.columns]
168
+ temp_df = temp_df[available_columns]
169
+
170
+ # 重置索引并生成序号列
171
+ temp_df.reset_index(drop=True, inplace=True)
172
+ temp_df.insert(0, "序号", range(1, len(temp_df) + 1))
173
+
174
+ return temp_df
175
+
176
+
177
+ async def stock_individual_fund_flow_rank_async(indicator: str = "5日") -> pd.DataFrame:
178
+ """
179
+ 异步获取东方财富网-数据中心-资金流向-排名
180
+ https://data.eastmoney.com/zjlx/detail.html
181
+ :param indicator: choice of {"今日", "3日", "5日", "10日"}
182
+ :type indicator: str
183
+ :return: 指定 indicator 资金流向排行
184
+ :rtype: pandas.DataFrame
185
+ """
186
+ indicator_map = {
187
+ "今日": [
188
+ "f62",
189
+ "f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f204,f205,f124",
190
+ ],
191
+ "3日": [
192
+ "f267",
193
+ "f12,f14,f2,f127,f267,f268,f269,f270,f271,f272,f273,f274,f275,f276,f257,f258,f124",
194
+ ],
195
+ "5日": [
196
+ "f164",
197
+ "f12,f14,f2,f109,f164,f165,f166,f167,f168,f169,f170,f171,f172,f173,f257,f258,f124",
198
+ ],
199
+ "10日": [
200
+ "f174",
201
+ "f12,f14,f2,f160,f174,f175,f176,f177,f178,f179,f180,f181,f182,f183,f260,f261,f124",
202
+ ],
203
+ }
204
+
205
+ url = "https://push2.eastmoney.com/api/qt/clist/get"
206
+ params = {
207
+ "fid": indicator_map[indicator][0],
208
+ "po": "1", # 按照降序排列
209
+ "pz": "100", # 每页100条
210
+ "pn": "1", # 从第1页开始
211
+ "np": "1",
212
+ "fltt": "2",
213
+ "invt": "2",
214
+ "ut": "b2884a393a59ad64002292a3e90d46a5",
215
+ "fs": "m:0+t:6+f:!2,m:0+t:13+f:!2,m:0+t:80+f:!2,m:1+t:2+f:!2,m:1+t:23+f:!2,m:0+t:7+f:!2,m:1+t:3+f:!2",
216
+ "fields": indicator_map[indicator][1],
217
+ }
218
+
219
+ results = await fetch_all_pages_async(url, params)
220
+ return process_fund_flow_data(results, indicator)
221
+
222
+
223
+ def stock_individual_fund_flow_rank(indicator: str = "5日") -> pd.DataFrame:
224
+ """
225
+ 东方财富网-数据中心-资金流向-排名 (同步接口)
226
+ https://data.eastmoney.com/zjlx/detail.html
227
+ :param indicator: choice of {"今日", "3日", "5日", "10日"}
228
+ :type indicator: str
229
+ :return: 指定 indicator 资金流向排行
230
+ :rtype: pandas.DataFrame
231
+ """
232
+ import nest_asyncio
233
+
234
+ nest_asyncio.apply()
235
+ return asyncio.run(stock_individual_fund_flow_rank_async(indicator))
236
+
237
+
238
+ if __name__ == "__main__":
239
+ # 测试同步接口
240
+ stock_individual_fund_flow_rank_df = stock_individual_fund_flow_rank(
241
+ indicator="今日"
242
+ )
243
+ print(stock_individual_fund_flow_rank_df)
244
+
245
+ stock_individual_fund_flow_rank_df = stock_individual_fund_flow_rank(
246
+ indicator="3日"
247
+ )
248
+ print(stock_individual_fund_flow_rank_df)
249
+
250
+ stock_individual_fund_flow_rank_df = stock_individual_fund_flow_rank(
251
+ indicator="5日"
252
+ )
253
+ print(stock_individual_fund_flow_rank_df)
254
+
255
+ stock_individual_fund_flow_rank_df = stock_individual_fund_flow_rank(
256
+ indicator="10日"
257
+ )
258
+ print(stock_individual_fund_flow_rank_df)