akshare 1.14.49__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 (343) hide show
  1. akshare/__init__.py +595 -129
  2. akshare/air/air_hebei.py +77 -54
  3. akshare/air/air_zhenqi.py +0 -4
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/article/cons.py +1 -0
  8. akshare/article/epu_index.py +4 -3
  9. akshare/article/ff_factor.py +19 -8
  10. akshare/article/fred_md.py +4 -1
  11. akshare/article/risk_rv.py +3 -8
  12. akshare/bank/bank_cbirc_2020.py +11 -11
  13. akshare/bank/cons.py +7 -6
  14. akshare/bond/bond_buy_back_em.py +228 -0
  15. akshare/bond/bond_cb_sina.py +1 -0
  16. akshare/bond/bond_cb_ths.py +17 -9
  17. akshare/bond/bond_cbond.py +19 -14
  18. akshare/bond/bond_china.py +38 -39
  19. akshare/bond/bond_china_money.py +1 -1
  20. akshare/bond/bond_convert.py +10 -9
  21. akshare/bond/bond_em.py +37 -17
  22. akshare/bond/bond_summary.py +38 -37
  23. akshare/bond/bond_zh_cov.py +31 -40
  24. akshare/bond/bond_zh_sina.py +4 -0
  25. akshare/bond/cons.py +14 -11
  26. akshare/cal/__init__.py +0 -0
  27. akshare/cal/rv.py +170 -0
  28. akshare/cost/cost_living.py +7 -5
  29. akshare/crypto/__init__.py +1 -1
  30. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  31. akshare/crypto/crypto_hold.py +4 -2
  32. akshare/currency/currency.py +1 -0
  33. akshare/currency/currency_china_bank_sina.py +11 -6
  34. akshare/data/__init__.py +1 -1
  35. akshare/data/cninfo.js +1 -1
  36. akshare/datasets.py +10 -21
  37. akshare/economic/cons.py +10 -3
  38. akshare/economic/macro_australia.py +74 -69
  39. akshare/economic/macro_bank.py +95 -653
  40. akshare/economic/macro_canada.py +92 -81
  41. akshare/economic/macro_china.py +97 -105
  42. akshare/economic/macro_china_hk.py +0 -1
  43. akshare/economic/macro_euro.py +103 -56
  44. akshare/economic/macro_finance_ths.py +7 -5
  45. akshare/economic/macro_germany.py +1 -1
  46. akshare/economic/macro_japan.py +0 -1
  47. akshare/economic/macro_other.py +1 -6
  48. akshare/economic/macro_swiss.py +2 -3
  49. akshare/economic/macro_uk.py +1 -1
  50. akshare/economic/macro_usa.py +7 -9
  51. akshare/economic/marco_cnbs.py +11 -6
  52. akshare/energy/energy_carbon.py +0 -1
  53. akshare/energy/energy_oil_em.py +1 -2
  54. akshare/event/cons.py +1 -0
  55. akshare/exceptions.py +43 -0
  56. akshare/file_fold/calendar.json +245 -2
  57. akshare/forex/__init__.py +0 -0
  58. akshare/forex/cons.py +192 -0
  59. akshare/forex/forex_em.py +149 -0
  60. akshare/fortune/fortune_500.py +1 -37
  61. akshare/fortune/fortune_bloomberg.py +6 -3
  62. akshare/fortune/fortune_forbes_500.py +3 -6
  63. akshare/fortune/fortune_hurun.py +2 -1
  64. akshare/fortune/fortune_xincaifu_500.py +17 -14
  65. akshare/fund/fund_announcement_em.py +145 -0
  66. akshare/fund/fund_aum_em.py +49 -35
  67. akshare/fund/fund_em.py +251 -220
  68. akshare/fund/fund_etf_em.py +44 -35
  69. akshare/fund/fund_etf_sina.py +75 -27
  70. akshare/fund/fund_etf_ths.py +2 -0
  71. akshare/fund/fund_fee_em.py +172 -0
  72. akshare/fund/fund_fhsp_em.py +42 -32
  73. akshare/fund/fund_init_em.py +8 -5
  74. akshare/fund/fund_lof_em.py +12 -19
  75. akshare/fund/fund_manager.py +25 -11
  76. akshare/fund/fund_overview_em.py +42 -0
  77. akshare/fund/fund_portfolio_em.py +23 -21
  78. akshare/fund/fund_position_lg.py +19 -8
  79. akshare/fund/fund_rank_em.py +2 -5
  80. akshare/fund/fund_rating.py +33 -12
  81. akshare/fund/fund_scale_em.py +24 -13
  82. akshare/fund/fund_scale_sina.py +20 -10
  83. akshare/fund/fund_xq.py +3 -2
  84. akshare/futures/cons.py +135 -39
  85. akshare/futures/cot.py +55 -56
  86. akshare/futures/futures_basis.py +49 -11
  87. akshare/futures/futures_comex_em.py +1 -0
  88. akshare/futures/futures_comm_ctp.py +1 -1
  89. akshare/futures/futures_contract_detail.py +59 -9
  90. akshare/futures/futures_daily_bar.py +66 -59
  91. akshare/futures/futures_foreign.py +14 -8
  92. akshare/futures/futures_hf_em.py +215 -61
  93. akshare/futures/futures_hist_em.py +191 -0
  94. akshare/futures/futures_hq_sina.py +5 -3
  95. akshare/futures/futures_index_ccidx.py +24 -82
  96. akshare/futures/futures_inventory_99.py +70 -272
  97. akshare/futures/futures_inventory_em.py +14 -11
  98. akshare/futures/futures_news_shmet.py +2 -2
  99. akshare/futures/futures_roll_yield.py +11 -24
  100. akshare/futures/futures_rule.py +7 -3
  101. akshare/futures/futures_rule_em.py +38 -0
  102. akshare/futures/futures_settlement_price_sgx.py +21 -6
  103. akshare/futures/futures_stock_js.py +0 -1
  104. akshare/futures/futures_to_spot.py +5 -6
  105. akshare/futures/futures_warehouse_receipt.py +48 -47
  106. akshare/futures/futures_zh_sina.py +3 -3
  107. akshare/futures/receipt.py +298 -165
  108. akshare/futures/requests_fun.py +16 -3
  109. akshare/futures/symbol_var.py +32 -13
  110. akshare/futures_derivative/cons.py +100 -103
  111. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  112. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  113. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  114. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  115. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  116. akshare/futures_derivative/futures_contract_info_shfe.py +3 -4
  117. akshare/futures_derivative/futures_cot_sina.py +8 -6
  118. akshare/futures_derivative/futures_index_sina.py +25 -13
  119. akshare/fx/cons.py +12 -7
  120. akshare/fx/fx_c_swap_cm.py +62 -0
  121. akshare/fx/fx_quote.py +3 -2
  122. akshare/fx/fx_quote_baidu.py +2 -1
  123. akshare/hf/__init__.py +1 -1
  124. akshare/hf/hf_sp500.py +8 -7
  125. akshare/index/cons.py +132 -28
  126. akshare/index/index_cni.py +7 -7
  127. akshare/index/index_cons.py +2 -2
  128. akshare/index/index_csindex.py +68 -0
  129. akshare/index/index_cx.py +20 -20
  130. akshare/index/index_drewry.py +17 -16
  131. akshare/index/index_eri.py +1 -0
  132. akshare/index/index_global_em.py +167 -0
  133. akshare/index/index_global_sina.py +82 -0
  134. akshare/index/index_kq_fz.py +17 -14
  135. akshare/index/index_kq_ss.py +1 -0
  136. akshare/index/index_option_qvix.py +351 -16
  137. akshare/index/index_research_sw.py +21 -21
  138. akshare/index/index_spot.py +9 -5
  139. akshare/index/index_stock_hk.py +5 -9
  140. akshare/index/index_stock_zh.py +111 -24
  141. akshare/index/index_stock_zh_csindex.py +3 -367
  142. akshare/index/index_sugar.py +18 -4
  143. akshare/index/index_sw.py +10 -2
  144. akshare/index/index_yw.py +53 -75
  145. akshare/index/index_zh_em.py +15 -82
  146. akshare/interest_rate/interbank_rate_em.py +0 -1
  147. akshare/movie/jm.js +0 -1
  148. akshare/news/__init__.py +1 -1
  149. akshare/news/news_baidu.py +395 -222
  150. akshare/news/news_stock.py +49 -16
  151. akshare/option/cons.py +2 -2
  152. akshare/option/option_commodity.py +341 -220
  153. akshare/option/option_commodity_sina.py +22 -26
  154. akshare/option/option_contract_info_ctp.py +63 -0
  155. akshare/option/option_current_sse.py +61 -0
  156. akshare/option/option_current_szse.py +84 -0
  157. akshare/option/option_czce.py +37 -9
  158. akshare/option/option_daily_stats_sse_szse.py +0 -1
  159. akshare/option/option_em.py +4 -8
  160. akshare/option/option_finance.py +60 -12
  161. akshare/option/option_finance_sina.py +7 -7
  162. akshare/option/option_lhb_em.py +0 -1
  163. akshare/option/option_margin.py +62 -0
  164. akshare/option/option_premium_analysis_em.py +58 -53
  165. akshare/option/option_risk_analysis_em.py +11 -8
  166. akshare/option/option_risk_indicator_sse.py +3 -4
  167. akshare/option/option_value_analysis_em.py +62 -55
  168. akshare/other/__init__.py +1 -1
  169. akshare/pro/__init__.py +0 -1
  170. akshare/pro/client.py +6 -4
  171. akshare/pro/cons.py +3 -2
  172. akshare/pro/data_pro.py +6 -5
  173. akshare/qdii/__init__.py +0 -0
  174. akshare/qdii/qdii_jsl.py +233 -0
  175. akshare/qhkc/__init__.py +1 -6
  176. akshare/qhkc/qhkc_api.py +64 -22
  177. akshare/qhkc_web/__init__.py +1 -6
  178. akshare/qhkc_web/qhkc_fund.py +10 -6
  179. akshare/qhkc_web/qhkc_index.py +28 -14
  180. akshare/qhkc_web/qhkc_tool.py +62 -59
  181. akshare/rate/__init__.py +1 -1
  182. akshare/rate/repo_rate.py +36 -32
  183. akshare/reits/__init__.py +1 -1
  184. akshare/reits/reits_basic.py +149 -13
  185. akshare/request.py +117 -0
  186. akshare/spot/__init__.py +1 -1
  187. akshare/spot/spot_hog_soozhu.py +165 -3
  188. akshare/spot/spot_sge.py +70 -9
  189. akshare/stock/cons.py +60 -23
  190. akshare/stock/stock_allotment_cninfo.py +8 -8
  191. akshare/stock/stock_ask_bid_em.py +3 -78
  192. akshare/stock/stock_board_concept_em.py +160 -35
  193. akshare/stock/stock_board_industry_em.py +163 -70
  194. akshare/stock/stock_dividend_cninfo.py +31 -17
  195. akshare/stock/stock_dzjy_em.py +347 -260
  196. akshare/stock/stock_fund_em.py +72 -64
  197. akshare/stock/stock_fund_hold.py +1 -2
  198. akshare/stock/stock_gsrl_em.py +1 -0
  199. akshare/stock/stock_hk_comparison_em.py +175 -0
  200. akshare/stock/stock_hk_famous.py +4 -5
  201. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  202. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  203. akshare/stock/stock_hk_sina.py +84 -36
  204. akshare/stock/stock_hold_control_cninfo.py +82 -0
  205. akshare/stock/stock_hold_control_em.py +0 -2
  206. akshare/stock/stock_hot_rank_em.py +4 -1
  207. akshare/stock/stock_hot_search_baidu.py +32 -19
  208. akshare/stock/stock_hot_up_em.py +4 -1
  209. akshare/stock/stock_hsgt_em.py +155 -0
  210. akshare/stock/stock_industry.py +1 -0
  211. akshare/stock/stock_industry_cninfo.py +1 -2
  212. akshare/stock/stock_info.py +6 -4
  213. akshare/stock/stock_info_em.py +17 -11
  214. akshare/stock/stock_intraday_em.py +4 -78
  215. akshare/stock/stock_intraday_sina.py +2 -2
  216. akshare/stock/stock_news_cx.py +39 -0
  217. akshare/stock/stock_profile_cninfo.py +7 -7
  218. akshare/stock/stock_profile_em.py +302 -0
  219. akshare/stock/stock_rank_forecast.py +6 -5
  220. akshare/stock/stock_repurchase_em.py +7 -2
  221. akshare/stock/stock_share_changes_cninfo.py +7 -5
  222. akshare/stock/stock_share_hold.py +24 -20
  223. akshare/stock/stock_stop.py +6 -6
  224. akshare/stock/stock_summary.py +153 -417
  225. akshare/stock/stock_us_famous.py +5 -6
  226. akshare/stock/stock_us_js.py +3 -2
  227. akshare/stock/stock_us_pink.py +38 -27
  228. akshare/stock/stock_us_sina.py +7 -3
  229. akshare/stock/stock_weibo_nlp.py +18 -20
  230. akshare/stock/stock_xq.py +24 -22
  231. akshare/stock/stock_zh_a_sina.py +8 -5
  232. akshare/stock/stock_zh_a_special.py +240 -243
  233. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  234. akshare/stock/stock_zh_ah_tx.py +23 -26
  235. akshare/stock/stock_zh_b_sina.py +2 -2
  236. akshare/stock/stock_zh_comparison_em.py +250 -0
  237. akshare/stock/stock_zh_kcb_sina.py +67 -64
  238. akshare/stock_a/__init__.py +0 -0
  239. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  240. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  241. akshare/stock_a/stock_zh_a_spot.py +212 -0
  242. akshare/stock_feature/cons.py +1 -0
  243. akshare/stock_feature/stock_a_indicator.py +9 -54
  244. akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
  245. akshare/stock_feature/stock_account_em.py +0 -1
  246. akshare/stock_feature/stock_all_pb.py +2 -1
  247. akshare/stock_feature/stock_analyst_em.py +36 -30
  248. akshare/stock_feature/stock_board_concept_ths.py +328 -0
  249. akshare/stock_feature/stock_board_industry_ths.py +57 -2
  250. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  251. akshare/stock_feature/stock_classify_sina.py +3 -6
  252. akshare/stock_feature/stock_comment_em.py +81 -144
  253. akshare/stock_feature/stock_congestion_lg.py +2 -1
  254. akshare/stock_feature/stock_cyq_em.py +5 -11
  255. akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
  256. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  257. akshare/stock_feature/stock_ebs_lg.py +5 -4
  258. akshare/stock_feature/stock_esg_sina.py +29 -7
  259. akshare/stock_feature/stock_fhps_em.py +2 -1
  260. akshare/stock_feature/stock_fhps_ths.py +15 -7
  261. akshare/stock_feature/stock_fund_flow.py +30 -22
  262. akshare/stock_feature/stock_gddh_em.py +19 -11
  263. akshare/stock_feature/stock_gdfx_em.py +226 -113
  264. akshare/stock_feature/stock_gdhs.py +75 -50
  265. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  266. akshare/stock_feature/stock_gpzy_em.py +78 -46
  267. akshare/stock_feature/stock_gxl_lg.py +3 -2
  268. akshare/stock_feature/stock_hist_em.py +137 -234
  269. akshare/stock_feature/stock_hist_tx.py +13 -10
  270. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  271. akshare/stock_feature/stock_hot_xq.py +4 -6
  272. akshare/stock_feature/stock_hsgt_em.py +269 -97
  273. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  274. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  275. akshare/stock_feature/stock_info.py +7 -80
  276. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  277. akshare/stock_feature/stock_jgdy_em.py +43 -40
  278. akshare/stock_feature/stock_lhb_em.py +119 -3
  279. akshare/stock_feature/stock_margin_em.py +0 -1
  280. akshare/stock_feature/stock_margin_sse.py +0 -2
  281. akshare/stock_feature/stock_pankou_em.py +71 -35
  282. akshare/stock_feature/stock_qsjy_em.py +13 -4
  283. akshare/stock_feature/stock_report_em.py +151 -7
  284. akshare/stock_feature/stock_research_report_em.py +55 -20
  285. akshare/stock_feature/stock_sy_em.py +20 -15
  286. akshare/stock_feature/stock_technology_ths.py +122 -77
  287. akshare/stock_feature/stock_tfp_em.py +2 -1
  288. akshare/stock_feature/stock_three_report_em.py +21 -5
  289. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  290. akshare/stock_feature/stock_value_em.py +83 -0
  291. akshare/stock_feature/stock_yjbb_em.py +58 -32
  292. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  293. akshare/stock_feature/stock_yjyg_em.py +1 -1
  294. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  295. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  296. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  297. akshare/stock_feature/stock_ztb_em.py +39 -24
  298. akshare/stock_fundamental/__init__.py +1 -1
  299. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  300. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  301. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +60 -7
  302. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  303. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  304. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  305. akshare/stock_fundamental/stock_hold.py +26 -17
  306. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  307. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  308. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  309. akshare/stock_fundamental/stock_notice.py +12 -3
  310. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  311. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  312. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  313. akshare/stock_fundamental/stock_recommend.py +20 -4
  314. akshare/stock_fundamental/stock_zygc.py +5 -62
  315. akshare/utils/context.py +43 -0
  316. akshare/utils/demjson.py +2009 -1338
  317. akshare/utils/func.py +49 -2
  318. akshare/utils/multi_decrypt.py +53 -0
  319. akshare/utils/token_process.py +6 -5
  320. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
  321. akshare-1.17.99.dist-info/RECORD +409 -0
  322. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  323. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  324. tests/test_func.py +3 -5
  325. akshare/bond/bond_futures.py +0 -50
  326. akshare/bond/bond_investing.py +0 -139
  327. akshare/crypto/crypto_hist_investing.py +0 -249
  328. akshare/fund/fund_announcement.py +0 -56
  329. akshare/futures/futures_international.py +0 -170
  330. akshare/futures/futures_news_baidu.py +0 -54
  331. akshare/futures/inventory_data.py +0 -100
  332. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  333. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  334. akshare/futures_derivative/futures_index_volatility_nh.py +0 -53
  335. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  336. akshare/index/index_fear_greed_funddb.py +0 -78
  337. akshare/index/index_investing.py +0 -232
  338. akshare/sport/__init__.py +0 -6
  339. akshare/sport/sport_olympic.py +0 -27
  340. akshare/stock_feature/stock_wencai.py +0 -104
  341. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  342. akshare-1.14.49.dist-info/RECORD +0 -387
  343. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
@@ -1,17 +1,18 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2023/8/11 11:44
4
+ Date: 2025/2/15 22:00
5
5
  Desc: 东方财富网-个股-股票信息
6
6
  https://quote.eastmoney.com/concept/sh603777.html?from=classic
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
11
- from akshare.stock_feature.stock_hist_em import code_id_map_em
12
-
13
12
 
14
- def stock_individual_info_em(symbol: str = "603777", timeout: float = None) -> pd.DataFrame:
13
+ def stock_individual_info_em(
14
+ symbol: str = "603777", timeout: float = None
15
+ ) -> pd.DataFrame:
15
16
  """
16
17
  东方财富-个股-股票信息
17
18
  https://quote.eastmoney.com/concept/sh603777.html?from=classic
@@ -22,15 +23,19 @@ def stock_individual_info_em(symbol: str = "603777", timeout: float = None) -> p
22
23
  :return: 股票信息
23
24
  :rtype: pandas.DataFrame
24
25
  """
25
- code_id_dict = code_id_map_em()
26
- url = "http://push2.eastmoney.com/api/qt/stock/get"
26
+ url = "https://push2.eastmoney.com/api/qt/stock/get"
27
+ market_code = 1 if symbol.startswith("6") else 0
27
28
  params = {
28
- "ut": "fa5fd1943c7b386f172d6893dbfba10b",
29
29
  "fltt": "2",
30
30
  "invt": "2",
31
- "fields": "f120,f121,f122,f174,f175,f59,f163,f43,f57,f58,f169,f170,f46,f44,f51,f168,f47,f164,f116,f60,f45,f52,f50,f48,f167,f117,f71,f161,f49,f530,f135,f136,f137,f138,f139,f141,f142,f144,f145,f147,f148,f140,f143,f146,f149,f55,f62,f162,f92,f173,f104,f105,f84,f85,f183,f184,f185,f186,f187,f188,f189,f190,f191,f192,f107,f111,f86,f177,f78,f110,f262,f263,f264,f267,f268,f255,f256,f257,f258,f127,f199,f128,f198,f259,f260,f261,f171,f277,f278,f279,f288,f152,f250,f251,f252,f253,f254,f269,f270,f271,f272,f273,f274,f275,f276,f265,f266,f289,f290,f286,f285,f292,f293,f294,f295",
32
- "secid": f"{code_id_dict[symbol]}.{symbol}",
33
- "_": "1640157544804",
31
+ "fields": "f120,f121,f122,f174,f175,f59,f163,f43,f57,f58,f169,f170,f46,f44,f51,f168,f47,"
32
+ "f164,f116,f60,f45,f52,f50,f48,f167,f117,f71,f161,f49,f530,f135,f136,f137,f138,"
33
+ "f139,f141,f142,f144,f145,f147,f148,f140,f143,f146,f149,f55,f62,f162,f92,f173,f104,"
34
+ "f105,f84,f85,f183,f184,f185,f186,f187,f188,f189,f190,f191,f192,f107,f111,f86,f177,f78,"
35
+ "f110,f262,f263,f264,f267,f268,f255,f256,f257,f258,f127,f199,f128,f198,f259,f260,f261,"
36
+ "f171,f277,f278,f279,f288,f152,f250,f251,f252,f253,f254,f269,f270,f271,f272,f273,f274,"
37
+ "f275,f276,f265,f266,f289,f290,f286,f285,f292,f293,f294,f295,f43",
38
+ "secid": f"{market_code}.{symbol}",
34
39
  }
35
40
  r = requests.get(url, params=params, timeout=timeout)
36
41
  data_json = r.json()
@@ -50,6 +55,7 @@ def stock_individual_info_em(symbol: str = "603777", timeout: float = None) -> p
50
55
  "f116": "总市值",
51
56
  "f117": "流通市值",
52
57
  "f189": "上市时间",
58
+ "f43": "最新",
53
59
  }
54
60
  temp_df["index"] = temp_df["index"].map(code_name_map)
55
61
  temp_df = temp_df[pd.notna(temp_df["index"])]
@@ -64,5 +70,5 @@ def stock_individual_info_em(symbol: str = "603777", timeout: float = None) -> p
64
70
 
65
71
 
66
72
  if __name__ == "__main__":
67
- stock_individual_info_em_df = stock_individual_info_em(symbol="000001", timeout=None)
73
+ stock_individual_info_em_df = stock_individual_info_em(symbol="000002")
68
74
  print(stock_individual_info_em_df)
@@ -1,91 +1,17 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/10/14 22:00
4
+ Date: 2025/3/10 18:00
5
5
  Desc: 东财财富-日内分时数据
6
6
  https://quote.eastmoney.com/f1.html?newcode=0.000001
7
7
  """
8
8
 
9
9
  import json
10
- from functools import lru_cache
11
10
 
12
11
  import pandas as pd
13
12
  import requests
14
13
 
15
14
 
16
- @lru_cache()
17
- def __code_id_map_em() -> dict:
18
- """
19
- 东方财富-股票和市场代码
20
- https://quote.eastmoney.com/center/gridlist.html#hs_a_board
21
- :return: 股票和市场代码
22
- :rtype: dict
23
- """
24
- url = "http://80.push2.eastmoney.com/api/qt/clist/get"
25
- params = {
26
- "pn": "1",
27
- "pz": "50000",
28
- "po": "1",
29
- "np": "1",
30
- "ut": "bd1d9ddb04089700cf9c27f6f7426281",
31
- "fltt": "2",
32
- "invt": "2",
33
- "fid": "f3",
34
- "fs": "m:1 t:2,m:1 t:23",
35
- "fields": "f12",
36
- "_": "1623833739532",
37
- }
38
- r = requests.get(url, params=params)
39
- data_json = r.json()
40
- if not data_json["data"]["diff"]:
41
- return dict()
42
- temp_df = pd.DataFrame(data_json["data"]["diff"])
43
- temp_df["market_id"] = 1
44
- temp_df.columns = ["sh_code", "sh_id"]
45
- code_id_dict = dict(zip(temp_df["sh_code"], temp_df["sh_id"]))
46
- params = {
47
- "pn": "1",
48
- "pz": "50000",
49
- "po": "1",
50
- "np": "1",
51
- "ut": "bd1d9ddb04089700cf9c27f6f7426281",
52
- "fltt": "2",
53
- "invt": "2",
54
- "fid": "f3",
55
- "fs": "m:0 t:6,m:0 t:80",
56
- "fields": "f12",
57
- "_": "1623833739532",
58
- }
59
- r = requests.get(url, params=params)
60
- data_json = r.json()
61
- if not data_json["data"]["diff"]:
62
- return dict()
63
- temp_df_sz = pd.DataFrame(data_json["data"]["diff"])
64
- temp_df_sz["sz_id"] = 0
65
- code_id_dict.update(dict(zip(temp_df_sz["f12"], temp_df_sz["sz_id"])))
66
- params = {
67
- "pn": "1",
68
- "pz": "50000",
69
- "po": "1",
70
- "np": "1",
71
- "ut": "bd1d9ddb04089700cf9c27f6f7426281",
72
- "fltt": "2",
73
- "invt": "2",
74
- "fid": "f3",
75
- "fs": "m:0 t:81 s:2048",
76
- "fields": "f12",
77
- "_": "1623833739532",
78
- }
79
- r = requests.get(url, params=params)
80
- data_json = r.json()
81
- if not data_json["data"]["diff"]:
82
- return dict()
83
- temp_df_sz = pd.DataFrame(data_json["data"]["diff"])
84
- temp_df_sz["bj_id"] = 0
85
- code_id_dict.update(dict(zip(temp_df_sz["f12"], temp_df_sz["bj_id"])))
86
- return code_id_dict
87
-
88
-
89
15
  def __event_stream(url, params):
90
16
  # 使用 stream=True 参数来启用流式请求
91
17
  response = requests.get(url, params=params, stream=True)
@@ -102,14 +28,14 @@ def __event_stream(url, params):
102
28
 
103
29
  def stock_intraday_em(symbol: str = "000001") -> pd.DataFrame:
104
30
  """
105
- 东财财富-分时数据
31
+ 东方财富-分时数据
106
32
  https://quote.eastmoney.com/f1.html?newcode=0.000001
107
33
  :param symbol: 股票代码
108
34
  :type symbol: str
109
35
  :return: 分时数据
110
36
  :rtype: pandas.DataFrame
111
37
  """
112
- code_id_map_em_dict = __code_id_map_em()
38
+ market_code = 1 if symbol.startswith("6") else 0
113
39
  url = "https://70.push2.eastmoney.com/api/qt/stock/details/sse"
114
40
  params = {
115
41
  "fields1": "f1,f2,f3,f4",
@@ -118,7 +44,7 @@ def stock_intraday_em(symbol: str = "000001") -> pd.DataFrame:
118
44
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
119
45
  "fltt": "2",
120
46
  "pos": "-0",
121
- "secid": f"{code_id_map_em_dict[symbol]}.{symbol}",
47
+ "secid": f"{market_code}.{symbol}",
122
48
  "wbp2u": "|0|0|0|web",
123
49
  }
124
50
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/3/22 17:00
4
+ Date: 2025/9/28 13:30
5
5
  Desc: 新浪财经-日内分时数据
6
6
  https://quote.eastmoney.com/f1.html?newcode=0.000001
7
7
  """
@@ -64,5 +64,5 @@ def stock_intraday_sina(
64
64
 
65
65
 
66
66
  if __name__ == "__main__":
67
- stock_intraday_sina_df = stock_intraday_sina(symbol="sz000001", date="20240321")
67
+ stock_intraday_sina_df = stock_intraday_sina(symbol="sz000001", date="20250926")
68
68
  print(stock_intraday_sina_df)
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2024/11/18 16:00
5
+ Desc: 财新网-财新数据通
6
+ https://cxdata.caixin.com/pc/
7
+ """
8
+
9
+ import pandas as pd
10
+
11
+ from akshare.request import make_request_with_retry_json
12
+
13
+
14
+ def stock_news_main_cx() -> pd.DataFrame:
15
+ """
16
+ 财新网-财新数据通
17
+ https://cxdata.caixin.com/pc/
18
+ :return: 特定时间表示的字典
19
+ :rtype: pandas.DataFrame
20
+ """
21
+ url = "https://cxdata.caixin.com/api/dataplus/sjtPc/jxNews"
22
+ params = {
23
+ "pageNum": "1",
24
+ "pageSize": "20000",
25
+ "showLabels": "true",
26
+ }
27
+ data_json = make_request_with_retry_json(url, params=params)
28
+ temp_df = pd.DataFrame(data_json["data"]["data"])
29
+ temp_df = temp_df[["tag", "summary", "intervalTime", "pubTime", "url"]]
30
+ temp_df.columns = ["tag", "summary", "interval_time", "pub_time", "url"]
31
+ temp_df["pub_time"] = pd.to_datetime(
32
+ temp_df["pub_time"], errors="coerce", unit="ms"
33
+ ).astype(str)
34
+ return temp_df
35
+
36
+
37
+ if __name__ == "__main__":
38
+ stock_news_main_cx_df = stock_news_main_cx()
39
+ print(stock_news_main_cx_df)
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/6/5 15:00
4
+ Date: 2024/10/14 22:00
5
5
  Desc: 巨潮资讯-个股-公司概况
6
- http://webapi.cninfo.com.cn/#/company
6
+ https://webapi.cninfo.com.cn/#/company
7
7
  """
8
8
 
9
9
  import pandas as pd
10
- import requests
11
10
  import py_mini_racer
11
+ import requests
12
12
 
13
13
  from akshare.datasets import get_ths_js
14
14
 
@@ -30,14 +30,14 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
30
30
  def stock_profile_cninfo(symbol: str = "600030") -> pd.DataFrame:
31
31
  """
32
32
  巨潮资讯-个股-公司概况
33
- http://webapi.cninfo.com.cn/#/company
33
+ https://webapi.cninfo.com.cn/#/company
34
34
  :param symbol: 股票代码
35
35
  :type symbol: str
36
36
  :return: 公司概况
37
37
  :rtype: pandas.DataFrame
38
38
  :raise: Exception,如果服务器返回的数据无法被解析
39
39
  """
40
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1133"
40
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1133"
41
41
  params = {
42
42
  "scode": symbol,
43
43
  }
@@ -53,10 +53,10 @@ def stock_profile_cninfo(symbol: str = "600030") -> pd.DataFrame:
53
53
  "Content-Length": "0",
54
54
  "Host": "webapi.cninfo.com.cn",
55
55
  "Accept-Enckey": mcode,
56
- "Origin": "http://webapi.cninfo.com.cn",
56
+ "Origin": "https://webapi.cninfo.com.cn",
57
57
  "Pragma": "no-cache",
58
58
  "Proxy-Connection": "keep-alive",
59
- "Referer": "http://webapi.cninfo.com.cn/",
59
+ "Referer": "https://webapi.cninfo.com.cn/",
60
60
  "X-Requested-With": "XMLHttpRequest",
61
61
  }
62
62
  r = requests.post(url, params=params, headers=headers)
@@ -0,0 +1,302 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/9/11 13:00
5
+ Desc: 东方财富-港股-公司概况
6
+ https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile
7
+ """
8
+
9
+ import pandas as pd
10
+ import requests
11
+
12
+
13
+ def stock_hk_security_profile_em(symbol: str = "03900") -> pd.DataFrame:
14
+ """
15
+ 东方财富-港股-证券资料
16
+ https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile
17
+ :param symbol: 股票代码
18
+ :type symbol: str
19
+ :return: 证券资料
20
+ :rtype: pandas.DataFrame
21
+ """
22
+ url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
23
+ params = {
24
+ 'reportName': 'RPT_HKF10_INFO_SECURITYINFO',
25
+ 'columns': 'SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,SECURITY_TYPE,LISTING_DATE,ISIN_CODE,BOARD,'
26
+ 'TRADE_UNIT,TRADE_MARKET,GANGGUTONGBIAODISHEN,GANGGUTONGBIAODIHU,PAR_VALUE,'
27
+ 'ISSUE_PRICE,ISSUE_NUM,YEAR_SETTLE_DAY',
28
+ 'quoteColumns': '',
29
+ 'filter': f'(SECUCODE="{symbol}.HK")',
30
+ 'pageNumber': '1',
31
+ 'pageSize': '200',
32
+ 'sortTypes': '',
33
+ 'sortColumns': '',
34
+ 'source': 'F10',
35
+ 'client': 'PC',
36
+ 'v': '04748497219912483'
37
+ }
38
+ r = requests.get(url, params=params)
39
+ data_json = r.json()
40
+ temp_df = pd.DataFrame(data_json['result']['data'])
41
+ field_mapping = {
42
+ "BOARD": "板块",
43
+ "GANGGUTONGBIAODIHU": "是否沪港通标的",
44
+ "GANGGUTONGBIAODISHEN": "是否深港通标的",
45
+ "ISIN_CODE": "ISIN(国际证券识别编码)",
46
+ "ISSUE_NUM": "发行量(股)",
47
+ "ISSUE_PRICE": "发行价",
48
+ "LISTING_DATE": "上市日期",
49
+ "PAR_VALUE": "每股面值",
50
+ "SECUCODE": "证券代码",
51
+ "SECURITY_NAME_ABBR": "证券简称",
52
+ "SECURITY_TYPE": "证券类型",
53
+ "TRADE_MARKET": "交易所",
54
+ "TRADE_UNIT": "每手股数",
55
+ "YEAR_SETTLE_DAY": "年结日"
56
+ }
57
+ temp_df.rename(columns=field_mapping, inplace=True)
58
+ temp_df = temp_df[[
59
+ "证券代码",
60
+ "证券简称",
61
+ "上市日期",
62
+ "证券类型",
63
+ "发行价",
64
+ "发行量(股)",
65
+ "每手股数",
66
+ "每股面值",
67
+ "交易所",
68
+ "板块",
69
+ "年结日",
70
+ "ISIN(国际证券识别编码)",
71
+ "是否沪港通标的",
72
+ "是否深港通标的",
73
+ ]]
74
+ return temp_df
75
+
76
+
77
+ def stock_hk_company_profile_em(symbol: str = "03900") -> pd.DataFrame:
78
+ """
79
+ 东方财富-港股-公司资料
80
+ https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile
81
+ :param symbol: 股票代码
82
+ :type symbol: str
83
+ :return: 公司资料
84
+ :rtype: pandas.DataFrame
85
+ """
86
+ url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
87
+ params = {
88
+ 'reportName': 'RPT_HKF10_INFO_ORGPROFILE',
89
+ 'columns': 'SECUCODE,SECURITY_CODE,ORG_NAME,ORG_EN_ABBR,BELONG_INDUSTRY,FOUND_DATE,CHAIRMAN,'
90
+ 'SECRETARY,ACCOUNT_FIRM,REG_ADDRESS,ADDRESS,YEAR_SETTLE_DAY,EMP_NUM,ORG_TEL,ORG_FAX,ORG_EMAIL,'
91
+ 'ORG_WEB,ORG_PROFILE,REG_PLACE',
92
+ 'quoteColumns': '',
93
+ 'filter': f'(SECUCODE="{symbol}.HK")',
94
+ 'pageNumber': '1',
95
+ 'pageSize': '200',
96
+ 'sortTypes': '',
97
+ 'sortColumns': '',
98
+ 'source': 'F10',
99
+ 'client': 'PC',
100
+ 'v': '04748497219912483'
101
+ }
102
+ r = requests.get(url, params=params)
103
+ data_json = r.json()
104
+ temp_df = pd.DataFrame(data_json['result']['data'])
105
+ field_mapping = {
106
+ 'ACCOUNT_FIRM': '核数师',
107
+ 'ADDRESS': '办公地址',
108
+ 'BELONG_INDUSTRY': '所属行业',
109
+ 'CHAIRMAN': '董事长',
110
+ 'EMP_NUM': '员工人数',
111
+ 'FOUND_DATE': '公司成立日期',
112
+ 'ORG_EMAIL': 'E-MAIL',
113
+ 'ORG_EN_ABBR': '英文名称',
114
+ 'ORG_FAX': '传真',
115
+ 'ORG_NAME': '公司名称',
116
+ 'ORG_PROFILE': '公司介绍',
117
+ 'ORG_TEL': '联系电话',
118
+ 'ORG_WEB': '公司网址',
119
+ 'REG_ADDRESS': '注册地址',
120
+ 'REG_PLACE': '注册地',
121
+ 'SECRETARY': '公司秘书',
122
+ 'SECUCODE': '股票代码',
123
+ 'SECURITY_CODE': '证券代码',
124
+ 'YEAR_SETTLE_DAY': '年结日'
125
+ }
126
+ temp_df.rename(columns=field_mapping, inplace=True)
127
+ temp_df = temp_df[[
128
+ "公司名称",
129
+ "英文名称",
130
+ "注册地",
131
+ "注册地址",
132
+ "公司成立日期",
133
+ "所属行业",
134
+ "董事长",
135
+ "公司秘书",
136
+ "员工人数",
137
+ "办公地址",
138
+ "公司网址",
139
+ "E-MAIL",
140
+ "年结日",
141
+ "联系电话",
142
+ "核数师",
143
+ "传真",
144
+ "公司介绍",
145
+ ]]
146
+ return temp_df
147
+
148
+
149
+ def stock_hk_financial_indicator_em(symbol: str = "03900") -> pd.DataFrame:
150
+ """
151
+ 东方财富-港股-核心必读-最新指标
152
+ https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CoreReading
153
+ :param symbol: 股票代码
154
+ :type symbol: str
155
+ :return: 财务指标
156
+ :rtype: pandas.DataFrame
157
+ """
158
+ url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
159
+ params = {
160
+ 'reportName': 'RPT_CUSTOM_HKF10_FN_MAININDICATORMAX',
161
+ 'columns': 'ORG_CODE,SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,SECURITY_INNER_CODE,REPORT_DATE,BASIC_EPS,'
162
+ 'PER_NETCASH_OPERATE,BPS,BPS_NEDILUTED,COMMON_ACS,PER_SHARES,ISSUED_COMMON_SHARES,HK_COMMON_SHARES,'
163
+ 'TOTAL_MARKET_CAP,HKSK_MARKET_CAP,OPERATE_INCOME,OPERATE_INCOME_SQ,OPERATE_INCOME_QOQ,'
164
+ 'OPERATE_INCOME_QOQ_SQ,HOLDER_PROFIT,HOLDER_PROFIT_SQ,HOLDER_PROFIT_QOQ,HOLDER_PROFIT_QOQ_SQ,PE_TTM,'
165
+ 'PE_TTM_SQ,PB_TTM,PB_TTM_SQ,NET_PROFIT_RATIO,NET_PROFIT_RATIO_SQ,ROE_AVG,ROE_AVG_SQ,ROA,'
166
+ 'ROA_SQ,DIVIDEND_TTM,DIVIDEND_LFY,DIVI_RATIO,DIVIDEND_RATE,IS_CNY_CODE',
167
+ 'quoteColumns': '',
168
+ 'filter': f'(SECUCODE="{symbol}.HK")',
169
+ 'pageNumber': '1',
170
+ 'pageSize': '200',
171
+ 'sortTypes': '-1',
172
+ 'sortColumns': 'REPORT_DATE',
173
+ 'source': 'F10',
174
+ 'client': 'PC',
175
+ 'v': '07945646099062258'
176
+ }
177
+ r = requests.get(url, params=params)
178
+ data_json = r.json()
179
+ temp_df = pd.DataFrame(data_json['result']['data'])
180
+ field_mapping = {
181
+ 'SECURITY_CODE': '股票代码',
182
+ 'BASIC_EPS': '基本每股收益(元)',
183
+ 'BPS': '每股净资产(元)',
184
+ 'COMMON_ACS': '法定股本(股)',
185
+ 'PER_SHARES': '每手股',
186
+ 'DIVIDEND_TTM': '每股股息TTM(港元)',
187
+ 'DIVI_RATIO': '派息比率(%)',
188
+ 'ISSUED_COMMON_SHARES': '已发行股本(股)',
189
+ 'HK_COMMON_SHARES': '已发行股本-H股(股)',
190
+ 'PER_NETCASH_OPERATE': '每股经营现金流(元)',
191
+ 'DIVIDEND_RATE': '股息率TTM(%)',
192
+ 'TOTAL_MARKET_CAP': '总市值(港元)',
193
+ 'HKSK_MARKET_CAP': '港股市值(港元)',
194
+ 'OPERATE_INCOME': '营业总收入',
195
+ 'OPERATE_INCOME_QOQ': '营业总收入滚动环比增长(%)',
196
+ 'NET_PROFIT_RATIO': '销售净利率(%)',
197
+ 'HOLDER_PROFIT': '净利润',
198
+ 'HOLDER_PROFIT_QOQ': '净利润滚动环比增长(%)',
199
+ 'ROE_AVG': '股东权益回报率(%)',
200
+ 'PE_TTM': '市盈率',
201
+ 'PB_TTM': '市净率',
202
+ 'ROA': '总资产回报率(%)'
203
+ }
204
+ temp_df.rename(columns=field_mapping, inplace=True)
205
+ temp_df = temp_df[[
206
+ "基本每股收益(元)",
207
+ "每股净资产(元)",
208
+ "法定股本(股)",
209
+ "每手股",
210
+ "每股股息TTM(港元)",
211
+ "派息比率(%)",
212
+ "已发行股本(股)",
213
+ "已发行股本-H股(股)",
214
+ "每股经营现金流(元)",
215
+ "股息率TTM(%)",
216
+ "总市值(港元)",
217
+ "港股市值(港元)",
218
+ "营业总收入",
219
+ "营业总收入滚动环比增长(%)",
220
+ "销售净利率(%)",
221
+ "净利润",
222
+ "净利润滚动环比增长(%)",
223
+ "股东权益回报率(%)",
224
+ "市盈率",
225
+ "市净率",
226
+ "总资产回报率(%)"
227
+
228
+ ]]
229
+ return temp_df
230
+
231
+
232
+ def stock_hk_dividend_payout_em(symbol: str = "03900") -> pd.DataFrame:
233
+ """
234
+ 东方财富-港股-核心必读-分红派息
235
+ https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CoreReading
236
+ :param symbol: 股票代码
237
+ :type symbol: str
238
+ :return: 分红派息
239
+ :rtype: pandas.DataFrame
240
+ """
241
+ url = 'https://datacenter.eastmoney.com/securities/api/data/v1/get'
242
+ params = {
243
+ 'reportName': 'RPT_HKF10_MAIN_DIVBASIC',
244
+ 'columns': 'SECURITY_CODE,UPDATE_DATE,REPORT_TYPE,EX_DIVIDEND_DATE,DIVIDEND_DATE,'
245
+ 'TRANSFER_END_DATE,YEAR,PLAN_EXPLAIN,IS_BFP',
246
+ 'quoteColumns': '',
247
+ 'filter': f'(SECURITY_CODE="{symbol}")(IS_BFP="0")',
248
+ 'pageNumber': '1',
249
+ 'pageSize': '200',
250
+ 'sortTypes': '-1,-1',
251
+ 'sortColumns': 'NOTICE_DATE,EX_DIVIDEND_DATE',
252
+ 'source': 'F10',
253
+ 'client': 'PC',
254
+ 'v': '035584639294227527'
255
+ }
256
+ r = requests.get(url, params=params)
257
+ data_json = r.json()
258
+
259
+ field_mapping = {
260
+ 'SECURITY_CODE': '股票代码',
261
+ 'UPDATE_DATE': '最新公告日期',
262
+ 'REPORT_TYPE': '分配类型',
263
+ 'EX_DIVIDEND_DATE': '除净日',
264
+ 'DIVIDEND_DATE': '发放日',
265
+ 'TRANSFER_END_DATE': '截至过户日',
266
+ 'YEAR': '财政年度',
267
+ 'PLAN_EXPLAIN': '分红方案',
268
+ 'IS_BFP': 'IS_BFP'
269
+ }
270
+ columns = [
271
+ "最新公告日期",
272
+ "财政年度",
273
+ "分红方案",
274
+ "分配类型",
275
+ "除净日",
276
+ "截至过户日",
277
+ "发放日",
278
+ ]
279
+
280
+ temp_df = pd.DataFrame(columns=columns)
281
+ if data_json['result'] is not None:
282
+ temp_df = pd.DataFrame(data_json['result']['data'])
283
+ temp_df.rename(columns=field_mapping, inplace=True)
284
+ temp_df = temp_df[columns]
285
+ temp_df['最新公告日期'] = pd.to_datetime(temp_df['最新公告日期'], errors='coerce').dt.date
286
+ temp_df['除净日'] = pd.to_datetime(temp_df['除净日'], errors='coerce').dt.date
287
+ temp_df['发放日'] = pd.to_datetime(temp_df['发放日'], format='%Y-%m-%d', errors='coerce').dt.date
288
+ return temp_df
289
+
290
+
291
+ if __name__ == "__main__":
292
+ stock_hk_security_profile_em_df = stock_hk_security_profile_em(symbol="03900")
293
+ print(stock_hk_security_profile_em_df)
294
+
295
+ stock_hk_company_profile_em_df = stock_hk_company_profile_em(symbol="03900")
296
+ print(stock_hk_company_profile_em_df)
297
+
298
+ stock_hk_financial_indicator_em_df = stock_hk_financial_indicator_em(symbol="03900")
299
+ print(stock_hk_financial_indicator_em_df)
300
+
301
+ stock_hk_dividend_payout_em_df = stock_hk_dividend_payout_em(symbol="03900")
302
+ print(stock_hk_dividend_payout_em_df)
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/8/18 15:29
4
+ Date: 2024/8/28 15:30
5
5
  Desc: 巨潮资讯-数据中心-评级预测-投资评级
6
- http://webapi.cninfo.com.cn/#/thematicStatistics?name=%E6%8A%95%E8%B5%84%E8%AF%84%E7%BA%A7
6
+ https://webapi.cninfo.com.cn/#/thematicStatistics?name=%E6%8A%95%E8%B5%84%E8%AF%84%E7%BA%A7
7
7
  """
8
8
 
9
9
  import pandas as pd
@@ -22,7 +22,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
22
22
  :rtype: str
23
23
  """
24
24
  setting_file_path = get_ths_js(file)
25
- with open(setting_file_path) as f:
25
+ with open(setting_file_path, encoding="utf-8") as f:
26
26
  file_data = f.read()
27
27
  return file_data
28
28
 
@@ -30,7 +30,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
30
30
  def stock_rank_forecast_cninfo(date: str = "20230817") -> pd.DataFrame:
31
31
  """
32
32
  巨潮资讯-数据中心-评级预测-投资评级
33
- http://webapi.cninfo.com.cn/#/thematicStatistics?name=%E6%8A%95%E8%B5%84%E8%AF%84%E7%BA%A7
33
+ https://webapi.cninfo.com.cn/#/thematicStatistics?name=%E6%8A%95%E8%B5%84%E8%AF%84%E7%BA%A7
34
34
  :param date: 查询日期
35
35
  :type date: str
36
36
  :return: 投资评级
@@ -54,7 +54,8 @@ def stock_rank_forecast_cninfo(date: str = "20230817") -> pd.DataFrame:
54
54
  "Pragma": "no-cache",
55
55
  "Proxy-Connection": "keep-alive",
56
56
  "Referer": "http://webapi.cninfo.com.cn/",
57
- "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",
57
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
58
+ "Chrome/93.0.4577.63 Safari/537.36",
58
59
  "X-Requested-With": "XMLHttpRequest",
59
60
  }
60
61
  r = requests.post(url, params=params, headers=headers)
@@ -5,6 +5,7 @@ Date: 2022/8/29 14:20
5
5
  Desc: 东方财富网-数据中心-股票回购-股票回购数据
6
6
  https://data.eastmoney.com/gphg/hglist.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
  from tqdm import tqdm
@@ -105,8 +106,12 @@ def stock_repurchase_em() -> pd.DataFrame:
105
106
  big_df["计划回购价格区间"] = pd.to_numeric(big_df["计划回购价格区间"])
106
107
  big_df["计划回购数量区间-下限"] = pd.to_numeric(big_df["计划回购数量区间-下限"])
107
108
  big_df["计划回购数量区间-上限"] = pd.to_numeric(big_df["计划回购数量区间-上限"])
108
- big_df["占公告前一日总股本比例-上限"] = pd.to_numeric(big_df["占公告前一日总股本比例-上限"])
109
- big_df["占公告前一日总股本比例-下限"] = pd.to_numeric(big_df["占公告前一日总股本比例-下限"])
109
+ big_df["占公告前一日总股本比例-上限"] = pd.to_numeric(
110
+ big_df["占公告前一日总股本比例-上限"]
111
+ )
112
+ big_df["占公告前一日总股本比例-下限"] = pd.to_numeric(
113
+ big_df["占公告前一日总股本比例-下限"]
114
+ )
110
115
  big_df["计划回购金额区间-上限"] = pd.to_numeric(big_df["计划回购金额区间-上限"])
111
116
  big_df["计划回购金额区间-下限"] = pd.to_numeric(big_df["计划回购金额区间-下限"])
112
117
  big_df["已回购股份价格区间-下限"] = pd.to_numeric(big_df["已回购股份价格区间-下限"])