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,16 +1,17 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/10/23 19:00
4
+ Date: 2024/4/4 19:00
5
5
  Desc: 东方财富网-概念板-行情中心-日K-筹码分布
6
6
  https://quote.eastmoney.com/concept/sz000001.html
7
7
  """
8
+
8
9
  import json
9
10
  from datetime import datetime
10
11
 
11
12
  import pandas as pd
12
13
  import requests
13
- from py_mini_racer import py_mini_racer
14
+ import py_mini_racer
14
15
 
15
16
  from akshare.stock_feature.stock_hist_em import code_id_map_em
16
17
 
@@ -34,6 +35,9 @@ def stock_cyq_em(symbol: str = "000001", adjust: str = "") -> pd.DataFrame:
34
35
  * @param {number} index 当前选中的K线的索引
35
36
  * @return {{x: Array.<number>, y: Array.<number>}}
36
37
  */
38
+ /**
39
+ this.range = 120;
40
+ */
37
41
  function CYQCalculator(index, klinedata) {
38
42
  var maxprice = 0;
39
43
  var minprice = 0;
@@ -222,35 +226,35 @@ def stock_cyq_em(symbol: str = "000001", adjust: str = "") -> pd.DataFrame:
222
226
  url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
223
227
  params = {
224
228
  "secid": f"{code_id_dict[symbol]}.{symbol}",
225
- 'ut': 'fa5fd1943c7b386f172d6893dbfba10b',
226
- 'fields1': 'f1,f2,f3,f4,f5,f6',
227
- 'fields2': 'f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61',
228
- 'klt': '101',
229
- 'fqt': adjust_dict[adjust],
230
- 'end': datetime.now().date().strftime("%Y%m%d"),
231
- 'lmt': '210',
232
- 'cb': 'quote_jp1',
229
+ "ut": "fa5fd1943c7b386f172d6893dbfba10b",
230
+ "fields1": "f1,f2,f3,f4,f5,f6",
231
+ "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61",
232
+ "klt": "101",
233
+ "fqt": adjust_dict[adjust],
234
+ "end": datetime.now().date().strftime("%Y%m%d"),
235
+ "lmt": "210",
236
+ "cb": "quote_jp1",
233
237
  }
234
238
  r = requests.get(url, params=params)
235
239
  data_json = r.text.strip("quote_jp1(").strip(");")
236
240
  data_json = json.loads(data_json)
237
- temp_df = pd.DataFrame([item.split(",") for item in data_json['data']['klines']])
241
+ temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
238
242
  temp_df.columns = [
239
- 'date',
240
- 'open',
241
- 'close',
242
- 'high',
243
- 'low',
244
- 'volume',
245
- 'volume_money',
246
- 'zf',
247
- 'zdf',
248
- 'zde',
249
- 'hsl',
243
+ "date",
244
+ "open",
245
+ "close",
246
+ "high",
247
+ "low",
248
+ "volume",
249
+ "volume_money",
250
+ "zf",
251
+ "zdf",
252
+ "zde",
253
+ "hsl",
250
254
  ]
251
255
  for item in temp_df.columns[1:]:
252
256
  temp_df[item] = pd.to_numeric(temp_df[item])
253
- temp_df['index'] = range(0, len(temp_df))
257
+ temp_df["index"] = range(0, len(temp_df))
254
258
  records = temp_df.to_dict(orient="records")
255
259
  date_list = []
256
260
  benefit_part = []
@@ -263,27 +267,27 @@ def stock_cyq_em(symbol: str = "000001", adjust: str = "") -> pd.DataFrame:
263
267
  pct_90_con = []
264
268
  for i in range(0, len(records)):
265
269
  mcode = js_code.call("CYQCalculator", i, records)
266
- date_list.append(records[i]['date'])
267
- benefit_part.append(mcode['benefitPart'])
268
- avg_cost.append(mcode['avgCost'])
269
- pct_70_low.append(mcode["percentChips"]['70']['priceRange'][0])
270
- pct_70_high.append(mcode["percentChips"]['70']['priceRange'][1])
271
- pct_90_low.append(mcode["percentChips"]['90']['priceRange'][0])
272
- pct_90_high.append(mcode["percentChips"]['90']['priceRange'][1])
273
- pct_70_con.append(mcode["percentChips"]['70']['concentration'])
274
- pct_90_con.append(mcode["percentChips"]['90']['concentration'])
275
- temp_df = pd.DataFrame([
276
- date_list,
277
- benefit_part,
278
- avg_cost,
279
- pct_90_low,
280
- pct_90_high,
281
- pct_90_con,
282
- pct_70_low,
283
- pct_70_high,
284
- pct_70_con,
285
-
286
- ]
270
+ date_list.append(records[i]["date"])
271
+ benefit_part.append(mcode["benefitPart"])
272
+ avg_cost.append(mcode["avgCost"])
273
+ pct_70_low.append(mcode["percentChips"]["70"]["priceRange"][0])
274
+ pct_70_high.append(mcode["percentChips"]["70"]["priceRange"][1])
275
+ pct_90_low.append(mcode["percentChips"]["90"]["priceRange"][0])
276
+ pct_90_high.append(mcode["percentChips"]["90"]["priceRange"][1])
277
+ pct_70_con.append(mcode["percentChips"]["70"]["concentration"])
278
+ pct_90_con.append(mcode["percentChips"]["90"]["concentration"])
279
+ temp_df = pd.DataFrame(
280
+ [
281
+ date_list,
282
+ benefit_part,
283
+ avg_cost,
284
+ pct_90_low,
285
+ pct_90_high,
286
+ pct_90_con,
287
+ pct_70_low,
288
+ pct_70_high,
289
+ pct_70_con,
290
+ ]
287
291
  ).T
288
292
  temp_df.columns = [
289
293
  "日期",
@@ -296,20 +300,20 @@ def stock_cyq_em(symbol: str = "000001", adjust: str = "") -> pd.DataFrame:
296
300
  "70成本-高",
297
301
  "70集中度",
298
302
  ]
299
- temp_df['日期'] = pd.to_datetime(temp_df['日期'], errors="coerce").dt.date
300
- temp_df['获利比例'] = pd.to_numeric(temp_df['获利比例'], errors="coerce")
301
- temp_df['平均成本'] = pd.to_numeric(temp_df['平均成本'], errors="coerce")
302
- temp_df['90成本-低'] = pd.to_numeric(temp_df['90成本-低'], errors="coerce")
303
- temp_df['90成本-高'] = pd.to_numeric(temp_df['90成本-高'], errors="coerce")
304
- temp_df['90集中度'] = pd.to_numeric(temp_df['90集中度'], errors="coerce")
305
- temp_df['70成本-低'] = pd.to_numeric(temp_df['70成本-低'], errors="coerce")
306
- temp_df['70成本-高'] = pd.to_numeric(temp_df['70成本-高'], errors="coerce")
307
- temp_df['70集中度'] = pd.to_numeric(temp_df['70集中度'], errors="coerce")
303
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
304
+ temp_df["获利比例"] = pd.to_numeric(temp_df["获利比例"], errors="coerce")
305
+ temp_df["平均成本"] = pd.to_numeric(temp_df["平均成本"], errors="coerce")
306
+ temp_df["90成本-低"] = pd.to_numeric(temp_df["90成本-低"], errors="coerce")
307
+ temp_df["90成本-高"] = pd.to_numeric(temp_df["90成本-高"], errors="coerce")
308
+ temp_df["90集中度"] = pd.to_numeric(temp_df["90集中度"], errors="coerce")
309
+ temp_df["70成本-低"] = pd.to_numeric(temp_df["70成本-低"], errors="coerce")
310
+ temp_df["70成本-高"] = pd.to_numeric(temp_df["70成本-高"], errors="coerce")
311
+ temp_df["70集中度"] = pd.to_numeric(temp_df["70集中度"], errors="coerce")
308
312
  temp_df = temp_df.iloc[-90:, :].copy()
309
313
  temp_df.reset_index(inplace=True, drop=True)
310
314
  return temp_df
311
315
 
312
316
 
313
- if __name__ == '__main__':
317
+ if __name__ == "__main__":
314
318
  stock_cyq_em_df = stock_cyq_em(symbol="000001", adjust="")
315
319
  print(stock_cyq_em_df)
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/12/19 18:00
4
+ Date: 2024/5/1 20:00
5
5
  Desc: 巨潮资讯-首页-公告查询-信息披露
6
6
  http://www.cninfo.com.cn/new/commonUrl/pageOfSearch?url=disclosure/list/search
7
7
  """
8
+
8
9
  import math
9
10
  from functools import lru_cache
10
11
 
@@ -22,33 +23,34 @@ def __get_category_dict() -> dict:
22
23
  :return: dict
23
24
  :rtype: dict
24
25
  """
25
- big_dict = {'年报': 'category_ndbg_szsh',
26
- '半年报': 'category_bndbg_szsh',
27
- '一季报': 'category_yjdbg_szsh',
28
- '三季报': 'category_sjdbg_szsh',
29
- '业绩预告': 'category_yjygjxz_szsh',
30
- '权益分派': 'category_qyfpxzcs_szsh',
31
- '董事会': 'category_dshgg_szsh',
32
- '监事会': 'category_jshgg_szsh',
33
- '股东大会': 'category_gddh_szsh',
34
- '日常经营': 'category_rcjy_szsh',
35
- '公司治理': 'category_gszl_szsh',
36
- '中介报告': 'category_zj_szsh',
37
- '首发': 'category_sf_szsh',
38
- '增发': 'category_zf_szsh',
39
- '股权激励': 'category_gqjl_szsh',
40
- '配股': 'category_pg_szsh',
41
- '解禁': 'category_jj_szsh',
42
- '公司债': 'category_gszq_szsh',
43
- '可转债': 'category_kzzq_szsh',
44
- '其他融资': 'category_qtrz_szsh',
45
- '股权变动': 'category_gqbd_szsh',
46
- '补充更正': 'category_bcgz_szsh',
47
- '澄清致歉': 'category_cqdq_szsh',
48
- '风险提示': 'category_fxts_szsh',
49
- '特别处理和退市': 'category_tbclts_szsh',
50
- '退市整理期': 'category_tszlq_szsh'
51
- }
26
+ big_dict = {
27
+ "年报": "category_ndbg_szsh",
28
+ "半年报": "category_bndbg_szsh",
29
+ "一季报": "category_yjdbg_szsh",
30
+ "三季报": "category_sjdbg_szsh",
31
+ "业绩预告": "category_yjygjxz_szsh",
32
+ "权益分派": "category_qyfpxzcs_szsh",
33
+ "董事会": "category_dshgg_szsh",
34
+ "监事会": "category_jshgg_szsh",
35
+ "股东大会": "category_gddh_szsh",
36
+ "日常经营": "category_rcjy_szsh",
37
+ "公司治理": "category_gszl_szsh",
38
+ "中介报告": "category_zj_szsh",
39
+ "首发": "category_sf_szsh",
40
+ "增发": "category_zf_szsh",
41
+ "股权激励": "category_gqjl_szsh",
42
+ "配股": "category_pg_szsh",
43
+ "解禁": "category_jj_szsh",
44
+ "公司债": "category_gszq_szsh",
45
+ "可转债": "category_kzzq_szsh",
46
+ "其他融资": "category_qtrz_szsh",
47
+ "股权变动": "category_gqbd_szsh",
48
+ "补充更正": "category_bcgz_szsh",
49
+ "澄清致歉": "category_cqdq_szsh",
50
+ "风险提示": "category_fxts_szsh",
51
+ "特别处理和退市": "category_tbclts_szsh",
52
+ "退市整理期": "category_tszlq_szsh",
53
+ }
52
54
  return big_dict
53
55
 
54
56
 
@@ -74,16 +76,17 @@ def __get_stock_json(symbol: str = "沪深京") -> dict:
74
76
  url = "http://www.cninfo.com.cn/new/data/bond_stock.json"
75
77
  r = requests.get(url)
76
78
  text_json = r.json()
77
- temp_df = pd.DataFrame([item for item in text_json['stockList']])
78
- return dict(zip(temp_df['code'], temp_df['orgId']))
79
+ temp_df = pd.DataFrame([item for item in text_json["stockList"]])
80
+ return dict(zip(temp_df["code"], temp_df["orgId"]))
79
81
 
80
82
 
81
83
  def stock_zh_a_disclosure_report_cninfo(
82
- symbol: str = "000001",
83
- market: str = "沪深京",
84
- category: str = "",
85
- start_date: str = "20230618",
86
- end_date: str = "20231219"
84
+ symbol: str = "000001",
85
+ market: str = "沪深京",
86
+ keyword: str = "",
87
+ category: str = "",
88
+ start_date: str = "20230618",
89
+ end_date: str = "20231219",
87
90
  ) -> pd.DataFrame:
88
91
  """
89
92
  巨潮资讯-首页-公告查询-信息披露公告
@@ -92,7 +95,12 @@ def stock_zh_a_disclosure_report_cninfo(
92
95
  :type symbol: str
93
96
  :param market: choice of {"沪深京", "港股", "三板", "基金", "债券", "监管", "预披露"}
94
97
  :type market: str
95
- :param category: choice of {'年报', '半年报', '一季报', '三季报', '业绩预告', '权益分派', '董事会', '监事会', '股东大会', '日常经营', '公司治理', '中介报告', '首发', '增发', '股权激励', '配股', '解禁', '公司债', '可转债', '其他融资', '股权变动', '补充更正', '澄清致歉', '风险提示', '特别处理和退市', '退市整理期'}
98
+ :param keyword: 关键词
99
+ :type keyword: str
100
+ :param category: choice of {'年报', '半年报', '一季报', '三季报', '业绩预告', '权益分派',
101
+ '董事会', '监事会', '股东大会', '日常经营', '公司治理', '中介报告',
102
+ '首发', '增发', '股权激励', '配股', '解禁', '公司债', '可转债', '其他融资',
103
+ '股权变动', '补充更正', '澄清致歉', '风险提示', '特别处理和退市', '退市整理期'}
96
104
  :type category: str
97
105
  :param start_date: 开始时间
98
106
  :type start_date: str
@@ -110,6 +118,7 @@ def stock_zh_a_disclosure_report_cninfo(
110
118
  "监管": "regulator",
111
119
  "预披露": "pre_disclosure",
112
120
  }
121
+ stock_id_map = ""
113
122
  if market == "沪深京":
114
123
  stock_id_map = __get_stock_json(symbol)
115
124
  category_dict = __get_category_dict()
@@ -117,24 +126,25 @@ def stock_zh_a_disclosure_report_cninfo(
117
126
  stock_item = "" if symbol == "" else f"{symbol},{stock_id_map[symbol]}"
118
127
  category_item = "" if category == "" else f"{category_dict[category]}"
119
128
  payload = {
120
- 'pageNum': '1',
121
- 'pageSize': '30',
122
- 'column': column_map[market],
123
- 'tabName': 'fulltext',
124
- 'plate': '',
125
- 'stock': stock_item,
126
- 'searchkey': '',
127
- 'secid': '',
128
- 'category': category_item,
129
- 'trade': '',
130
- 'seDate': f'{"-".join([start_date[:4], start_date[4:6], start_date[6:]])}~{"-".join([end_date[:4], end_date[4:6], end_date[6:]])}',
131
- 'sortName': '',
132
- 'sortType': '',
133
- 'isHLtitle': 'true'
129
+ "pageNum": "1",
130
+ "pageSize": "30",
131
+ "column": column_map[market],
132
+ "tabName": "fulltext",
133
+ "plate": "",
134
+ "stock": stock_item,
135
+ "searchkey": keyword,
136
+ "secid": "",
137
+ "category": category_item,
138
+ "trade": "",
139
+ "seDate": f'{"-".join([start_date[:4], start_date[4:6], start_date[6:]])}~'
140
+ f'{"-".join([end_date[:4], end_date[4:6], end_date[6:]])}',
141
+ "sortName": "",
142
+ "sortType": "",
143
+ "isHLtitle": "true",
134
144
  }
135
- r = requests.post(url, data=payload)
145
+ r = requests.post(url, params=payload)
136
146
  text_json = r.json()
137
- page_num = math.ceil(int(text_json['totalAnnouncement']) / 30)
147
+ page_num = math.ceil(int(text_json["totalAnnouncement"]) / 30)
138
148
  big_df = pd.DataFrame()
139
149
  tqdm = get_tqdm()
140
150
  for page in tqdm(range(1, page_num + 1), leave=False):
@@ -142,27 +152,45 @@ def stock_zh_a_disclosure_report_cninfo(
142
152
  r = requests.post(url, data=payload)
143
153
  text_json = r.json()
144
154
  temp_df = pd.DataFrame(text_json["announcements"])
145
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
146
- big_df.rename(columns={
147
- "secCode": "代码",
148
- "secName": "简称",
149
- "announcementTitle": "公告标题",
150
- "announcementTime": "公告时间",
151
- }, inplace=True)
152
- big_df = big_df[["代码", "简称", "公告标题", "公告时间", 'announcementId', 'orgId']]
153
- big_df['公告时间'] = pd.to_datetime(big_df['公告时间'], unit="ms", utc=True, errors="coerce")
154
- big_df['公告时间'] = big_df['公告时间'].dt.tz_convert('Asia/Shanghai').dt.date
155
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
156
+ big_df.rename(
157
+ columns={
158
+ "secCode": "代码",
159
+ "secName": "简称",
160
+ "announcementTitle": "公告标题",
161
+ "announcementTime": "公告时间",
162
+ },
163
+ inplace=True,
164
+ )
165
+ big_df = big_df[["代码", "简称", "公告标题", "公告时间", "announcementId", "orgId"]]
166
+ big_df["公告时间"] = pd.to_datetime(
167
+ big_df["公告时间"], unit="ms", utc=True, errors="coerce"
168
+ )
169
+ big_df["公告时间"] = (
170
+ big_df["公告时间"]
171
+ .dt.tz_convert("Asia/Shanghai")
172
+ .dt.tz_localize(None)
173
+ .astype(str)
174
+ )
155
175
  url_list = []
156
- for item in zip(big_df['代码'], big_df['announcementId'], big_df['orgId'], big_df['公告时间']):
157
- url_format = f"http://www.cninfo.com.cn/new/disclosure/detail?stockCode={item[0]}&announcementId={item[1]}&orgId={item[2]}&announcementTime={item[3]}"
176
+ for item in zip(
177
+ big_df["代码"], big_df["announcementId"], big_df["orgId"], big_df["公告时间"]
178
+ ):
179
+ url_format = (
180
+ f"http://www.cninfo.com.cn/new/disclosure/detail?stockCode={item[0]}&"
181
+ f"announcementId={item[1]}&orgId={item[2]}&announcementTime={item[3]}"
182
+ )
158
183
  url_list.append(url_format)
159
- big_df['公告链接'] = url_list
184
+ big_df["公告链接"] = url_list
160
185
  big_df = big_df[["代码", "简称", "公告标题", "公告时间", "公告链接"]]
161
186
  return big_df
162
187
 
163
188
 
164
189
  def stock_zh_a_disclosure_relation_cninfo(
165
- symbol: str = "000001", market: str = "沪深京", start_date: str = "20230618", end_date: str = "20231219"
190
+ symbol: str = "000001",
191
+ market: str = "沪深京",
192
+ start_date: str = "20230618",
193
+ end_date: str = "20231219",
166
194
  ) -> pd.DataFrame:
167
195
  """
168
196
  巨潮资讯-首页-数据-预约披露调研
@@ -187,29 +215,31 @@ def stock_zh_a_disclosure_relation_cninfo(
187
215
  "监管": "regulator",
188
216
  "预披露": "pre_disclosure",
189
217
  }
218
+ stock_id_map = ""
190
219
  if market == "沪深京":
191
220
  stock_id_map = __get_stock_json(symbol)
192
221
  stock_item = "" if symbol == "" else f"{symbol},{stock_id_map[symbol]}"
193
222
  url = "http://www.cninfo.com.cn/new/hisAnnouncement/query"
194
223
  payload = {
195
- 'pageNum': '1',
196
- 'pageSize': '30',
197
- 'column': column_map[market],
198
- 'tabName': 'relation',
199
- 'plate': '',
200
- 'stock': stock_item,
201
- 'searchkey': '',
202
- 'secid': '',
203
- 'category': '',
204
- 'trade': '',
205
- 'seDate': f'{"-".join([start_date[:4], start_date[4:6], start_date[6:]])}~{"-".join([end_date[:4], end_date[4:6], end_date[6:]])}',
206
- 'sortName': '',
207
- 'sortType': '',
208
- 'isHLtitle': 'true'
224
+ "pageNum": "1",
225
+ "pageSize": "30",
226
+ "column": column_map[market],
227
+ "tabName": "relation",
228
+ "plate": "",
229
+ "stock": stock_item,
230
+ "searchkey": "",
231
+ "secid": "",
232
+ "category": "",
233
+ "trade": "",
234
+ "seDate": f'{"-".join([start_date[:4], start_date[4:6], start_date[6:]])}~'
235
+ f'{"-".join([end_date[:4], end_date[4:6], end_date[6:]])}',
236
+ "sortName": "",
237
+ "sortType": "",
238
+ "isHLtitle": "true",
209
239
  }
210
240
  r = requests.post(url, data=payload)
211
241
  text_json = r.json()
212
- page_num = math.ceil(int(text_json['totalAnnouncement']) / 30)
242
+ page_num = math.ceil(int(text_json["totalAnnouncement"]) / 30)
213
243
  big_df = pd.DataFrame()
214
244
  tqdm = get_tqdm()
215
245
  for page in tqdm(range(1, page_num + 1), leave=False):
@@ -217,37 +247,52 @@ def stock_zh_a_disclosure_relation_cninfo(
217
247
  r = requests.post(url, data=payload)
218
248
  text_json = r.json()
219
249
  temp_df = pd.DataFrame(text_json["announcements"])
220
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
221
- big_df.rename(columns={
222
- "secCode": "代码",
223
- "secName": "简称",
224
- "announcementTitle": "公告标题",
225
- "announcementTime": "公告时间",
226
- }, inplace=True)
227
- big_df = big_df[["代码", "简称", "公告标题", "公告时间", 'announcementId', 'orgId']]
228
- big_df['公告时间'] = pd.to_datetime(big_df['公告时间'], unit="ms", utc=True, errors="coerce")
229
- big_df['公告时间'] = big_df['公告时间'].dt.tz_convert('Asia/Shanghai').dt.date
250
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
251
+ big_df.rename(
252
+ columns={
253
+ "secCode": "代码",
254
+ "secName": "简称",
255
+ "announcementTitle": "公告标题",
256
+ "announcementTime": "公告时间",
257
+ },
258
+ inplace=True,
259
+ )
260
+ big_df = big_df[["代码", "简称", "公告标题", "公告时间", "announcementId", "orgId"]]
261
+ big_df["公告时间"] = pd.to_datetime(
262
+ big_df["公告时间"], unit="ms", utc=True, errors="coerce"
263
+ )
264
+ big_df["公告时间"] = (
265
+ big_df["公告时间"]
266
+ .dt.tz_convert("Asia/Shanghai")
267
+ .dt.tz_convert(None)
268
+ .astype(str)
269
+ )
230
270
  url_list = []
231
- for item in zip(big_df['代码'], big_df['announcementId'], big_df['orgId'], big_df['公告时间']):
232
- url_format = f"http://www.cninfo.com.cn/new/disclosure/detail?stockCode={item[0]}&announcementId={item[1]}&orgId={item[2]}&announcementTime={item[3]}"
271
+ for item in zip(
272
+ big_df["代码"], big_df["announcementId"], big_df["orgId"], big_df["公告时间"]
273
+ ):
274
+ url_format = (
275
+ f"http://www.cninfo.com.cn/new/disclosure/detail?stockCode={item[0]}"
276
+ f"&announcementId={item[1]}&orgId={item[2]}&announcementTime={item[3]}"
277
+ )
233
278
  url_list.append(url_format)
234
- big_df['公告链接'] = url_list
279
+ big_df["公告链接"] = url_list
235
280
  big_df = big_df[["代码", "简称", "公告标题", "公告时间", "公告链接"]]
236
281
  return big_df
237
282
 
238
283
 
239
284
  if __name__ == "__main__":
240
285
  stock_zh_a_disclosure_report_cninfo_df = stock_zh_a_disclosure_report_cninfo(
241
- symbol="000001",
286
+ symbol="",
242
287
  market="沪深京",
243
- category="公司治理",
244
- start_date="20230619",
245
- end_date="20231220")
288
+ keyword="大模型",
289
+ category="",
290
+ start_date="20231003",
291
+ end_date="20240430",
292
+ )
246
293
  print(stock_zh_a_disclosure_report_cninfo_df)
247
294
 
248
295
  stock_zh_a_disclosure_relation_cninfo_df = stock_zh_a_disclosure_relation_cninfo(
249
- symbol="000001",
250
- market="沪深京",
251
- start_date="20230619",
252
- end_date="20231220")
296
+ symbol="000001", market="沪深京", start_date="20230619", end_date="20231220"
297
+ )
253
298
  print(stock_zh_a_disclosure_relation_cninfo_df)