akshare 1.12.95__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 (240) hide show
  1. akshare/__init__.py +446 -139
  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_convert.py +40 -16
  10. akshare/bond/bond_info_cm.py +28 -8
  11. akshare/bond/bond_issue_cninfo.py +73 -30
  12. akshare/bond/{bond_zh_cov_sina.py → bond_zh_cov.py} +41 -17
  13. akshare/bond/bond_zh_sina.py +57 -51
  14. akshare/cal/__init__.py +0 -0
  15. akshare/cal/rv.py +170 -0
  16. akshare/cost/cost_living.py +7 -5
  17. akshare/currency/currency_safe.py +7 -6
  18. akshare/data/cninfo.js +15 -0
  19. akshare/datasets.py +10 -21
  20. akshare/economic/macro_bank.py +95 -653
  21. akshare/economic/macro_china.py +772 -1024
  22. akshare/economic/macro_china_hk.py +65 -243
  23. akshare/economic/macro_china_nbs.py +24 -7
  24. akshare/economic/macro_constitute.py +17 -12
  25. akshare/economic/macro_euro.py +13 -6
  26. akshare/economic/macro_finance_ths.py +133 -0
  27. akshare/economic/macro_info_ws.py +100 -0
  28. akshare/economic/macro_japan.py +5 -4
  29. akshare/economic/macro_other.py +12 -9
  30. akshare/economic/macro_usa.py +376 -1940
  31. akshare/economic/marco_cnbs.py +11 -6
  32. akshare/energy/energy_carbon.py +94 -125
  33. akshare/event/migration.py +3 -2
  34. akshare/exceptions.py +43 -0
  35. akshare/file_fold/calendar.json +245 -2
  36. akshare/fortune/fortune_500.py +15 -48
  37. akshare/fund/fund_amac.py +157 -75
  38. akshare/fund/fund_em.py +191 -184
  39. akshare/fund/fund_etf_em.py +20 -19
  40. akshare/fund/fund_etf_sina.py +71 -23
  41. akshare/fund/fund_etf_ths.py +93 -0
  42. akshare/fund/fund_fee_em.py +98 -0
  43. akshare/fund/fund_lof_em.py +10 -8
  44. akshare/fund/fund_portfolio_em.py +60 -50
  45. akshare/fund/fund_rank_em.py +91 -82
  46. akshare/fund/fund_report_cninfo.py +63 -48
  47. akshare/fund/fund_scale_sina.py +20 -10
  48. akshare/fund/fund_xq.py +139 -109
  49. akshare/futures/cons.py +8 -31
  50. akshare/futures/cot.py +185 -137
  51. akshare/futures/futures_basis.py +97 -32
  52. akshare/futures/futures_comm_ctp.py +37 -0
  53. akshare/futures/futures_comm_qihuo.py +74 -45
  54. akshare/futures/futures_daily_bar.py +121 -184
  55. akshare/futures/futures_hf_em.py +66 -61
  56. akshare/futures/futures_hq_sina.py +79 -61
  57. akshare/futures/futures_index_ccidx.py +6 -3
  58. akshare/futures/futures_inventory_99.py +61 -272
  59. akshare/futures/futures_news_shmet.py +4 -2
  60. akshare/futures/futures_roll_yield.py +12 -25
  61. akshare/futures/futures_spot_stock_em.py +19 -13
  62. akshare/futures/futures_stock_js.py +14 -12
  63. akshare/futures/futures_to_spot.py +38 -33
  64. akshare/futures/futures_warehouse_receipt.py +75 -71
  65. akshare/futures/futures_zh_sina.py +73 -50
  66. akshare/futures/symbol_var.py +18 -13
  67. akshare/futures_derivative/futures_contract_info_czce.py +60 -52
  68. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  69. akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
  70. akshare/futures_derivative/futures_cot_sina.py +26 -19
  71. akshare/futures_derivative/futures_spot_sys.py +21 -8
  72. akshare/fx/currency_investing.py +19 -285
  73. akshare/index/index_cflp.py +29 -26
  74. akshare/index/index_cni.py +86 -88
  75. akshare/index/index_cons.py +26 -10
  76. akshare/index/index_cx.py +248 -47
  77. akshare/index/index_drewry.py +17 -16
  78. akshare/index/index_hog.py +27 -26
  79. akshare/index/index_option_qvix.py +329 -0
  80. akshare/index/index_research_fund_sw.py +134 -0
  81. akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
  82. akshare/index/index_spot.py +9 -5
  83. akshare/index/index_stock_hk.py +35 -16
  84. akshare/index/index_stock_us_sina.py +1 -1
  85. akshare/index/index_stock_zh.py +180 -89
  86. akshare/index/index_stock_zh_csindex.py +15 -369
  87. akshare/index/index_sw.py +62 -34
  88. akshare/index/index_yw.py +46 -23
  89. akshare/index/index_zh_a_scope.py +48 -0
  90. akshare/index/index_zh_em.py +17 -14
  91. akshare/interest_rate/interbank_rate_em.py +14 -9
  92. akshare/movie/artist_yien.py +32 -5
  93. akshare/movie/movie_yien.py +92 -18
  94. akshare/movie/video_yien.py +28 -5
  95. akshare/news/news_baidu.py +78 -44
  96. akshare/news/news_cctv.py +38 -38
  97. akshare/news/news_stock.py +6 -3
  98. akshare/nlp/nlp_interface.py +7 -8
  99. akshare/option/cons.py +11 -11
  100. akshare/option/option_comm_qihuo.py +86 -0
  101. akshare/option/option_commodity.py +178 -51
  102. akshare/option/option_daily_stats_sse_szse.py +146 -0
  103. akshare/option/option_em.py +147 -138
  104. akshare/option/option_finance_sina.py +160 -137
  105. akshare/option/option_lhb_em.py +62 -56
  106. akshare/option/option_risk_indicator_sse.py +17 -14
  107. akshare/other/other_car_cpca.py +934 -0
  108. akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
  109. akshare/qdii/__init__.py +0 -0
  110. akshare/qdii/qdii_jsl.py +233 -0
  111. akshare/request.py +117 -0
  112. akshare/spot/spot_hog_soozhu.py +232 -0
  113. akshare/spot/spot_price_qh.py +121 -0
  114. akshare/spot/spot_sge.py +63 -10
  115. akshare/stock/stock_allotment_cninfo.py +10 -9
  116. akshare/stock/stock_ask_bid_em.py +27 -3
  117. akshare/stock/stock_board_concept_em.py +23 -14
  118. akshare/stock/stock_board_industry_em.py +40 -34
  119. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  120. akshare/stock/stock_cg_guarantee.py +41 -51
  121. akshare/stock/stock_cg_lawsuit.py +36 -35
  122. akshare/stock/stock_dividend_cninfo.py +12 -6
  123. akshare/stock/stock_dzjy_em.py +347 -260
  124. akshare/stock/stock_fund_em.py +332 -84
  125. akshare/stock/stock_hk_famous.py +108 -0
  126. akshare/stock/stock_hk_sina.py +8 -7
  127. akshare/stock/stock_hold_control_cninfo.py +100 -15
  128. akshare/stock/stock_hold_control_em.py +4 -3
  129. akshare/stock/stock_hold_num_cninfo.py +18 -12
  130. akshare/stock/stock_hot_rank_em.py +2 -1
  131. akshare/stock/stock_hot_search_baidu.py +5 -2
  132. akshare/stock/stock_industry_cninfo.py +24 -18
  133. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  134. akshare/stock/stock_industry_sw.py +9 -10
  135. akshare/stock/stock_info.py +25 -15
  136. akshare/stock/stock_info_em.py +5 -2
  137. akshare/stock/stock_intraday_em.py +5 -2
  138. akshare/stock/stock_intraday_sina.py +22 -18
  139. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  140. akshare/stock/stock_new_cninfo.py +32 -19
  141. akshare/stock/stock_news_cx.py +39 -0
  142. akshare/stock/stock_profile_cninfo.py +9 -8
  143. akshare/stock/stock_rank_forecast.py +8 -6
  144. akshare/stock/stock_share_changes_cninfo.py +18 -14
  145. akshare/stock/stock_share_hold.py +24 -19
  146. akshare/stock/stock_summary.py +54 -26
  147. akshare/stock/stock_us_famous.py +15 -6
  148. akshare/stock/stock_us_pink.py +7 -5
  149. akshare/stock/stock_us_sina.py +15 -12
  150. akshare/stock/stock_xq.py +38 -12
  151. akshare/stock/stock_zh_a_sina.py +53 -78
  152. akshare/stock/stock_zh_b_sina.py +32 -55
  153. akshare/stock/stock_zh_kcb_report.py +11 -9
  154. akshare/stock/stock_zh_kcb_sina.py +67 -64
  155. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  156. akshare/stock_feature/stock_a_high_low.py +5 -2
  157. akshare/stock_feature/stock_a_indicator.py +12 -9
  158. akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
  159. akshare/stock_feature/stock_account_em.py +58 -40
  160. akshare/stock_feature/stock_analyst_em.py +36 -27
  161. akshare/stock_feature/stock_board_industry_ths.py +136 -400
  162. akshare/stock_feature/stock_comment_em.py +118 -85
  163. akshare/stock_feature/stock_concept_futu.py +183 -0
  164. akshare/stock_feature/stock_cyq_em.py +58 -54
  165. akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
  166. akshare/stock_feature/stock_esg_sina.py +216 -11
  167. akshare/stock_feature/stock_fhps_em.py +60 -25
  168. akshare/stock_feature/stock_fhps_ths.py +25 -6
  169. akshare/stock_feature/stock_fund_flow.py +38 -25
  170. akshare/stock_feature/stock_gdfx_em.py +180 -95
  171. akshare/stock_feature/stock_gdhs.py +73 -49
  172. akshare/stock_feature/stock_gpzy_em.py +78 -46
  173. akshare/stock_feature/stock_hist_em.py +164 -111
  174. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  175. akshare/stock_feature/stock_hsgt_em.py +184 -452
  176. akshare/stock_feature/stock_info.py +52 -29
  177. akshare/stock_feature/stock_inner_trade_xq.py +39 -31
  178. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  179. akshare/stock_feature/stock_jgdy_em.py +41 -38
  180. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  181. akshare/stock_feature/stock_lhb_em.py +135 -71
  182. akshare/stock_feature/stock_lhb_sina.py +93 -46
  183. akshare/stock_feature/stock_margin_em.py +102 -0
  184. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
  185. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
  186. akshare/stock_feature/stock_market_legu.py +13 -8
  187. akshare/stock_feature/stock_pankou_em.py +72 -34
  188. akshare/stock_feature/stock_report_em.py +244 -54
  189. akshare/stock_feature/stock_research_report_em.py +48 -19
  190. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  191. akshare/stock_feature/stock_sy_em.py +86 -33
  192. akshare/stock_feature/stock_technology_ths.py +152 -120
  193. akshare/stock_feature/stock_tfp_em.py +35 -13
  194. akshare/stock_feature/stock_three_report_em.py +119 -77
  195. akshare/stock_feature/stock_ttm_lyr.py +4 -7
  196. akshare/stock_feature/stock_value_em.py +83 -0
  197. akshare/stock_feature/stock_wencai.py +21 -9
  198. akshare/stock_feature/stock_yjyg_em.py +63 -28
  199. akshare/stock_feature/stock_zf_pg.py +61 -38
  200. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  201. akshare/stock_feature/stock_ztb_em.py +62 -40
  202. akshare/stock_fundamental/stock_finance.py +150 -58
  203. akshare/stock_fundamental/stock_finance_ths.py +116 -31
  204. akshare/stock_fundamental/stock_mda_ym.py +5 -3
  205. akshare/stock_fundamental/stock_notice.py +29 -15
  206. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  207. akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
  208. akshare/stock_fundamental/stock_register_em.py +448 -0
  209. akshare/stock_fundamental/stock_restricted_em.py +79 -32
  210. akshare/stock_fundamental/stock_zygc.py +10 -8
  211. akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
  212. akshare/tool/trade_date_hist.py +4 -3
  213. akshare/utils/cons.py +10 -0
  214. akshare/utils/context.py +43 -0
  215. akshare/utils/demjson.py +2 -2
  216. akshare/utils/func.py +26 -0
  217. akshare/utils/tqdm.py +13 -3
  218. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/METADATA +52 -69
  219. akshare-1.15.72.dist-info/RECORD +385 -0
  220. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/WHEEL +1 -1
  221. tests/test_func.py +3 -5
  222. akshare/bond/bond_futures.py +0 -50
  223. akshare/bond/bond_investing.py +0 -139
  224. akshare/crypto/crypto_hist_investing.py +0 -249
  225. akshare/fortune/fortune_it_juzi.py +0 -123
  226. akshare/futures/futures_international.py +0 -170
  227. akshare/futures/futures_news_baidu.py +0 -54
  228. akshare/futures/inventory_data.py +0 -100
  229. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  230. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  231. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  232. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  233. akshare/index/index_fear_greed_funddb.py +0 -71
  234. akshare/index/index_investing.py +0 -232
  235. akshare/sport/sport_olympic_winter.py +0 -39
  236. akshare/stock_feature/stock_board_concept_ths.py +0 -422
  237. akshare/stock_fundamental/stock_register.py +0 -292
  238. akshare-1.12.95.dist-info/RECORD +0 -374
  239. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/LICENSE +0 -0
  240. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/top_level.txt +0 -0
akshare/index/index_cx.py CHANGED
@@ -1,10 +1,11 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2022/2/7 17:54
4
+ Date: 2024/6/4 18:30
5
5
  Desc: 财新数据-指数报告-数字经济指数
6
- https://s.ccxe.com.cn/indices/dei
6
+ https://yun.ccxe.com.cn/indices/dei
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -12,11 +13,11 @@ import requests
12
13
  def index_pmi_com_cx() -> pd.DataFrame():
13
14
  """
14
15
  财新数据-指数报告-财新中国 PMI-综合 PMI
15
- https://s.ccxe.com.cn/indices/pmi
16
+ https://yun.ccxe.com.cn/indices/pmi
16
17
  :return: 财新中国 PMI-综合 PMI
17
18
  :rtype: pandas.DataFrame
18
19
  """
19
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
20
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
20
21
  params = {"type": "com"}
21
22
  r = requests.get(url, params=params)
22
23
  data_json = r.json()
@@ -29,18 +30,22 @@ def index_pmi_com_cx() -> pd.DataFrame():
29
30
  "变化值",
30
31
  ]
31
32
  ]
32
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
33
+ temp_df["日期"] = (
34
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
35
+ .dt.tz_convert("Asia/Shanghai")
36
+ .dt.date
37
+ )
33
38
  return temp_df
34
39
 
35
40
 
36
41
  def index_pmi_man_cx() -> pd.DataFrame():
37
42
  """
38
43
  财新数据-指数报告-财新中国 PMI-制造业 PMI
39
- https://s.ccxe.com.cn/indices/pmi
44
+ https://yun.ccxe.com.cn/indices/pmi
40
45
  :return: 财新中国 PMI-制造业 PMI
41
46
  :rtype: pandas.DataFrame
42
47
  """
43
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
48
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
44
49
  params = {"type": "man"}
45
50
  r = requests.get(url, params=params)
46
51
  data_json = r.json()
@@ -53,18 +58,22 @@ def index_pmi_man_cx() -> pd.DataFrame():
53
58
  "变化值",
54
59
  ]
55
60
  ]
56
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
61
+ temp_df["日期"] = (
62
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
63
+ .dt.tz_convert("Asia/Shanghai")
64
+ .dt.date
65
+ )
57
66
  return temp_df
58
67
 
59
68
 
60
69
  def index_pmi_ser_cx() -> pd.DataFrame():
61
70
  """
62
71
  财新数据-指数报告-财新中国 PMI-服务业 PMI
63
- https://s.ccxe.com.cn/indices/pmi
72
+ https://yun.ccxe.com.cn/indices/pmi
64
73
  :return: 财新中国 PMI-服务业 PMI
65
74
  :rtype: pandas.DataFrame
66
75
  """
67
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
76
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
68
77
  params = {"type": "ser"}
69
78
  r = requests.get(url, params=params)
70
79
  data_json = r.json()
@@ -77,18 +86,22 @@ def index_pmi_ser_cx() -> pd.DataFrame():
77
86
  "变化值",
78
87
  ]
79
88
  ]
80
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
89
+ temp_df["日期"] = (
90
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
91
+ .dt.tz_convert("Asia/Shanghai")
92
+ .dt.date
93
+ )
81
94
  return temp_df
82
95
 
83
96
 
84
97
  def index_dei_cx() -> pd.DataFrame():
85
98
  """
86
99
  财新数据-指数报告-数字经济指数
87
- https://s.ccxe.com.cn/indices/dei
100
+ https://yun.ccxe.com.cn/indices/dei
88
101
  :return: 数字经济指数
89
102
  :rtype: pandas.DataFrame
90
103
  """
91
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
104
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
92
105
  params = {"type": "dei"}
93
106
  r = requests.get(url, params=params)
94
107
  data_json = r.json()
@@ -101,18 +114,22 @@ def index_dei_cx() -> pd.DataFrame():
101
114
  "变化值",
102
115
  ]
103
116
  ]
104
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
117
+ temp_df["日期"] = (
118
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
119
+ .dt.tz_convert("Asia/Shanghai")
120
+ .dt.date
121
+ )
105
122
  return temp_df
106
123
 
107
124
 
108
125
  def index_ii_cx() -> pd.DataFrame():
109
126
  """
110
127
  财新数据-指数报告-产业指数
111
- https://s.ccxe.com.cn/indices/dei
128
+ https://yun.ccxe.com.cn/indices/dei
112
129
  :return: 产业指数
113
130
  :rtype: pandas.DataFrame
114
131
  """
115
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
132
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
116
133
  params = {"type": "ii"}
117
134
  r = requests.get(url, params=params)
118
135
  data_json = r.json()
@@ -125,18 +142,22 @@ def index_ii_cx() -> pd.DataFrame():
125
142
  "变化值",
126
143
  ]
127
144
  ]
128
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
145
+ temp_df["日期"] = (
146
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
147
+ .dt.tz_convert("Asia/Shanghai")
148
+ .dt.date
149
+ )
129
150
  return temp_df
130
151
 
131
152
 
132
153
  def index_si_cx() -> pd.DataFrame():
133
154
  """
134
155
  财新数据-指数报告-溢出指数
135
- https://s.ccxe.com.cn/indices/dei
156
+ https://yun.ccxe.com.cn/indices/dei
136
157
  :return: 溢出指数
137
158
  :rtype: pandas.DataFrame
138
159
  """
139
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
160
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
140
161
  params = {"type": "si"}
141
162
  r = requests.get(url, params=params)
142
163
  data_json = r.json()
@@ -149,18 +170,22 @@ def index_si_cx() -> pd.DataFrame():
149
170
  "变化值",
150
171
  ]
151
172
  ]
152
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
173
+ temp_df["日期"] = (
174
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
175
+ .dt.tz_convert("Asia/Shanghai")
176
+ .dt.date
177
+ )
153
178
  return temp_df
154
179
 
155
180
 
156
181
  def index_fi_cx() -> pd.DataFrame():
157
182
  """
158
183
  财新数据-指数报告-融合指数
159
- https://s.ccxe.com.cn/indices/dei
184
+ https://yun.ccxe.com.cn/indices/dei
160
185
  :return: 融合指数
161
186
  :rtype: pandas.DataFrame
162
187
  """
163
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
188
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
164
189
  params = {"type": "fi"}
165
190
  r = requests.get(url, params=params)
166
191
  data_json = r.json()
@@ -173,18 +198,22 @@ def index_fi_cx() -> pd.DataFrame():
173
198
  "变化值",
174
199
  ]
175
200
  ]
176
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
201
+ temp_df["日期"] = (
202
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
203
+ .dt.tz_convert("Asia/Shanghai")
204
+ .dt.date
205
+ )
177
206
  return temp_df
178
207
 
179
208
 
180
209
  def index_bi_cx() -> pd.DataFrame():
181
210
  """
182
211
  财新数据-指数报告-基础指数
183
- https://s.ccxe.com.cn/indices/dei
212
+ https://yun.ccxe.com.cn/indices/dei
184
213
  :return: 基础指数
185
214
  :rtype: pandas.DataFrame
186
215
  """
187
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
216
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
188
217
  params = {"type": "bi"}
189
218
  r = requests.get(url, params=params)
190
219
  data_json = r.json()
@@ -197,18 +226,22 @@ def index_bi_cx() -> pd.DataFrame():
197
226
  "变化值",
198
227
  ]
199
228
  ]
200
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
229
+ temp_df["日期"] = (
230
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
231
+ .dt.tz_convert("Asia/Shanghai")
232
+ .dt.date
233
+ )
201
234
  return temp_df
202
235
 
203
236
 
204
237
  def index_nei_cx() -> pd.DataFrame():
205
238
  """
206
239
  财新数据-指数报告-中国新经济指数
207
- https://s.ccxe.com.cn/indices/nei
240
+ https://yun.ccxe.com.cn/indices/nei
208
241
  :return: 中国新经济指数
209
242
  :rtype: pandas.DataFrame
210
243
  """
211
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
244
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
212
245
  params = {"type": "nei"}
213
246
  r = requests.get(url, params=params)
214
247
  data_json = r.json()
@@ -221,18 +254,22 @@ def index_nei_cx() -> pd.DataFrame():
221
254
  "变化值",
222
255
  ]
223
256
  ]
224
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
257
+ temp_df["日期"] = (
258
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
259
+ .dt.tz_convert("Asia/Shanghai")
260
+ .dt.date
261
+ )
225
262
  return temp_df
226
263
 
227
264
 
228
265
  def index_li_cx() -> pd.DataFrame():
229
266
  """
230
267
  财新数据-指数报告-劳动力投入指数
231
- https://s.ccxe.com.cn/indices/nei
268
+ https://yun.ccxe.com.cn/indices/nei
232
269
  :return: 劳动力投入指数
233
270
  :rtype: pandas.DataFrame
234
271
  """
235
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
272
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
236
273
  params = {"type": "li"}
237
274
  r = requests.get(url, params=params)
238
275
  data_json = r.json()
@@ -245,18 +282,22 @@ def index_li_cx() -> pd.DataFrame():
245
282
  "变化值",
246
283
  ]
247
284
  ]
248
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
285
+ temp_df["日期"] = (
286
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
287
+ .dt.tz_convert("Asia/Shanghai")
288
+ .dt.date
289
+ )
249
290
  return temp_df
250
291
 
251
292
 
252
293
  def index_ci_cx() -> pd.DataFrame():
253
294
  """
254
295
  财新数据-指数报告-资本投入指数
255
- https://s.ccxe.com.cn/indices/nei
296
+ https://yun.ccxe.com.cn/indices/nei
256
297
  :return: 资本投入指数
257
298
  :rtype: pandas.DataFrame
258
299
  """
259
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
300
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
260
301
  params = {"type": "ci"}
261
302
  r = requests.get(url, params=params)
262
303
  data_json = r.json()
@@ -269,18 +310,22 @@ def index_ci_cx() -> pd.DataFrame():
269
310
  "变化值",
270
311
  ]
271
312
  ]
272
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
313
+ temp_df["日期"] = (
314
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
315
+ .dt.tz_convert("Asia/Shanghai")
316
+ .dt.date
317
+ )
273
318
  return temp_df
274
319
 
275
320
 
276
321
  def index_ti_cx() -> pd.DataFrame():
277
322
  """
278
323
  财新数据-指数报告-科技投入指数
279
- https://s.ccxe.com.cn/indices/nei
324
+ https://yun.ccxe.com.cn/indices/nei
280
325
  :return: 科技投入指数
281
326
  :rtype: pandas.DataFrame
282
327
  """
283
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
328
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
284
329
  params = {"type": "ti"}
285
330
  r = requests.get(url, params=params)
286
331
  data_json = r.json()
@@ -293,18 +338,22 @@ def index_ti_cx() -> pd.DataFrame():
293
338
  "变化值",
294
339
  ]
295
340
  ]
296
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
341
+ temp_df["日期"] = (
342
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
343
+ .dt.tz_convert("Asia/Shanghai")
344
+ .dt.date
345
+ )
297
346
  return temp_df
298
347
 
299
348
 
300
349
  def index_neaw_cx() -> pd.DataFrame():
301
350
  """
302
351
  财新数据-指数报告-新经济行业入职平均工资水平
303
- https://s.ccxe.com.cn/indices/nei
352
+ https://yun.ccxe.com.cn/indices/nei
304
353
  :return: 新经济行业入职平均工资水平
305
354
  :rtype: pandas.DataFrame
306
355
  """
307
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
356
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
308
357
  params = {"type": "neaw"}
309
358
  r = requests.get(url, params=params)
310
359
  data_json = r.json()
@@ -317,18 +366,22 @@ def index_neaw_cx() -> pd.DataFrame():
317
366
  "变化值",
318
367
  ]
319
368
  ]
320
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
369
+ temp_df["日期"] = (
370
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
371
+ .dt.tz_convert("Asia/Shanghai")
372
+ .dt.date
373
+ )
321
374
  return temp_df
322
375
 
323
376
 
324
377
  def index_awpr_cx() -> pd.DataFrame():
325
378
  """
326
379
  财新数据-指数报告-新经济入职工资溢价水平
327
- https://s.ccxe.com.cn/indices/nei
380
+ https://yun.ccxe.com.cn/indices/nei
328
381
  :return: 新经济入职工资溢价水平
329
382
  :rtype: pandas.DataFrame
330
383
  """
331
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
384
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
332
385
  params = {"type": "awpr"}
333
386
  r = requests.get(url, params=params)
334
387
  data_json = r.json()
@@ -341,18 +394,22 @@ def index_awpr_cx() -> pd.DataFrame():
341
394
  "变化值",
342
395
  ]
343
396
  ]
344
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
397
+ temp_df["日期"] = (
398
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
399
+ .dt.tz_convert("Asia/Shanghai")
400
+ .dt.date
401
+ )
345
402
  return temp_df
346
403
 
347
404
 
348
405
  def index_cci_cx() -> pd.DataFrame():
349
406
  """
350
407
  财新数据-指数报告-大宗商品指数
351
- https://s.ccxe.com.cn/indices/cci
408
+ https://yun.ccxe.com.cn/indices/nei
352
409
  :return: 大宗商品指数
353
410
  :rtype: pandas.DataFrame
354
411
  """
355
- url = "https://s.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
412
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
356
413
  params = {
357
414
  "type": "cci",
358
415
  "code": "1000050",
@@ -369,7 +426,139 @@ def index_cci_cx() -> pd.DataFrame():
369
426
  "变化值",
370
427
  ]
371
428
  ]
372
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], unit="ms").dt.date
429
+ temp_df["日期"] = (
430
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
431
+ .dt.tz_convert("Asia/Shanghai")
432
+ .dt.date
433
+ )
434
+ return temp_df
435
+
436
+
437
+ def index_qli_cx() -> pd.DataFrame():
438
+ """
439
+ 财新数据-指数报告-高质量因子
440
+ https://yun.ccxe.com.cn/indices/qli
441
+ :return: 高质量因子
442
+ :rtype: pandas.DataFrame
443
+ """
444
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
445
+ params = {
446
+ "type": "qli",
447
+ "code": "1000050",
448
+ "month": "-1",
449
+ }
450
+ r = requests.get(url, params=params)
451
+ data_json = r.json()
452
+ temp_df = pd.DataFrame(data_json["data"])
453
+ temp_df.columns = ["变化幅度", "高质量因子指数", "日期"]
454
+ temp_df = temp_df[
455
+ [
456
+ "日期",
457
+ "高质量因子指数",
458
+ "变化幅度",
459
+ ]
460
+ ]
461
+ temp_df["日期"] = (
462
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
463
+ .dt.tz_convert("Asia/Shanghai")
464
+ .dt.date
465
+ )
466
+ return temp_df
467
+
468
+
469
+ def index_ai_cx() -> pd.DataFrame():
470
+ """
471
+ 财新数据-指数报告-AI策略指数
472
+ https://yun.ccxe.com.cn/indices/ai
473
+ :return: AI策略指数
474
+ :rtype: pandas.DataFrame
475
+ """
476
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
477
+ params = {
478
+ "type": "ai",
479
+ "code": "1000050",
480
+ "month": "-1",
481
+ }
482
+ r = requests.get(url, params=params)
483
+ data_json = r.json()
484
+ temp_df = pd.DataFrame(data_json["data"])
485
+ temp_df.columns = ["变化幅度", "AI策略指数", "日期"]
486
+ temp_df = temp_df[
487
+ [
488
+ "日期",
489
+ "AI策略指数",
490
+ "变化幅度",
491
+ ]
492
+ ]
493
+ temp_df["日期"] = (
494
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
495
+ .dt.tz_convert("Asia/Shanghai")
496
+ .dt.date
497
+ )
498
+ return temp_df
499
+
500
+
501
+ def index_bei_cx() -> pd.DataFrame():
502
+ """
503
+ 财新数据-指数报告-基石经济指数
504
+ https://yun.ccxe.com.cn/indices/bei
505
+ :return: 基石经济指数
506
+ :rtype: pandas.DataFrame
507
+ """
508
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
509
+ params = {
510
+ "type": "ind",
511
+ "code": "930927",
512
+ "month": "-1",
513
+ }
514
+ r = requests.get(url, params=params)
515
+ data_json = r.json()
516
+ temp_df = pd.DataFrame(data_json["data"])
517
+ temp_df.columns = ["变化幅度", "基石经济指数", "日期"]
518
+ temp_df = temp_df[
519
+ [
520
+ "日期",
521
+ "基石经济指数",
522
+ "变化幅度",
523
+ ]
524
+ ]
525
+ temp_df["日期"] = (
526
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
527
+ .dt.tz_convert("Asia/Shanghai")
528
+ .dt.date
529
+ )
530
+ return temp_df
531
+
532
+
533
+ def index_neei_cx() -> pd.DataFrame():
534
+ """
535
+ 财新数据-指数报告-新动能指数
536
+ https://yun.ccxe.com.cn/indices/neei
537
+ :return: 新动能指数
538
+ :rtype: pandas.DataFrame
539
+ """
540
+ url = "https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo"
541
+ params = {
542
+ "type": "ind",
543
+ "code": "930928",
544
+ "month": "1",
545
+ }
546
+ r = requests.get(url, params=params)
547
+ data_json = r.json()
548
+ temp_df = pd.DataFrame(data_json["data"])
549
+ temp_df.columns = ["变化幅度", "新动能指数", "日期"]
550
+ temp_df = temp_df[
551
+ [
552
+ "日期",
553
+ "新动能指数",
554
+ "变化幅度",
555
+ ]
556
+ ]
557
+ temp_df["日期"] = (
558
+ pd.to_datetime(temp_df["日期"], unit="ms", utc=True)
559
+ .dt.tz_convert("Asia/Shanghai")
560
+ .dt.date
561
+ )
373
562
  return temp_df
374
563
 
375
564
 
@@ -418,3 +607,15 @@ if __name__ == "__main__":
418
607
 
419
608
  index_cci_cx_df = index_cci_cx()
420
609
  print(index_cci_cx_df)
610
+
611
+ index_qli_cx_df = index_qli_cx()
612
+ print(index_qli_cx_df)
613
+
614
+ index_ai_cx_df = index_ai_cx()
615
+ print(index_ai_cx_df)
616
+
617
+ index_bei_cx_df = index_bei_cx()
618
+ print(index_bei_cx_df)
619
+
620
+ index_neei_cx_df = index_neei_cx()
621
+ print(index_neei_cx_df)
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/9/30 15:30
4
+ Date: 2024/9/26 18:00
5
5
  Desc: Drewry 集装箱指数
6
6
  https://www.drewry.co.uk/supply-chain-advisors/supply-chain-expertise/world-container-index-assessed-by-drewry
7
7
  https://infogram.com/world-container-index-1h17493095xl4zj
8
8
  """
9
+
9
10
  import pandas as pd
10
11
  import requests
11
12
  from bs4 import BeautifulSoup
@@ -17,7 +18,8 @@ def drewry_wci_index(symbol: str = "composite") -> pd.DataFrame:
17
18
  """
18
19
  Drewry 集装箱指数
19
20
  https://infogram.com/world-container-index-1h17493095xl4zj
20
- :param symbol: choice of {"composite", "shanghai-rotterdam", "rotterdam-shanghai", "shanghai-los angeles", "los angeles-shanghai", "shanghai-genoa", "new york-rotterdam", "rotterdam-new york"}
21
+ :param symbol: choice of {"composite", "shanghai-rotterdam", "rotterdam-shanghai", "shanghai-los angeles",
22
+ "los angeles-shanghai", "shanghai-genoa", "new york-rotterdam", "rotterdam-new york"}
21
23
  :type symbol: str
22
24
  :return: Drewry 集装箱指数
23
25
  :rtype: pandas.DataFrame
@@ -34,24 +36,23 @@ def drewry_wci_index(symbol: str = "composite") -> pd.DataFrame:
34
36
  }
35
37
  url = "https://infogram.com/world-container-index-1h17493095xl4zj"
36
38
  r = requests.get(url)
37
- soup = BeautifulSoup(r.text, "lxml")
39
+ soup = BeautifulSoup(r.text, features="lxml")
38
40
  data_text = soup.find_all("script")[-4].string.strip("window.infographicData=")[:-1]
39
41
  data_json = demjson.decode(data_text)
40
- temp_df = pd.DataFrame(data_json["elements"][2]["data"][symbol_map[symbol]])
41
- temp_df = temp_df.iloc[1:, :]
42
+ data_json_need = data_json["elements"]["content"]["content"]["entities"][
43
+ "7a55585f-3fb3-44e6-9b54-beea1cd20b4d"
44
+ ]["data"][symbol_map[symbol]]
45
+ date_list = [item[0]["value"] for item in data_json_need[1:]]
46
+ try:
47
+ value_list = [item[1]["value"] for item in data_json_need[1:]]
48
+ except TypeError:
49
+ value_list = [item[1]["value"] for item in data_json_need[1:-1]]
50
+ temp_df = pd.DataFrame([date_list, value_list]).T
42
51
  temp_df.columns = ["date", "wci"]
43
- temp_df["date"] = [item["value"] for item in temp_df["date"]]
44
- temp_df["wci"] = [item["value"] for item in temp_df["wci"]]
45
- day = temp_df["date"].str.split("-", expand=True).iloc[:, 0].str.strip()
46
- month = temp_df["date"].str.split("-", expand=True).iloc[:, 1].str.strip()
47
- month = month.str.replace("July", "Jul")
48
- year = temp_df["date"].str.split("-", expand=True).iloc[:, 2].str.strip()
49
- temp_df["date"] = day + "-" + month + "-" + year
50
- # 修正数据源中日期格式的错误
51
- temp_df["date"] = temp_df["date"].str.replace("Sept", "Sep")
52
- temp_df["date"] = pd.to_datetime(temp_df["date"], format="%d-%b-%y").dt.date
52
+ temp_df["date"] = pd.to_datetime(
53
+ temp_df["date"], format="%d-%b-%y", errors="coerce"
54
+ ).dt.date
53
55
  temp_df["wci"] = pd.to_numeric(temp_df["wci"], errors="coerce")
54
- temp_df.reset_index(inplace=True, drop=True)
55
56
  return temp_df
56
57
 
57
58
 
@@ -1,49 +1,50 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2022/12/9 11:16
4
+ Date: 2024/3/21 11:16
5
5
  Desc: 行情宝
6
- http://hqb.nxin.com/pigindex/index.shtml
6
+ https://hqb.nxin.com/pigindex/index.shtml
7
7
  """
8
- import requests
8
+
9
9
  import pandas as pd
10
+ import requests
10
11
 
11
12
 
12
13
  def index_hog_spot_price() -> pd.DataFrame:
13
14
  """
14
15
  行情宝-生猪市场价格指数
15
- http://hqb.nxin.com/pigindex/index.shtml
16
+ https://hqb.nxin.com/pigindex/index.shtml
16
17
  :return: 生猪市场价格指数
17
18
  :rtype: pandas.DataFrame
18
19
  """
19
- url = "http://hqb.nxin.com/pigindex/getPigIndexChart.shtml"
20
- params = {
21
- 'regionId': '0'
22
- }
20
+ url = "https://hqb.nxin.com/pigindex/getPigIndexChart.shtml"
21
+ params = {"regionId": "0"}
23
22
  r = requests.get(url, params=params)
24
23
  data_json = r.json()
25
- temp_df = pd.DataFrame(data_json['data'])
24
+ temp_df = pd.DataFrame(data_json["data"])
26
25
  temp_df.columns = [
27
- '日期',
28
- '指数',
29
- '4个月均线',
30
- '6个月均线',
31
- '12个月均线',
32
- '预售均价',
33
- '成交均价',
34
- '成交均重',
26
+ "日期",
27
+ "指数",
28
+ "4个月均线",
29
+ "6个月均线",
30
+ "12个月均线",
31
+ "预售均价",
32
+ "成交均价",
33
+ "成交均重",
35
34
  ]
36
- temp_df['日期'] = (pd.to_datetime(temp_df['日期'], unit="ms") + pd.Timedelta(hours=8)).dt.date
37
- temp_df['指数'] = pd.to_numeric(temp_df['指数'], errors="coerce")
38
- temp_df['4个月均线'] = pd.to_numeric(temp_df['4个月均线'], errors="coerce")
39
- temp_df['6个月均线'] = pd.to_numeric(temp_df['6个月均线'], errors="coerce")
40
- temp_df['12个月均线'] = pd.to_numeric(temp_df['12个月均线'], errors="coerce")
41
- temp_df['预售均价'] = pd.to_numeric(temp_df['预售均价'], errors="coerce")
42
- temp_df['成交均价'] = pd.to_numeric(temp_df['成交均价'], errors="coerce")
43
- temp_df['成交均重'] = pd.to_numeric(temp_df['成交均重'], errors="coerce")
35
+ temp_df["日期"] = (
36
+ pd.to_datetime(temp_df["日期"], unit="ms") + pd.Timedelta(hours=8)
37
+ ).dt.date
38
+ temp_df["指数"] = pd.to_numeric(temp_df["指数"], errors="coerce")
39
+ temp_df["4个月均线"] = pd.to_numeric(temp_df["4个月均线"], errors="coerce")
40
+ temp_df["6个月均线"] = pd.to_numeric(temp_df["6个月均线"], errors="coerce")
41
+ temp_df["12个月均线"] = pd.to_numeric(temp_df["12个月均线"], errors="coerce")
42
+ temp_df["预售均价"] = pd.to_numeric(temp_df["预售均价"], errors="coerce")
43
+ temp_df["成交均价"] = pd.to_numeric(temp_df["成交均价"], errors="coerce")
44
+ temp_df["成交均重"] = pd.to_numeric(temp_df["成交均重"], errors="coerce")
44
45
  return temp_df
45
46
 
46
47
 
47
- if __name__ == '__main__':
48
+ if __name__ == "__main__":
48
49
  index_hog_spot_price_df = index_hog_spot_price()
49
50
  print(index_hog_spot_price_df)