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
@@ -5,6 +5,7 @@ Date: 2019/9/30 13:58
5
5
  Desc: 奇货可查网站目前已经商业化运营, 特提供奇货可查-工具数据接口, 方便您程序化调用
6
6
  注:期货价格为收盘价; 现货价格来自网络; 基差=现货价格-期货价格; 基差率=(现货价格-期货价格)/现货价格 * 100 %.
7
7
  """
8
+
8
9
  from typing import AnyStr
9
10
 
10
11
  import pandas as pd
@@ -18,7 +19,8 @@ def qhkc_tool_foreign(url: AnyStr = QHKC_TOOL_FOREIGN_URL):
18
19
  奇货可查-工具-外盘比价
19
20
  实时更新数据, 暂不能查询历史数据
20
21
  :param url: str 网址
21
- :return: pd.DataFrame
22
+ :return: 外盘比价
23
+ :rtype: pandas.DataFrame
22
24
  name base_time base_price latest_price rate
23
25
  伦敦铜 10/08 01:00 5704 5746.5 0.745
24
26
  伦敦锌 10/08 01:00 2291.25 2305.75 0.633
@@ -108,60 +110,60 @@ def qhkc_tool_nebula(url: AnyStr = QHKC_TOOL_FOREIGN_URL):
108
110
 
109
111
  def qhkc_tool_gdp(url: AnyStr = QHKC_TOOL_GDP_URL):
110
112
  """
111
- 奇货可查-工具-各地区经济数据
112
- 实时更新数据, 暂不能查询历史数据
113
- :param url:
114
- :return: pandas.DataFrame
115
- 国家 国内生产总值 国内生产总值YoY 国内生产总值QoQ ... 预算 债务 经常账户 人口
116
- 美国 20494 2.30% 2.00% ... -3.80% 106.10% -2.40 327.17
117
- 欧元区 13670 1.20% 0.20% ... -0.50% 85.10% 2.90 341.15
118
- 中国 13608 6.20% 1.60% ... -4.20% 50.50% 0.40 1395.38
119
- 日本 4971 1.00% 0.30% ... -3.80% 238.20% 3.50 126.25
120
- 德国 3997 0.40% -0.10% ... 1.70% 60.90% 7.30 82.85
121
- 英国 2825 1.30% -0.20% ... -2.00% 84.70% -3.90 66.19
122
- 法国 2778 1.40% 0.30% ... -2.50% 98.40% -0.30 67.19
123
- 印度 2726 5.00% 1.00% ... -3.42% 68.30% -2.30 1298.04
124
- 意大利 2074 -0.10% 0.00% ... -2.10% 134.80% 2.50 60.48
125
- 巴西 1869 1.00% 0.40% ... -7.10% 77.22% -0.77 208.49
126
- 加拿大 1709 1.60% 0.90% ... -0.70% 90.60% -2.60 37.31
127
- 俄罗斯 1658 0.90% 0.20% ... 2.70% 13.50% 7.00 146.90
128
- 韩国 1619 2.00% 1.00% ... -1.60% 36.60% 4.70 51.61
129
- 澳大利亚 1432 1.40% 0.50% ... -0.60% 40.70% -1.50 25.18
130
- 西班牙 1426 2.00% 0.40% ... -2.50% 97.10% 0.90 46.66
131
- 墨西哥 1224 -0.80% 0.00% ... -2.00% 46.00% -1.80 125.33
132
- 印尼 1042 5.05% 4.20% ... -1.76% 29.80% -3.00 264.20
133
- 荷兰 913 1.80% 0.40% ... 1.50% 52.40% 10.80 17.12
134
- 沙特阿拉伯 782 0.50% 0.00% ... -9.20% 19.10% 9.20 33.41
135
- 土耳其 767 -1.50% 1.20% ... -2.00% 30.40% -3.50 82.00
136
- 瑞士 706 0.20% 0.30% ... 1.30% 27.70% 10.20 8.48
137
- 台湾 589 2.40% 0.67% ... -1.90% 30.90% 11.60 23.58
138
- 波兰 586 4.50% 0.80% ... -0.40% 48.90% -0.70 37.98
139
- 瑞典 551 1.00% 0.10% ... 0.90% 38.80% 2.00 10.12
140
- 比利时 532 1.20% 0.20% ... -0.70% 102.00% -1.30 11.41
141
- 阿根廷 519 0.60% -0.30% ... -5.50% 86.20% -5.40 44.50
142
- 泰国 505 2.30% 0.60% ... -2.50% 41.80% 7.50 66.41
143
- 委内瑞拉 482 -22.50% -5.40% ... -20.00% 23.00% 6.00 31.83
144
- 奥地利 456 1.50% 0.30% ... 0.10% 73.80% 2.30 8.82
145
- 伊朗 454 1.80% NaN ... -3.90% 44.20% 1.30 82.10
146
- 挪威 435 -0.70% 0.30% ... 7.30% 36.30% 8.10 5.30
147
- 阿联酋 414 2.20% 1.70% ... -1.80% 18.60% 9.10 9.60
148
- 尼日利亚 397 1.94% 2.85% ... -2.80% 18.20% 2.30 195.87
149
- 爱尔兰 376 5.80% 0.70% ... 0.00% 64.80% 9.10 4.84
150
- 以色列 370 3.20% 0.30% ... -1.90% 61.00% 1.90 8.97
151
- 南非 366 0.90% 3.10% ... -4.40% 55.80% -3.60 58.78
152
- 新加坡 364 0.10% -3.30% ... 0.40% 112.20% 17.70 5.64
153
- 香港 363 0.50% -0.40% ... 2.10% 38.40% 4.30 7.48
154
- 马来西亚 354 4.90% 1.00% ... -3.70% 51.80% 2.30 32.40
155
- 丹麦 351 2.60% 0.90% ... 0.50% 34.10% 6.10 5.78
156
- 菲律宾 331 5.50% 1.40% ... -3.20% 41.90% -2.40 107.00
157
- 哥伦比亚 330 3.00% 1.40% ... -3.10% 50.50% -3.80 49.83
158
- 巴基斯坦 313 5.20% 5.79% ... -6.60% 72.50% -4.80 212.22
159
- 智利 298 1.90% 0.80% ... -1.70% 25.60% -3.10 18.75
160
- 芬兰 276 1.20% 0.50% ... -0.70% 58.90% -1.90 5.51
161
- 孟加拉国 274 7.90% 7.90% ... -4.80% 27.90% -3.60 163.70
162
- 埃及 251 5.70% 5.40% ... -8.20% 90.50% -2.40 98.00
163
- 越南 245 7.31% 6.88% ... -3.50% 57.50% 3.00 94.67
164
- 捷克共和国 244 2.70% 0.70% ... 0.90% 32.70% 0.30 10.61
113
+ 奇货可查-工具-各地区经济数据
114
+ 实时更新数据, 暂不能查询历史数据
115
+ :param url:
116
+ :return: pandas.DataFrame
117
+ 国家 国内生产总值 国内生产总值YoY 国内生产总值QoQ ... 预算 债务 经常账户 人口
118
+ 美国 20494 2.30% 2.00% ... -3.80% 106.10% -2.40 327.17
119
+ 欧元区 13670 1.20% 0.20% ... -0.50% 85.10% 2.90 341.15
120
+ 中国 13608 6.20% 1.60% ... -4.20% 50.50% 0.40 1395.38
121
+ 日本 4971 1.00% 0.30% ... -3.80% 238.20% 3.50 126.25
122
+ 德国 3997 0.40% -0.10% ... 1.70% 60.90% 7.30 82.85
123
+ 英国 2825 1.30% -0.20% ... -2.00% 84.70% -3.90 66.19
124
+ 法国 2778 1.40% 0.30% ... -2.50% 98.40% -0.30 67.19
125
+ 印度 2726 5.00% 1.00% ... -3.42% 68.30% -2.30 1298.04
126
+ 意大利 2074 -0.10% 0.00% ... -2.10% 134.80% 2.50 60.48
127
+ 巴西 1869 1.00% 0.40% ... -7.10% 77.22% -0.77 208.49
128
+ 加拿大 1709 1.60% 0.90% ... -0.70% 90.60% -2.60 37.31
129
+ 俄罗斯 1658 0.90% 0.20% ... 2.70% 13.50% 7.00 146.90
130
+ 韩国 1619 2.00% 1.00% ... -1.60% 36.60% 4.70 51.61
131
+ 澳大利亚 1432 1.40% 0.50% ... -0.60% 40.70% -1.50 25.18
132
+ 西班牙 1426 2.00% 0.40% ... -2.50% 97.10% 0.90 46.66
133
+ 墨西哥 1224 -0.80% 0.00% ... -2.00% 46.00% -1.80 125.33
134
+ 印尼 1042 5.05% 4.20% ... -1.76% 29.80% -3.00 264.20
135
+ 荷兰 913 1.80% 0.40% ... 1.50% 52.40% 10.80 17.12
136
+ 沙特阿拉伯 782 0.50% 0.00% ... -9.20% 19.10% 9.20 33.41
137
+ 土耳其 767 -1.50% 1.20% ... -2.00% 30.40% -3.50 82.00
138
+ 瑞士 706 0.20% 0.30% ... 1.30% 27.70% 10.20 8.48
139
+ 台湾 589 2.40% 0.67% ... -1.90% 30.90% 11.60 23.58
140
+ 波兰 586 4.50% 0.80% ... -0.40% 48.90% -0.70 37.98
141
+ 瑞典 551 1.00% 0.10% ... 0.90% 38.80% 2.00 10.12
142
+ 比利时 532 1.20% 0.20% ... -0.70% 102.00% -1.30 11.41
143
+ 阿根廷 519 0.60% -0.30% ... -5.50% 86.20% -5.40 44.50
144
+ 泰国 505 2.30% 0.60% ... -2.50% 41.80% 7.50 66.41
145
+ 委内瑞拉 482 -22.50% -5.40% ... -20.00% 23.00% 6.00 31.83
146
+ 奥地利 456 1.50% 0.30% ... 0.10% 73.80% 2.30 8.82
147
+ 伊朗 454 1.80% NaN ... -3.90% 44.20% 1.30 82.10
148
+ 挪威 435 -0.70% 0.30% ... 7.30% 36.30% 8.10 5.30
149
+ 阿联酋 414 2.20% 1.70% ... -1.80% 18.60% 9.10 9.60
150
+ 尼日利亚 397 1.94% 2.85% ... -2.80% 18.20% 2.30 195.87
151
+ 爱尔兰 376 5.80% 0.70% ... 0.00% 64.80% 9.10 4.84
152
+ 以色列 370 3.20% 0.30% ... -1.90% 61.00% 1.90 8.97
153
+ 南非 366 0.90% 3.10% ... -4.40% 55.80% -3.60 58.78
154
+ 新加坡 364 0.10% -3.30% ... 0.40% 112.20% 17.70 5.64
155
+ 香港 363 0.50% -0.40% ... 2.10% 38.40% 4.30 7.48
156
+ 马来西亚 354 4.90% 1.00% ... -3.70% 51.80% 2.30 32.40
157
+ 丹麦 351 2.60% 0.90% ... 0.50% 34.10% 6.10 5.78
158
+ 菲律宾 331 5.50% 1.40% ... -3.20% 41.90% -2.40 107.00
159
+ 哥伦比亚 330 3.00% 1.40% ... -3.10% 50.50% -3.80 49.83
160
+ 巴基斯坦 313 5.20% 5.79% ... -6.60% 72.50% -4.80 212.22
161
+ 智利 298 1.90% 0.80% ... -1.70% 25.60% -3.10 18.75
162
+ 芬兰 276 1.20% 0.50% ... -0.70% 58.90% -1.90 5.51
163
+ 孟加拉国 274 7.90% 7.90% ... -4.80% 27.90% -3.60 163.70
164
+ 埃及 251 5.70% 5.40% ... -8.20% 90.50% -2.40 98.00
165
+ 越南 245 7.31% 6.88% ... -3.50% 57.50% 3.00 94.67
166
+ 捷克共和国 244 2.70% 0.70% ... 0.90% 32.70% 0.30 10.61
165
167
  """
166
168
  data = pd.read_html(url, encoding="utf-8")
167
169
  columns_list = data[0].columns.tolist()
@@ -171,7 +173,8 @@ def qhkc_tool_gdp(url: AnyStr = QHKC_TOOL_GDP_URL):
171
173
 
172
174
 
173
175
  if __name__ == "__main__":
174
- df = qhkc_tool_foreign()
175
- print(df)
176
- df = qhkc_tool_gdp()
177
- print(df)
176
+ qhkc_tool_foreign_df = qhkc_tool_foreign()
177
+ print(qhkc_tool_foreign_df)
178
+
179
+ qhkc_tool_gdp_df = qhkc_tool_gdp()
180
+ print(qhkc_tool_gdp_df)
akshare/rate/__init__.py CHANGED
@@ -2,5 +2,5 @@
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
4
  Date: 2020/10/29 13:03
5
- Desc:
5
+ Desc:
6
6
  """
akshare/rate/repo_rate.py CHANGED
@@ -4,6 +4,7 @@
4
4
  Date: 2024/1/20 23:04
5
5
  Desc: 中国外汇交易中心暨全国银行间同业拆借中心-回购定盘利率-历史数据
6
6
  """
7
+
7
8
  import pandas as pd
8
9
  import requests
9
10
 
@@ -21,27 +22,29 @@ def repo_rate_query(symbol: str = "回购定盘利率") -> pd.DataFrame:
21
22
  url = "https://www.chinamoney.com.cn/r/cms/www/chinamoney/data/currency/frr-chrt.csv"
22
23
  temp_df = pd.read_csv(url, header=None)
23
24
  temp_df.dropna(axis=1, inplace=True)
24
- temp_df.columns = ['date', "FR001", "FR007", "FR014"]
25
- temp_df['date'] = pd.to_datetime(temp_df['date'], errors="coerce").dt.date
26
- temp_df['FR001'] = pd.to_numeric(temp_df['FR001'], errors="coerce")
27
- temp_df['FR007'] = pd.to_numeric(temp_df['FR007'], errors="coerce")
28
- temp_df['FR014'] = pd.to_numeric(temp_df['FR014'], errors="coerce")
29
- temp_df.sort_values(by=['date'], ignore_index=True, inplace=True)
25
+ temp_df.columns = ["date", "FR001", "FR007", "FR014"]
26
+ temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
27
+ temp_df["FR001"] = pd.to_numeric(temp_df["FR001"], errors="coerce")
28
+ temp_df["FR007"] = pd.to_numeric(temp_df["FR007"], errors="coerce")
29
+ temp_df["FR014"] = pd.to_numeric(temp_df["FR014"], errors="coerce")
30
+ temp_df.sort_values(by=["date"], ignore_index=True, inplace=True)
30
31
  return temp_df
31
32
  else:
32
33
  url = "https://www.chinamoney.com.cn/r/cms/www/chinamoney/data/currency/fdr-chrt.csv"
33
34
  temp_df = pd.read_csv(url, header=None)
34
35
  temp_df.dropna(axis=1, inplace=True)
35
- temp_df.columns = ['date', "FDR001", "FDR007", "FDR014"]
36
- temp_df['date'] = pd.to_datetime(temp_df['date'], errors="coerce").dt.date
37
- temp_df['FDR001'] = pd.to_numeric(temp_df['FDR001'], errors="coerce")
38
- temp_df['FDR007'] = pd.to_numeric(temp_df['FDR007'], errors="coerce")
39
- temp_df['FDR014'] = pd.to_numeric(temp_df['FDR014'], errors="coerce")
40
- temp_df.sort_values(by=['date'], ignore_index=True, inplace=True)
36
+ temp_df.columns = ["date", "FDR001", "FDR007", "FDR014"]
37
+ temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
38
+ temp_df["FDR001"] = pd.to_numeric(temp_df["FDR001"], errors="coerce")
39
+ temp_df["FDR007"] = pd.to_numeric(temp_df["FDR007"], errors="coerce")
40
+ temp_df["FDR014"] = pd.to_numeric(temp_df["FDR014"], errors="coerce")
41
+ temp_df.sort_values(by=["date"], ignore_index=True, inplace=True)
41
42
  return temp_df
42
43
 
43
44
 
44
- def repo_rate_hist(start_date: str = "20200930", end_date: str = "20201029") -> pd.DataFrame:
45
+ def repo_rate_hist(
46
+ start_date: str = "20200930", end_date: str = "20201029"
47
+ ) -> pd.DataFrame:
45
48
  """
46
49
  中国外汇交易中心暨全国银行间同业拆借中心-回购定盘利率-历史数据
47
50
  https://www.chinamoney.com.cn/chinese/bkfrr/
@@ -57,7 +60,6 @@ def repo_rate_hist(start_date: str = "20200930", end_date: str = "20201029") ->
57
60
  url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bk-currency/FrrHis"
58
61
  headers = {
59
62
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
60
-
61
63
  }
62
64
  params = {
63
65
  "lang": "CN",
@@ -68,27 +70,29 @@ def repo_rate_hist(start_date: str = "20200930", end_date: str = "20201029") ->
68
70
  data_json = r.json()
69
71
  temp_df = pd.DataFrame(data_json["records"])
70
72
  temp_df = pd.DataFrame([item for item in temp_df["frValueMap"].to_list()])
71
- temp_df = temp_df[[
72
- "date",
73
- "FR001",
74
- "FR007",
75
- "FR014",
76
- "FDR001",
77
- "FDR007",
78
- "FDR014",
79
- ]]
80
- temp_df['date'] = pd.to_datetime(temp_df['date'], errors="coerce").dt.date
81
- temp_df['FR001'] = pd.to_numeric(temp_df['FR001'], errors="coerce")
82
- temp_df['FR007'] = pd.to_numeric(temp_df['FR007'], errors="coerce")
83
- temp_df['FR014'] = pd.to_numeric(temp_df['FR014'], errors="coerce")
84
- temp_df['FDR001'] = pd.to_numeric(temp_df['FDR001'], errors="coerce")
85
- temp_df['FDR007'] = pd.to_numeric(temp_df['FDR007'], errors="coerce")
86
- temp_df['FDR014'] = pd.to_numeric(temp_df['FDR014'], errors="coerce")
87
- temp_df.sort_values(['date'], ignore_index=True, inplace=True)
73
+ temp_df = temp_df[
74
+ [
75
+ "date",
76
+ "FR001",
77
+ "FR007",
78
+ "FR014",
79
+ "FDR001",
80
+ "FDR007",
81
+ "FDR014",
82
+ ]
83
+ ]
84
+ temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
85
+ temp_df["FR001"] = pd.to_numeric(temp_df["FR001"], errors="coerce")
86
+ temp_df["FR007"] = pd.to_numeric(temp_df["FR007"], errors="coerce")
87
+ temp_df["FR014"] = pd.to_numeric(temp_df["FR014"], errors="coerce")
88
+ temp_df["FDR001"] = pd.to_numeric(temp_df["FDR001"], errors="coerce")
89
+ temp_df["FDR007"] = pd.to_numeric(temp_df["FDR007"], errors="coerce")
90
+ temp_df["FDR014"] = pd.to_numeric(temp_df["FDR014"], errors="coerce")
91
+ temp_df.sort_values(["date"], ignore_index=True, inplace=True)
88
92
  return temp_df
89
93
 
90
94
 
91
- if __name__ == '__main__':
95
+ if __name__ == "__main__":
92
96
  repo_rate_query_df = repo_rate_query(symbol="回购定盘利率")
93
97
  print(repo_rate_query_df)
94
98
 
akshare/reits/__init__.py CHANGED
@@ -2,5 +2,5 @@
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
4
  Date: 2021/8/27 15:49
5
- Desc:
5
+ Desc:
6
6
  """
@@ -1,15 +1,47 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/3 17:00
4
+ Date: 2025/8/26 15:00
5
5
  Desc: REITs 行情及信息
6
6
  https://quote.eastmoney.com/center/gridlist.html#fund_reits_all
7
7
  https://www.jisilu.cn/data/cnreits/#CnReits
8
8
  """
9
+
10
+ from functools import lru_cache
11
+ from typing import Dict
12
+
9
13
  import pandas as pd
10
14
  import requests
11
15
 
12
16
 
17
+ @lru_cache()
18
+ def __reits_code_market_map() -> Dict:
19
+ """
20
+ 东方财富网-行情中心-REITs-沪深 REITs
21
+ https://quote.eastmoney.com/center/gridlist.html#fund_reits_all
22
+ :return: 沪深 REITs-实时行情
23
+ :rtype: pandas.DataFrame
24
+ """
25
+ url = "https://95.push2.eastmoney.com/api/qt/clist/get"
26
+ params = {
27
+ "pn": "1",
28
+ "pz": "100",
29
+ "po": "1",
30
+ "np": "1",
31
+ "ut": "bd1d9ddb04089700cf9c27f6f7426281",
32
+ "fltt": "2",
33
+ "invt": "2",
34
+ "fid": "f3",
35
+ "fs": "m:1 t:9 e:97,m:0 t:10 e:97",
36
+ "fields": "f12,f13",
37
+ }
38
+ r = requests.get(url, params=params)
39
+ data_json = r.json()
40
+ temp_df = pd.DataFrame(data_json["data"]["diff"])
41
+ temp_dict = dict(zip(temp_df["f12"], temp_df["f13"]))
42
+ return temp_dict
43
+
44
+
13
45
  def reits_realtime_em() -> pd.DataFrame:
14
46
  """
15
47
  东方财富网-行情中心-REITs-沪深 REITs
@@ -17,10 +49,10 @@ def reits_realtime_em() -> pd.DataFrame:
17
49
  :return: 沪深 REITs-实时行情
18
50
  :rtype: pandas.DataFrame
19
51
  """
20
- url = "http://95.push2.eastmoney.com/api/qt/clist/get"
52
+ url = "https://95.push2.eastmoney.com/api/qt/clist/get"
21
53
  params = {
22
54
  "pn": "1",
23
- "pz": "500",
55
+ "pz": "100",
24
56
  "po": "1",
25
57
  "np": "1",
26
58
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
@@ -29,7 +61,6 @@ def reits_realtime_em() -> pd.DataFrame:
29
61
  "fid": "f3",
30
62
  "fs": "m:1 t:9 e:97,m:0 t:10 e:97",
31
63
  "fields": "f2,f3,f4,f5,f6,f12,f14,f15,f16,f17,f18",
32
- "_": "1630048369992",
33
64
  }
34
65
  r = requests.get(url, params=params)
35
66
  data_json = r.json()
@@ -50,6 +81,7 @@ def reits_realtime_em() -> pd.DataFrame:
50
81
  "f16": "最低价",
51
82
  "f17": "开盘价",
52
83
  "f18": "昨收",
84
+ "f13": "市场标识",
53
85
  },
54
86
  inplace=True,
55
87
  )
@@ -69,18 +101,122 @@ def reits_realtime_em() -> pd.DataFrame:
69
101
  "昨收",
70
102
  ]
71
103
  ]
72
- temp_df['最新价'] = pd.to_numeric(temp_df['最新价'], errors="coerce")
73
- temp_df['涨跌额'] = pd.to_numeric(temp_df['涨跌额'], errors="coerce")
74
- temp_df['涨跌幅'] = pd.to_numeric(temp_df['涨跌幅'], errors="coerce")
75
- temp_df['成交量'] = pd.to_numeric(temp_df['成交量'], errors="coerce")
76
- temp_df['成交额'] = pd.to_numeric(temp_df['成交额'], errors="coerce")
77
- temp_df['开盘价'] = pd.to_numeric(temp_df['开盘价'], errors="coerce")
78
- temp_df['最高价'] = pd.to_numeric(temp_df['最高价'], errors="coerce")
79
- temp_df['最低价'] = pd.to_numeric(temp_df['最低价'], errors="coerce")
80
- 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(temp_df["开盘价"], errors="coerce")
110
+ temp_df["最高价"] = pd.to_numeric(temp_df["最高价"], errors="coerce")
111
+ temp_df["最低价"] = pd.to_numeric(temp_df["最低价"], errors="coerce")
112
+ temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce")
113
+ return temp_df
114
+
115
+
116
+ def reits_hist_em(symbol: str = "508097") -> pd.DataFrame:
117
+ """
118
+ 东方财富网-行情中心-REITs-沪深 REITs-历史行情
119
+ https://quote.eastmoney.com/sh508097.html
120
+ :param symbol: REITs 代码
121
+ :type symbol: str
122
+ :return: 沪深 REITs-历史行情
123
+ :rtype: pandas.DataFrame
124
+ """
125
+ url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
126
+ code_market_dict = __reits_code_market_map()
127
+ params = {
128
+ "secid": f"{code_market_dict[symbol]}.{symbol}",
129
+ "klt": "101",
130
+ "fqt": "1",
131
+ "lmt": "10000",
132
+ "end": "20500000",
133
+ "iscca": "1",
134
+ "fields1": "f1,f2,f3,f4,f5,f6,f7,f8",
135
+ "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64",
136
+ "ut": "f057cbcbce2a86e2866ab8877db1d059",
137
+ "forcect": "1",
138
+ }
139
+ r = requests.get(url, params=params)
140
+ data_json = r.json()
141
+ temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
142
+ temp_df.columns = [
143
+ "日期",
144
+ "今开",
145
+ "最新价",
146
+ "最高",
147
+ "最低",
148
+ "成交量",
149
+ "成交额",
150
+ "振幅",
151
+ "-",
152
+ "-",
153
+ "换手",
154
+ "-",
155
+ "-",
156
+ "-",
157
+ ]
158
+ temp_df = temp_df[
159
+ ["日期", "今开", "最高", "最低", "最新价", "成交量", "成交额", "振幅", "换手"]
160
+ ]
161
+ temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
162
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
163
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
164
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
165
+ temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
166
+ temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
167
+ temp_df["振幅"] = pd.to_numeric(temp_df["振幅"], errors="coerce")
168
+ temp_df["换手"] = pd.to_numeric(temp_df["换手"], errors="coerce")
169
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
170
+ return temp_df
171
+
172
+
173
+ def reits_hist_min_em(symbol: str = "508097") -> pd.DataFrame:
174
+ """
175
+ 东方财富网-行情中心-REITs-沪深 REITs-历史行情
176
+ https://quote.eastmoney.com/sh508097.html
177
+ :param symbol: REITs 代码
178
+ :type symbol: str
179
+ :return: 沪深 REITs-历史行情
180
+ :rtype: pandas.DataFrame
181
+ """
182
+ url = "https://push2.eastmoney.com/api/qt/stock/trends2/get"
183
+ code_market_dict = __reits_code_market_map()
184
+ params = {
185
+ "secid": f"{code_market_dict[symbol]}.{symbol}",
186
+ "fields1": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f17",
187
+ "fields2": "f51,f53,f54,f55,f56,f57,f58",
188
+ "iscr": "0",
189
+ "iscca": "0",
190
+ "ut": "f057cbcbce2a86e2866ab8877db1d059",
191
+ "ndays": "5",
192
+ }
193
+ r = requests.get(url, params=params)
194
+ data_json = r.json()
195
+ temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["trends"]])
196
+ temp_df.columns = [
197
+ "时间",
198
+ "最新价",
199
+ "最高",
200
+ "最低",
201
+ "成交量",
202
+ "成交额",
203
+ "昨收",
204
+ ]
205
+
206
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
207
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
208
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
209
+ temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
210
+ temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
81
211
  return temp_df
82
212
 
83
213
 
84
214
  if __name__ == "__main__":
85
215
  reits_realtime_em_df = reits_realtime_em()
86
216
  print(reits_realtime_em_df)
217
+
218
+ reits_hist_em_df = reits_hist_em(symbol="508097")
219
+ print(reits_hist_em_df)
220
+
221
+ reits_hist_min_em_df = reits_hist_min_em(symbol="508097")
222
+ print(reits_hist_min_em_df)
akshare/request.py ADDED
@@ -0,0 +1,117 @@
1
+ import time
2
+
3
+ import requests
4
+ from requests.exceptions import RequestException
5
+
6
+ from akshare.exceptions import NetworkError, APIError, RateLimitError, DataParsingError
7
+ from akshare.utils.context import config
8
+
9
+
10
+ def make_request_with_retry_json(
11
+ url, params=None, headers=None, proxies=None, max_retries=3, retry_delay=1
12
+ ):
13
+ """
14
+ 发送 HTTP GET 请求,支持重试机制和代理设置。
15
+
16
+ :param url: 请求的 URL
17
+ :param params: URL 参数 (可选)
18
+ :param headers: 请求头 (可选)
19
+ :param proxies: 代理设置 (可选)
20
+ :param max_retries: 最大重试次数
21
+ :param retry_delay: 初始重试延迟(秒)
22
+ :return: 解析后的 JSON 数据
23
+ """
24
+ if proxies is None:
25
+ proxies = config.proxies
26
+ for attempt in range(max_retries):
27
+ try:
28
+ response = requests.get(
29
+ url, params=params, headers=headers, proxies=proxies
30
+ )
31
+ if response.status_code == 200:
32
+ try:
33
+ data = response.json()
34
+ if not data:
35
+ raise DataParsingError("Empty response data")
36
+ return data
37
+ except ValueError:
38
+ raise DataParsingError("Failed to parse JSON response")
39
+ elif response.status_code == 429:
40
+ raise RateLimitError(
41
+ f"Rate limit exceeded. Status code: {response.status_code}"
42
+ )
43
+ else:
44
+ raise APIError(
45
+ f"API request failed. Status code: {response.status_code}"
46
+ )
47
+
48
+ except (RequestException, RateLimitError, APIError, DataParsingError) as e:
49
+ if attempt == max_retries - 1:
50
+ if isinstance(e, RateLimitError):
51
+ raise
52
+ elif isinstance(e, (APIError, DataParsingError)):
53
+ raise
54
+ else:
55
+ raise NetworkError(
56
+ f"Failed to connect after {max_retries} attempts: {str(e)}"
57
+ )
58
+
59
+ time.sleep(retry_delay)
60
+ retry_delay *= 2 # 指数退避策略
61
+
62
+ raise NetworkError(f"Failed to connect after {max_retries} attempts")
63
+
64
+
65
+ def make_request_with_retry_text(
66
+ url, params=None, headers=None, proxies=None, max_retries=3, retry_delay=1
67
+ ):
68
+ """
69
+ 发送 HTTP GET 请求,支持重试机制和代理设置。
70
+
71
+ :param url: 请求的 URL
72
+ :param params: URL 参数 (可选)
73
+ :param headers: 请求头 (可选)
74
+ :param proxies: 代理设置 (可选)
75
+ :param max_retries: 最大重试次数
76
+ :param retry_delay: 初始重试延迟(秒)
77
+ :return: 解析后的 JSON 数据
78
+ """
79
+ if proxies is None:
80
+ proxies = config.proxies
81
+ for attempt in range(max_retries):
82
+ try:
83
+ response = requests.get(
84
+ url, params=params, headers=headers, proxies=proxies
85
+ )
86
+ if response.status_code == 200:
87
+ try:
88
+ data = response.text
89
+ if not data:
90
+ raise DataParsingError("Empty response data")
91
+ return data
92
+ except ValueError:
93
+ raise DataParsingError("Failed to parse JSON response")
94
+ elif response.status_code == 429:
95
+ raise RateLimitError(
96
+ f"Rate limit exceeded. Status code: {response.status_code}"
97
+ )
98
+ else:
99
+ raise APIError(
100
+ f"API request failed. Status code: {response.status_code}"
101
+ )
102
+
103
+ except (RequestException, RateLimitError, APIError, DataParsingError) as e:
104
+ if attempt == max_retries - 1:
105
+ if isinstance(e, RateLimitError):
106
+ raise
107
+ elif isinstance(e, (APIError, DataParsingError)):
108
+ raise
109
+ else:
110
+ raise NetworkError(
111
+ f"Failed to connect after {max_retries} attempts: {str(e)}"
112
+ )
113
+
114
+ time.sleep(retry_delay)
115
+ retry_delay *= 2 # 指数退避策略
116
+
117
+ raise NetworkError(f"Failed to connect after {max_retries} attempts")
akshare/spot/__init__.py CHANGED
@@ -2,5 +2,5 @@
2
2
  # !/usr/bin/env python
3
3
  """
4
4
  Date: 2021/12/6 21:58
5
- Desc:
5
+ Desc:
6
6
  """