akshare 1.12.99__py3-none-any.whl → 1.15.72__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.

Potentially problematic release.


This version of akshare might be problematic. Click here for more details.

Files changed (236) hide show
  1. akshare/__init__.py +441 -138
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +29 -43
  4. akshare/air/sunrise_tad.py +32 -17
  5. akshare/bank/bank_cbirc_2020.py +12 -9
  6. akshare/bond/bond_cb_ths.py +17 -9
  7. akshare/bond/bond_china.py +38 -39
  8. akshare/bond/bond_china_money.py +75 -48
  9. akshare/bond/bond_info_cm.py +28 -8
  10. akshare/bond/bond_issue_cninfo.py +73 -30
  11. akshare/bond/bond_zh_cov.py +1 -1
  12. akshare/bond/bond_zh_sina.py +57 -51
  13. akshare/cal/__init__.py +0 -0
  14. akshare/cal/rv.py +170 -0
  15. akshare/cost/cost_living.py +7 -5
  16. akshare/currency/currency_safe.py +7 -6
  17. akshare/data/cninfo.js +15 -0
  18. akshare/datasets.py +10 -21
  19. akshare/economic/macro_bank.py +95 -653
  20. akshare/economic/macro_china.py +772 -1024
  21. akshare/economic/macro_china_hk.py +65 -243
  22. akshare/economic/macro_china_nbs.py +24 -7
  23. akshare/economic/macro_constitute.py +17 -12
  24. akshare/economic/macro_euro.py +13 -6
  25. akshare/economic/macro_finance_ths.py +133 -0
  26. akshare/economic/macro_info_ws.py +100 -0
  27. akshare/economic/macro_japan.py +5 -4
  28. akshare/economic/macro_other.py +12 -9
  29. akshare/economic/macro_usa.py +376 -1940
  30. akshare/economic/marco_cnbs.py +11 -6
  31. akshare/energy/energy_carbon.py +94 -125
  32. akshare/event/migration.py +3 -2
  33. akshare/exceptions.py +43 -0
  34. akshare/file_fold/calendar.json +245 -2
  35. akshare/fortune/fortune_500.py +15 -48
  36. akshare/fund/fund_amac.py +157 -75
  37. akshare/fund/fund_em.py +191 -184
  38. akshare/fund/fund_etf_em.py +16 -15
  39. akshare/fund/fund_etf_sina.py +71 -23
  40. akshare/fund/fund_etf_ths.py +93 -0
  41. akshare/fund/fund_fee_em.py +98 -0
  42. akshare/fund/fund_portfolio_em.py +60 -50
  43. akshare/fund/fund_rank_em.py +91 -82
  44. akshare/fund/fund_report_cninfo.py +63 -48
  45. akshare/fund/fund_scale_sina.py +20 -10
  46. akshare/fund/fund_xq.py +139 -109
  47. akshare/futures/cons.py +8 -31
  48. akshare/futures/cot.py +185 -137
  49. akshare/futures/futures_basis.py +97 -32
  50. akshare/futures/futures_comm_ctp.py +37 -0
  51. akshare/futures/futures_comm_qihuo.py +74 -45
  52. akshare/futures/futures_daily_bar.py +121 -184
  53. akshare/futures/futures_hf_em.py +66 -61
  54. akshare/futures/futures_hq_sina.py +79 -61
  55. akshare/futures/futures_index_ccidx.py +6 -3
  56. akshare/futures/futures_inventory_99.py +61 -272
  57. akshare/futures/futures_news_shmet.py +4 -2
  58. akshare/futures/futures_roll_yield.py +12 -25
  59. akshare/futures/futures_spot_stock_em.py +19 -13
  60. akshare/futures/futures_stock_js.py +14 -12
  61. akshare/futures/futures_to_spot.py +38 -33
  62. akshare/futures/futures_warehouse_receipt.py +75 -71
  63. akshare/futures/futures_zh_sina.py +5 -5
  64. akshare/futures/symbol_var.py +18 -13
  65. akshare/futures_derivative/futures_contract_info_czce.py +60 -52
  66. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  67. akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
  68. akshare/futures_derivative/futures_cot_sina.py +26 -19
  69. akshare/futures_derivative/futures_spot_sys.py +21 -8
  70. akshare/fx/currency_investing.py +19 -285
  71. akshare/index/index_cflp.py +29 -26
  72. akshare/index/index_cni.py +86 -88
  73. akshare/index/index_cons.py +26 -10
  74. akshare/index/index_cx.py +248 -47
  75. akshare/index/index_drewry.py +17 -16
  76. akshare/index/index_option_qvix.py +329 -0
  77. akshare/index/index_research_fund_sw.py +134 -0
  78. akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
  79. akshare/index/index_spot.py +9 -5
  80. akshare/index/index_stock_hk.py +35 -16
  81. akshare/index/index_stock_us_sina.py +1 -1
  82. akshare/index/index_stock_zh.py +180 -89
  83. akshare/index/index_stock_zh_csindex.py +15 -369
  84. akshare/index/index_sw.py +62 -34
  85. akshare/index/index_yw.py +46 -23
  86. akshare/index/index_zh_a_scope.py +48 -0
  87. akshare/index/index_zh_em.py +6 -4
  88. akshare/interest_rate/interbank_rate_em.py +14 -9
  89. akshare/movie/artist_yien.py +32 -5
  90. akshare/movie/movie_yien.py +92 -18
  91. akshare/movie/video_yien.py +28 -5
  92. akshare/news/news_baidu.py +78 -44
  93. akshare/news/news_cctv.py +38 -38
  94. akshare/news/news_stock.py +6 -3
  95. akshare/nlp/nlp_interface.py +7 -8
  96. akshare/option/cons.py +11 -11
  97. akshare/option/option_comm_qihuo.py +86 -0
  98. akshare/option/option_commodity.py +178 -51
  99. akshare/option/option_daily_stats_sse_szse.py +146 -0
  100. akshare/option/option_em.py +147 -138
  101. akshare/option/option_finance_sina.py +160 -137
  102. akshare/option/option_lhb_em.py +62 -56
  103. akshare/option/option_risk_indicator_sse.py +17 -14
  104. akshare/other/other_car_cpca.py +934 -0
  105. akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
  106. akshare/qdii/__init__.py +0 -0
  107. akshare/qdii/qdii_jsl.py +233 -0
  108. akshare/request.py +117 -0
  109. akshare/spot/spot_hog_soozhu.py +232 -0
  110. akshare/spot/spot_price_qh.py +121 -0
  111. akshare/spot/spot_sge.py +63 -10
  112. akshare/stock/stock_allotment_cninfo.py +10 -9
  113. akshare/stock/stock_board_concept_em.py +23 -14
  114. akshare/stock/stock_board_industry_em.py +40 -34
  115. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  116. akshare/stock/stock_cg_guarantee.py +41 -51
  117. akshare/stock/stock_cg_lawsuit.py +36 -35
  118. akshare/stock/stock_dividend_cninfo.py +12 -6
  119. akshare/stock/stock_dzjy_em.py +347 -260
  120. akshare/stock/stock_fund_em.py +332 -84
  121. akshare/stock/stock_hk_famous.py +108 -0
  122. akshare/stock/stock_hk_sina.py +8 -7
  123. akshare/stock/stock_hold_control_cninfo.py +100 -15
  124. akshare/stock/stock_hold_control_em.py +4 -3
  125. akshare/stock/stock_hold_num_cninfo.py +18 -12
  126. akshare/stock/stock_hot_rank_em.py +2 -1
  127. akshare/stock/stock_hot_search_baidu.py +5 -2
  128. akshare/stock/stock_industry_cninfo.py +24 -18
  129. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  130. akshare/stock/stock_industry_sw.py +9 -10
  131. akshare/stock/stock_info.py +25 -15
  132. akshare/stock/stock_info_em.py +5 -2
  133. akshare/stock/stock_intraday_em.py +5 -2
  134. akshare/stock/stock_intraday_sina.py +22 -18
  135. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  136. akshare/stock/stock_new_cninfo.py +32 -19
  137. akshare/stock/stock_news_cx.py +39 -0
  138. akshare/stock/stock_profile_cninfo.py +9 -8
  139. akshare/stock/stock_rank_forecast.py +8 -6
  140. akshare/stock/stock_share_changes_cninfo.py +18 -14
  141. akshare/stock/stock_share_hold.py +24 -19
  142. akshare/stock/stock_summary.py +54 -26
  143. akshare/stock/stock_us_famous.py +15 -6
  144. akshare/stock/stock_us_pink.py +7 -5
  145. akshare/stock/stock_us_sina.py +15 -12
  146. akshare/stock/stock_xq.py +38 -12
  147. akshare/stock/stock_zh_a_sina.py +53 -78
  148. akshare/stock/stock_zh_b_sina.py +32 -55
  149. akshare/stock/stock_zh_kcb_report.py +11 -9
  150. akshare/stock/stock_zh_kcb_sina.py +67 -64
  151. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  152. akshare/stock_feature/stock_a_high_low.py +5 -2
  153. akshare/stock_feature/stock_a_indicator.py +12 -9
  154. akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
  155. akshare/stock_feature/stock_account_em.py +58 -40
  156. akshare/stock_feature/stock_analyst_em.py +36 -27
  157. akshare/stock_feature/stock_board_industry_ths.py +136 -400
  158. akshare/stock_feature/stock_comment_em.py +118 -85
  159. akshare/stock_feature/stock_concept_futu.py +183 -0
  160. akshare/stock_feature/stock_cyq_em.py +58 -54
  161. akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
  162. akshare/stock_feature/stock_esg_sina.py +216 -11
  163. akshare/stock_feature/stock_fhps_em.py +60 -25
  164. akshare/stock_feature/stock_fhps_ths.py +25 -6
  165. akshare/stock_feature/stock_fund_flow.py +38 -25
  166. akshare/stock_feature/stock_gdfx_em.py +180 -95
  167. akshare/stock_feature/stock_gdhs.py +73 -49
  168. akshare/stock_feature/stock_gpzy_em.py +78 -46
  169. akshare/stock_feature/stock_hist_em.py +55 -23
  170. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  171. akshare/stock_feature/stock_hsgt_em.py +184 -452
  172. akshare/stock_feature/stock_info.py +52 -29
  173. akshare/stock_feature/stock_inner_trade_xq.py +39 -31
  174. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  175. akshare/stock_feature/stock_jgdy_em.py +41 -38
  176. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  177. akshare/stock_feature/stock_lhb_em.py +135 -71
  178. akshare/stock_feature/stock_lhb_sina.py +93 -46
  179. akshare/stock_feature/stock_margin_em.py +102 -0
  180. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
  181. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
  182. akshare/stock_feature/stock_market_legu.py +13 -8
  183. akshare/stock_feature/stock_pankou_em.py +72 -34
  184. akshare/stock_feature/stock_report_em.py +244 -54
  185. akshare/stock_feature/stock_research_report_em.py +48 -19
  186. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  187. akshare/stock_feature/stock_sy_em.py +86 -33
  188. akshare/stock_feature/stock_technology_ths.py +152 -120
  189. akshare/stock_feature/stock_tfp_em.py +35 -13
  190. akshare/stock_feature/stock_three_report_em.py +119 -77
  191. akshare/stock_feature/stock_ttm_lyr.py +4 -7
  192. akshare/stock_feature/stock_value_em.py +83 -0
  193. akshare/stock_feature/stock_wencai.py +21 -9
  194. akshare/stock_feature/stock_yjyg_em.py +63 -28
  195. akshare/stock_feature/stock_zf_pg.py +61 -38
  196. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  197. akshare/stock_feature/stock_ztb_em.py +62 -40
  198. akshare/stock_fundamental/stock_finance.py +150 -58
  199. akshare/stock_fundamental/stock_finance_ths.py +116 -31
  200. akshare/stock_fundamental/stock_mda_ym.py +5 -3
  201. akshare/stock_fundamental/stock_notice.py +29 -15
  202. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  203. akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
  204. akshare/stock_fundamental/stock_register_em.py +448 -0
  205. akshare/stock_fundamental/stock_restricted_em.py +79 -32
  206. akshare/stock_fundamental/stock_zygc.py +10 -8
  207. akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
  208. akshare/tool/trade_date_hist.py +4 -3
  209. akshare/utils/cons.py +10 -0
  210. akshare/utils/context.py +43 -0
  211. akshare/utils/demjson.py +2 -2
  212. akshare/utils/func.py +26 -0
  213. akshare/utils/tqdm.py +13 -3
  214. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/METADATA +52 -69
  215. akshare-1.15.72.dist-info/RECORD +385 -0
  216. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/WHEEL +1 -1
  217. tests/test_func.py +3 -5
  218. akshare/bond/bond_futures.py +0 -50
  219. akshare/bond/bond_investing.py +0 -139
  220. akshare/crypto/crypto_hist_investing.py +0 -249
  221. akshare/fortune/fortune_it_juzi.py +0 -123
  222. akshare/futures/futures_international.py +0 -170
  223. akshare/futures/futures_news_baidu.py +0 -54
  224. akshare/futures/inventory_data.py +0 -100
  225. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  226. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  227. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  228. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  229. akshare/index/index_fear_greed_funddb.py +0 -71
  230. akshare/index/index_investing.py +0 -232
  231. akshare/sport/sport_olympic_winter.py +0 -39
  232. akshare/stock_feature/stock_board_concept_ths.py +0 -422
  233. akshare/stock_fundamental/stock_register.py +0 -292
  234. akshare-1.12.99.dist-info/RECORD +0 -374
  235. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/LICENSE +0 -0
  236. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/top_level.txt +0 -0
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/5/29 23:34
4
+ Date: 2024/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
  import pandas as pd
10
+ import py_mini_racer
9
11
  import requests
10
- from py_mini_racer import py_mini_racer
11
12
 
12
13
  from akshare.datasets import get_ths_js
13
14
 
@@ -21,7 +22,7 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
21
22
  :rtype: str
22
23
  """
23
24
  setting_file_path = get_ths_js(file)
24
- with open(setting_file_path) as f:
25
+ with open(setting_file_path, encoding="utf-8") as f:
25
26
  file_data = f.read()
26
27
  return file_data
27
28
 
@@ -29,14 +30,14 @@ def _get_file_content_ths(file: str = "cninfo.js") -> str:
29
30
  def stock_profile_cninfo(symbol: str = "600030") -> pd.DataFrame:
30
31
  """
31
32
  巨潮资讯-个股-公司概况
32
- http://webapi.cninfo.com.cn/#/company
33
+ https://webapi.cninfo.com.cn/#/company
33
34
  :param symbol: 股票代码
34
35
  :type symbol: str
35
36
  :return: 公司概况
36
37
  :rtype: pandas.DataFrame
37
38
  :raise: Exception,如果服务器返回的数据无法被解析
38
39
  """
39
- url = "http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1133"
40
+ url = "https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1133"
40
41
  params = {
41
42
  "scode": symbol,
42
43
  }
@@ -52,10 +53,10 @@ def stock_profile_cninfo(symbol: str = "600030") -> pd.DataFrame:
52
53
  "Content-Length": "0",
53
54
  "Host": "webapi.cninfo.com.cn",
54
55
  "Accept-Enckey": mcode,
55
- "Origin": "http://webapi.cninfo.com.cn",
56
+ "Origin": "https://webapi.cninfo.com.cn",
56
57
  "Pragma": "no-cache",
57
58
  "Proxy-Connection": "keep-alive",
58
- "Referer": "http://webapi.cninfo.com.cn/",
59
+ "Referer": "https://webapi.cninfo.com.cn/",
59
60
  "X-Requested-With": "XMLHttpRequest",
60
61
  }
61
62
  r = requests.post(url, params=params, headers=headers)
@@ -1,13 +1,14 @@
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
  import pandas as pd
9
10
  import requests
10
- from py_mini_racer import py_mini_racer
11
+ import py_mini_racer
11
12
 
12
13
  from akshare.datasets import get_ths_js
13
14
 
@@ -21,7 +22,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
21
22
  :rtype: str
22
23
  """
23
24
  setting_file_path = get_ths_js(file)
24
- with open(setting_file_path) as f:
25
+ with open(setting_file_path, encoding="utf-8") as f:
25
26
  file_data = f.read()
26
27
  return file_data
27
28
 
@@ -29,7 +30,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
29
30
  def stock_rank_forecast_cninfo(date: str = "20230817") -> pd.DataFrame:
30
31
  """
31
32
  巨潮资讯-数据中心-评级预测-投资评级
32
- 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
33
34
  :param date: 查询日期
34
35
  :type date: str
35
36
  :return: 投资评级
@@ -53,7 +54,8 @@ def stock_rank_forecast_cninfo(date: str = "20230817") -> pd.DataFrame:
53
54
  "Pragma": "no-cache",
54
55
  "Proxy-Connection": "keep-alive",
55
56
  "Referer": "http://webapi.cninfo.com.cn/",
56
- "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",
57
59
  "X-Requested-With": "XMLHttpRequest",
58
60
  }
59
61
  r = requests.post(url, params=params, headers=headers)
@@ -1,13 +1,15 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2023/6/8 16:44
4
+ Date: 2024/10/21 22:20
5
5
  Desc: 巨潮资讯-股本股东-公司股本变动
6
- http://webapi.cninfo.com.cn/api/stock/p_stock2215
6
+ https://webapi.cninfo.com.cn/api/stock/p_stock2215
7
7
  """
8
+
9
+ import numpy as np
8
10
  import pandas as pd
11
+ import py_mini_racer
9
12
  import requests
10
- from py_mini_racer import py_mini_racer
11
13
 
12
14
  from akshare.datasets import get_ths_js
13
15
 
@@ -21,7 +23,7 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
21
23
  :rtype: str
22
24
  """
23
25
  setting_file_path = get_ths_js(file)
24
- with open(setting_file_path) as f:
26
+ with open(setting_file_path, encoding="utf-8") as f:
25
27
  file_data = f.read()
26
28
  return file_data
27
29
 
@@ -29,11 +31,11 @@ def _get_file_content_cninfo(file: str = "cninfo.js") -> str:
29
31
  def stock_share_change_cninfo(
30
32
  symbol: str = "002594",
31
33
  start_date: str = "20091227",
32
- end_date: str = "20220713",
34
+ end_date: str = "20241021",
33
35
  ) -> pd.DataFrame:
34
36
  """
35
37
  巨潮资讯-股本股东-公司股本变动
36
- http://webapi.cninfo.com.cn/#/apiDoc
38
+ https://webapi.cninfo.com.cn/#/apiDoc
37
39
  查询 p_stock2215 接口
38
40
  :param symbol: 股票代码
39
41
  :type symbol: str
@@ -44,7 +46,7 @@ def stock_share_change_cninfo(
44
46
  :return: 公司股本变动
45
47
  :rtype: pandas.DataFrame
46
48
  """
47
- url = "http://webapi.cninfo.com.cn/api/stock/p_stock2215"
49
+ url = "https://webapi.cninfo.com.cn/api/stock/p_stock2215"
48
50
  params = {
49
51
  "scode": symbol,
50
52
  "sdate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
@@ -62,11 +64,12 @@ def stock_share_change_cninfo(
62
64
  "Cache-Control": "no-cache",
63
65
  "Content-Length": "0",
64
66
  "Host": "webapi.cninfo.com.cn",
65
- "Origin": "http://webapi.cninfo.com.cn",
67
+ "Origin": "https://webapi.cninfo.com.cn",
66
68
  "Pragma": "no-cache",
67
69
  "Proxy-Connection": "keep-alive",
68
- "Referer": "http://webapi.cninfo.com.cn/",
69
- "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",
70
+ "Referer": "https://webapi.cninfo.com.cn/",
71
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
72
+ "Chrome/93.0.4577.63 Safari/537.36",
70
73
  "X-Requested-With": "XMLHttpRequest",
71
74
  }
72
75
  r = requests.post(url, params=params, headers=headers)
@@ -122,9 +125,10 @@ def stock_share_change_cninfo(
122
125
  }
123
126
  ignore_cols = ["最新记录标识", "其他"]
124
127
  temp_df.rename(columns=cols_map, inplace=True)
125
- temp_df.fillna(pd.NA, inplace=True)
126
- temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"]).dt.date
127
- temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"]).dt.date
128
+ pd.set_option("future.no_silent_downcasting", True)
129
+ temp_df.fillna(np.nan, inplace=True)
130
+ temp_df["公告日期"] = pd.to_datetime(temp_df["公告日期"], errors="coerce").dt.date
131
+ temp_df["变动日期"] = pd.to_datetime(temp_df["变动日期"], errors="coerce").dt.date
128
132
  data_df = temp_df[[c for c in temp_df.columns if c not in ignore_cols]]
129
133
  return data_df
130
134
 
@@ -133,6 +137,6 @@ if __name__ == "__main__":
133
137
  stock_share_change_cninfo_df = stock_share_change_cninfo(
134
138
  symbol="002594",
135
139
  start_date="20091227",
136
- end_date="20220713",
140
+ end_date="20241021",
137
141
  )
138
142
  print(stock_share_change_cninfo_df)
@@ -1,18 +1,16 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/8/23 8:30
4
+ Date: 2024/11/8 17:00
5
5
  Desc: 董监高及相关人员持股变动
6
-
7
6
  北京证券交易所-信息披露-监管信息-董监高及相关人员持股变动
8
7
  https://www.bse.cn/disclosure/djg_sharehold_change.html
9
-
10
8
  深圳证券交易所-信息披露-监管信息公开-董监高人员股份变动
11
- http://www.szse.cn/disclosure/supervision/change/index.html
12
-
9
+ https://www.szse.cn/disclosure/supervision/change/index.html
13
10
  上海证券交易所-披露-监管信息公开-公司监管-董董监高人员股份变动
14
- http://www.sse.com.cn/disclosure/credibility/supervision/change/
11
+ https://www.sse.com.cn/disclosure/credibility/supervision/change/
15
12
  """
13
+
16
14
  import json
17
15
 
18
16
  import pandas as pd
@@ -23,13 +21,13 @@ from tqdm import tqdm
23
21
  def stock_share_hold_change_sse(symbol: str = "600000") -> pd.DataFrame:
24
22
  """
25
23
  上海证券交易所-披露-监管信息公开-公司监管-董董监高人员股份变动
26
- http://www.sse.com.cn/disclosure/credibility/supervision/change/
24
+ https://www.sse.com.cn/disclosure/credibility/supervision/change/
27
25
  :param symbol: choice of {"全部", "具体股票代码"}
28
26
  :type symbol: str
29
27
  :return: 董监高人员股份变动
30
28
  :rtype: pandas.DataFrame
31
29
  """
32
- url = "http://query.sse.com.cn/commonQuery.do"
30
+ url = "https://query.sse.com.cn/commonQuery.do"
33
31
  params = {
34
32
  "isPagination": "true",
35
33
  "pageHelp.pageSize": "100",
@@ -48,8 +46,9 @@ def stock_share_hold_change_sse(symbol: str = "600000") -> pd.DataFrame:
48
46
  params if symbol == "全部" else params.update({"COMPANY_CODE": symbol})
49
47
  headers = {
50
48
  "Host": "query.sse.com.cn",
51
- "Referer": "http://www.sse.com.cn/",
52
- "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",
49
+ "Referer": "https://www.sse.com.cn/",
50
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
51
+ "Chrome/93.0.4577.63 Safari/537.36",
53
52
  }
54
53
  r = requests.get(url, headers=headers, params=params)
55
54
  data_json = r.json()
@@ -106,9 +105,13 @@ def stock_share_hold_change_sse(symbol: str = "600000") -> pd.DataFrame:
106
105
  big_df["变动日期"] = pd.to_datetime(big_df["变动日期"], errors="coerce").dt.date
107
106
  big_df["填报日期"] = pd.to_datetime(big_df["填报日期"], errors="coerce").dt.date
108
107
 
109
- big_df["本次变动前持股数"] = pd.to_numeric(big_df["本次变动前持股数"], errors="coerce")
108
+ big_df["本次变动前持股数"] = pd.to_numeric(
109
+ big_df["本次变动前持股数"], errors="coerce"
110
+ )
110
111
  big_df["变动数"] = pd.to_numeric(big_df["变动数"], errors="coerce")
111
- big_df["本次变动平均价格"] = pd.to_numeric(big_df["本次变动平均价格"], errors="coerce")
112
+ big_df["本次变动平均价格"] = pd.to_numeric(
113
+ big_df["本次变动平均价格"], errors="coerce"
114
+ )
112
115
  big_df["变动后持股数"] = pd.to_numeric(big_df["变动后持股数"], errors="coerce")
113
116
  return big_df
114
117
 
@@ -116,12 +119,17 @@ def stock_share_hold_change_sse(symbol: str = "600000") -> pd.DataFrame:
116
119
  def stock_share_hold_change_szse(symbol: str = "全部") -> pd.DataFrame:
117
120
  """
118
121
  深圳证券交易所-信息披露-监管信息公开-董监高人员股份变动
119
- http://www.szse.cn/disclosure/supervision/change/index.html
122
+ https://www.szse.cn/disclosure/supervision/change/index.html
120
123
  :param symbol: choice of {"全部", "具体股票代码"}
121
124
  :type symbol: str
122
125
  :return: 董监高人员股份变动
123
126
  :rtype: pandas.DataFrame
124
127
  """
128
+ url = "https://www.szse.cn/api/report/ShowReport/data"
129
+ headers = {
130
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
131
+ "Chrome/93.0.4577.63 Safari/537.36",
132
+ }
125
133
  params = {
126
134
  "SHOWTYPE": "JSON",
127
135
  "CATALOGID": "1801_cxda",
@@ -130,15 +138,11 @@ def stock_share_hold_change_szse(symbol: str = "全部") -> pd.DataFrame:
130
138
  "random": "0.7874198771222201",
131
139
  }
132
140
  params if symbol == "全部" else params.update({"txtDMorJC": symbol})
133
- url = "http://www.szse.cn/api/report/ShowReport/data"
134
- headers = {
135
- "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",
136
- }
137
141
  r = requests.get(url, headers=headers, params=params)
138
142
  data_json = r.json()
139
143
  total_page = data_json[0]["metadata"]["pagecount"]
140
144
  big_df = pd.DataFrame()
141
- for page in tqdm(range(1, total_page+1), leave=False):
145
+ for page in tqdm(range(1, total_page + 1), leave=False):
142
146
  params.update(
143
147
  {
144
148
  "PAGENO": page,
@@ -212,7 +216,8 @@ def stock_share_hold_change_bse(symbol: str = "430489") -> pd.DataFrame:
212
216
  }
213
217
  url = "https://www.bse.cn/djgCgbdController/getDjgCgbdList.do"
214
218
  headers = {
215
- "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",
219
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
220
+ "Chrome/93.0.4577.63 Safari/537.36",
216
221
  }
217
222
  r = requests.get(url, headers=headers, params=params)
218
223
  data_text = r.text
@@ -1,21 +1,22 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/5/3 17:00
4
+ Date: 2024/9/1 16:00
5
5
  Desc: 股票数据-总貌-市场总貌
6
6
  股票数据-总貌-成交概括
7
7
  https://www.szse.cn/market/overview/index.html
8
8
  https://www.sse.com.cn/market/stockdata/statistic/
9
9
  """
10
+
10
11
  import warnings
11
- from io import BytesIO
12
+ from io import BytesIO, StringIO
12
13
 
13
14
  import pandas as pd
14
15
  import requests
15
16
  from bs4 import BeautifulSoup
16
17
 
17
18
 
18
- def stock_szse_summary(date: str = "20200619") -> pd.DataFrame:
19
+ def stock_szse_summary(date: str = "20240830") -> pd.DataFrame:
19
20
  """
20
21
  深证证券交易所-总貌-证券类别统计
21
22
  https://www.szse.cn/market/overview/index.html
@@ -37,10 +38,10 @@ def stock_szse_summary(date: str = "20200619") -> pd.DataFrame:
37
38
  warnings.simplefilter("always")
38
39
  temp_df = pd.read_excel(BytesIO(r.content), engine="openpyxl")
39
40
  temp_df["证券类别"] = temp_df["证券类别"].str.strip()
40
- temp_df.iloc[:, 2:] = temp_df.iloc[:, 2:].applymap(lambda x: x.replace(",", ""))
41
+ temp_df.iloc[:, 2:] = temp_df.iloc[:, 2:].map(lambda x: x.replace(",", ""))
41
42
  temp_df.columns = ["证券类别", "数量", "成交金额", "总市值", "流通市值"]
42
- temp_df["数量"] = pd.to_numeric(temp_df["数量"])
43
- temp_df["成交金额"] = pd.to_numeric(temp_df["成交金额"])
43
+ temp_df["数量"] = pd.to_numeric(temp_df["数量"], errors="coerce")
44
+ temp_df["成交金额"] = pd.to_numeric(temp_df["成交金额"], errors="coerce")
44
45
  temp_df["总市值"] = pd.to_numeric(temp_df["总市值"], errors="coerce")
45
46
  temp_df["流通市值"] = pd.to_numeric(temp_df["流通市值"], errors="coerce")
46
47
  return temp_df
@@ -67,7 +68,15 @@ def stock_szse_area_summary(date: str = "202203") -> pd.DataFrame:
67
68
  with warnings.catch_warnings(record=True):
68
69
  warnings.simplefilter("always")
69
70
  temp_df = pd.read_excel(BytesIO(r.content), engine="openpyxl")
70
- temp_df.columns = ["序号", "地区", "总交易额", "占市场", "股票交易额", "基金交易额", "债券交易额"]
71
+ temp_df.columns = [
72
+ "序号",
73
+ "地区",
74
+ "总交易额",
75
+ "占市场",
76
+ "股票交易额",
77
+ "基金交易额",
78
+ "债券交易额",
79
+ ]
71
80
  temp_df["总交易额"] = temp_df["总交易额"].str.replace(",", "")
72
81
  temp_df["总交易额"] = pd.to_numeric(temp_df["总交易额"])
73
82
  temp_df["占市场"] = pd.to_numeric(temp_df["占市场"])
@@ -80,7 +89,9 @@ def stock_szse_area_summary(date: str = "202203") -> pd.DataFrame:
80
89
  return temp_df
81
90
 
82
91
 
83
- def stock_szse_sector_summary(symbol: str = "当月", date: str = "202303") -> pd.DataFrame:
92
+ def stock_szse_sector_summary(
93
+ symbol: str = "当月", date: str = "202303"
94
+ ) -> pd.DataFrame:
84
95
  """
85
96
  深圳证券交易所-统计资料-股票行业成交数据
86
97
  https://docs.static.szse.cn/www/market/periodical/month/W020220511355248518608.html
@@ -94,8 +105,8 @@ def stock_szse_sector_summary(symbol: str = "当月", date: str = "202303") -> p
94
105
  url = "https://www.szse.cn/market/periodical/month/index.html"
95
106
  r = requests.get(url)
96
107
  r.encoding = "utf8"
97
- soup = BeautifulSoup(r.text, "lxml")
98
- tags_list = soup.find_all("div", attrs={"class": "g-container"})[1].find_all(
108
+ soup = BeautifulSoup(r.text, features="lxml")
109
+ tags_list = soup.find_all(name="div", attrs={"class": "g-container"})[1].find_all(
99
110
  "script"
100
111
  )
101
112
  tags_dict = [
@@ -118,11 +129,14 @@ def stock_szse_sector_summary(symbol: str = "当月", date: str = "202303") -> p
118
129
  url = f"http://www.szse.cn/market/periodical/month/{date_url_dict[date_format]}"
119
130
  r = requests.get(url)
120
131
  r.encoding = "utf8"
121
- soup = BeautifulSoup(r.text, "lxml")
122
- url = [item for item in soup.find_all("a") if item.get_text() == "股票行业成交数据"][0]["href"]
132
+ soup = BeautifulSoup(r.text, features="lxml")
133
+ url = [
134
+ item for item in soup.find_all("a") if item.get_text() == "股票行业成交数据"
135
+ ][0]["href"]
123
136
 
124
137
  if symbol == "当月":
125
- temp_df = pd.read_html(url, encoding="gbk")[0]
138
+ r = requests.get(url)
139
+ temp_df = pd.read_html(StringIO(r.text), encoding="gbk")[0]
126
140
  temp_df.columns = [
127
141
  "项目名称",
128
142
  "项目名称-英文",
@@ -149,12 +163,20 @@ def stock_szse_sector_summary(symbol: str = "当月", date: str = "202303") -> p
149
163
  ]
150
164
 
151
165
  temp_df["交易天数"] = pd.to_numeric(temp_df["交易天数"], errors="coerce")
152
- temp_df["成交金额-人民币元"] = pd.to_numeric(temp_df["成交金额-人民币元"], errors="coerce")
153
- temp_df["成交金额-占总计"] = pd.to_numeric(temp_df["成交金额-占总计"], errors="coerce")
166
+ temp_df["成交金额-人民币元"] = pd.to_numeric(
167
+ temp_df["成交金额-人民币元"], errors="coerce"
168
+ )
169
+ temp_df["成交金额-占总计"] = pd.to_numeric(
170
+ temp_df["成交金额-占总计"], errors="coerce"
171
+ )
154
172
  temp_df["成交股数-股数"] = pd.to_numeric(temp_df["成交股数-股数"], errors="coerce")
155
- temp_df["成交股数-占总计"] = pd.to_numeric(temp_df["成交股数-占总计"], errors="coerce")
173
+ temp_df["成交股数-占总计"] = pd.to_numeric(
174
+ temp_df["成交股数-占总计"], errors="coerce"
175
+ )
156
176
  temp_df["成交笔数-笔"] = pd.to_numeric(temp_df["成交笔数-笔"], errors="coerce")
157
- temp_df["成交笔数-占总计"] = pd.to_numeric(temp_df["成交笔数-占总计"], errors="coerce")
177
+ temp_df["成交笔数-占总计"] = pd.to_numeric(
178
+ temp_df["成交笔数-占总计"], errors="coerce"
179
+ )
158
180
  return temp_df
159
181
 
160
182
 
@@ -174,7 +196,8 @@ def stock_sse_summary() -> pd.DataFrame:
174
196
  }
175
197
  headers = {
176
198
  "Referer": "http://www.sse.com.cn/",
177
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
199
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
200
+ "Chrome/89.0.4389.90 Safari/537.36",
178
201
  }
179
202
  r = requests.get(url, params=params, headers=headers)
180
203
  data_json = r.json()
@@ -279,9 +302,9 @@ def stock_sse_deal_daily(date: str = "20180117") -> pd.DataFrame:
279
302
  temp_df.sort_values("单日情况", ascending=True, inplace=True)
280
303
  temp_df.reset_index(drop=True, inplace=True)
281
304
  # 构建空
282
- temp_df['股票'] = "-"
283
- temp_df['科创板'] = "-"
284
- temp_df['股票回购'] = "-"
305
+ temp_df["股票"] = "-"
306
+ temp_df["科创板"] = "-"
307
+ temp_df["股票回购"] = "-"
285
308
  temp_df["股票"] = pd.to_numeric(temp_df["股票"], errors="coerce")
286
309
  temp_df["主板A"] = pd.to_numeric(temp_df["主板A"], errors="coerce")
287
310
  temp_df["主板B"] = pd.to_numeric(temp_df["主板B"], errors="coerce")
@@ -308,7 +331,8 @@ def stock_sse_deal_daily(date: str = "20180117") -> pd.DataFrame:
308
331
  }
309
332
  headers = {
310
333
  "Referer": "http://www.sse.com.cn/",
311
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
334
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
335
+ "Chrome/89.0.4389.90 Safari/537.36",
312
336
  }
313
337
  r = requests.get(url, params=params, headers=headers)
314
338
  data_json = r.json()
@@ -462,7 +486,8 @@ def stock_sse_deal_daily(date: str = "20180117") -> pd.DataFrame:
462
486
  }
463
487
  headers = {
464
488
  "Referer": "http://www.sse.com.cn/",
465
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
489
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
490
+ "Chrome/89.0.4389.90 Safari/537.36",
466
491
  }
467
492
  r = requests.get(url, params=params, headers=headers)
468
493
  data_json = r.json()
@@ -531,7 +556,8 @@ def stock_sse_deal_daily(date: str = "20180117") -> pd.DataFrame:
531
556
  }
532
557
  headers = {
533
558
  "Referer": "http://www.sse.com.cn/",
534
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
559
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
560
+ "Chrome/89.0.4389.90 Safari/537.36",
535
561
  }
536
562
  r = requests.get(url, params=params, headers=headers)
537
563
  data_json = r.json()
@@ -603,13 +629,15 @@ def stock_sse_deal_daily(date: str = "20180117") -> pd.DataFrame:
603
629
 
604
630
 
605
631
  if __name__ == "__main__":
606
- stock_szse_summary_df = stock_szse_summary(date="20070511")
632
+ stock_szse_summary_df = stock_szse_summary(date="20240901")
607
633
  print(stock_szse_summary_df)
608
634
 
609
635
  stock_szse_area_summary_df = stock_szse_area_summary(date="202203")
610
636
  print(stock_szse_area_summary_df)
611
637
 
612
- stock_szse_sector_summary_df = stock_szse_sector_summary(symbol="当月", date="202303")
638
+ stock_szse_sector_summary_df = stock_szse_sector_summary(
639
+ symbol="当月", date="202303"
640
+ )
613
641
  print(stock_szse_sector_summary_df)
614
642
 
615
643
  stock_sse_summary_df = stock_sse_summary()
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2022/9/28 17:02
4
+ Date: 2024/7/24 13:30
5
5
  Desc: 东方财富网-行情中心-美股市场-知名美股
6
- http://quote.eastmoney.com/center/gridlist.html#us_wellknown
6
+ https://quote.eastmoney.com/center/gridlist.html#us_wellknown
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -12,7 +13,7 @@ import requests
12
13
  def stock_us_famous_spot_em(symbol: str = "科技类") -> pd.DataFrame:
13
14
  """
14
15
  东方财富网-行情中心-美股市场-知名美股
15
- http://quote.eastmoney.com/center/gridlist.html#us_wellknown
16
+ https://quote.eastmoney.com/center/gridlist.html#us_wellknown
16
17
  :symbol: choice of {'科技类', '金融类', '医药食品类', '媒体类', '汽车能源类', '制造零售类'}
17
18
  :type: str
18
19
  :return: 知名美股实时行情
@@ -26,7 +27,7 @@ def stock_us_famous_spot_em(symbol: str = "科技类") -> pd.DataFrame:
26
27
  "汽车能源类": "0219",
27
28
  "制造零售类": "0221",
28
29
  }
29
- url = "http://69.push2.eastmoney.com/api/qt/clist/get"
30
+ url = "https://69.push2.eastmoney.com/api/qt/clist/get"
30
31
  params = {
31
32
  "pn": "1",
32
33
  "pz": "2000",
@@ -37,7 +38,8 @@ def stock_us_famous_spot_em(symbol: str = "科技类") -> pd.DataFrame:
37
38
  "invt": "2",
38
39
  "fid": "f3",
39
40
  "fs": f"b:MK{market_map[symbol]}",
40
- "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
41
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,"
42
+ "f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
41
43
  "_": "1631271634231",
42
44
  }
43
45
  r = requests.get(url, params=params)
@@ -111,6 +113,13 @@ def stock_us_famous_spot_em(symbol: str = "科技类") -> pd.DataFrame:
111
113
 
112
114
 
113
115
  if __name__ == "__main__":
114
- for item in {"科技类", "金融类", "医药食品类", "媒体类", "汽车能源类", "制造零售类"}:
116
+ for item in {
117
+ "科技类",
118
+ "金融类",
119
+ "医药食品类",
120
+ "媒体类",
121
+ "汽车能源类",
122
+ "制造零售类",
123
+ }:
115
124
  stock_us_famous_spot_em_df = stock_us_famous_spot_em(symbol=item)
116
125
  print(stock_us_famous_spot_em_df)
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2021/9/10 19:02
4
+ Date: 2024/4/11 17:00
5
5
  Desc: 东方财富网-行情中心-美股市场-粉单市场
6
- http://quote.eastmoney.com/center/gridlist.html#us_pinksheet
6
+ https://quote.eastmoney.com/center/gridlist.html#us_pinksheet
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -12,11 +13,11 @@ import requests
12
13
  def stock_us_pink_spot_em() -> pd.DataFrame:
13
14
  """
14
15
  东方财富网-行情中心-美股市场-粉单市场
15
- http://quote.eastmoney.com/center/gridlist.html#us_pinksheet
16
+ https://quote.eastmoney.com/center/gridlist.html#us_pinksheet
16
17
  :return: 粉单市场实时行情
17
18
  :rtype: pandas.DataFrame
18
19
  """
19
- url = "http://23.push2.eastmoney.com/api/qt/clist/get"
20
+ url = "https://23.push2.eastmoney.com/api/qt/clist/get"
20
21
  params = {
21
22
  "pn": "1",
22
23
  "pz": "2000",
@@ -27,7 +28,8 @@ def stock_us_pink_spot_em() -> pd.DataFrame:
27
28
  "invt": "2",
28
29
  "fid": "f3",
29
30
  "fs": "m:153",
30
- "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152",
31
+ "fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,"
32
+ "f26,f22,f33,f11,f62,f128,f136,f115,f152",
31
33
  "_": "1631271634231",
32
34
  }
33
35
  r = requests.get(url, params=params)