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
@@ -1,50 +1,80 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2021/12/6 15:21
4
+ Date: 2024/4/3 16:21
5
5
  Desc: 中国-香港-宏观指标
6
6
  https://data.eastmoney.com/cjsj/foreign_8_0.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
11
- from akshare.utils import demjson
12
-
13
12
 
14
- def macro_china_hk_cpi() -> pd.DataFrame:
13
+ def macro_china_hk_core(symbol: str = "EMG00341602") -> pd.DataFrame:
15
14
  """
16
- 东方财富-经济数据一览-中国香港-消费者物价指数
17
- https://data.eastmoney.com/cjsj/foreign_8_0.html
18
- :return: 消费者物价指数
15
+ 东方财富-数据中心-经济数据一览-宏观经济-日本-核心代码
16
+ https://data.eastmoney.com/cjsj/foreign_1_0.html
17
+ :param symbol: 代码
18
+ :type symbol: str
19
+ :return: 指定 symbol 的数据
19
20
  :rtype: pandas.DataFrame
20
21
  """
21
- url = "https://datainterface.eastmoney.com/EM_DataCenter/JS.aspx"
22
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
22
23
  params = {
23
- "type": "GJZB",
24
- "sty": "HKZB",
25
- "js": "({data:[(x)],pages:(pc)})",
24
+ "reportName": "RPT_ECONOMICVALUE_HK",
25
+ "columns": "ALL",
26
+ "filter": f'(INDICATOR_ID="{symbol}")',
27
+ "pageNumber": "1",
28
+ "pageSize": "5000",
29
+ "sortColumns": "REPORT_DATE",
30
+ "sortTypes": "-1",
31
+ "source": "WEB",
32
+ "client": "WEB",
26
33
  "p": "1",
27
- "ps": "2000",
28
- "mkt": "8",
29
- "stat": "0",
30
34
  "pageNo": "1",
31
35
  "pageNum": "1",
32
- "_": "1621332091873",
36
+ "_": "1667639896816",
33
37
  }
34
38
  r = requests.get(url, params=params)
35
- data_text = r.text
36
- data_json = demjson.decode(data_text[1:-1])
37
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]])
38
- temp_df.columns = [
39
- "时间",
40
- "前值",
41
- "现值",
42
- "发布日期",
39
+ data_json = r.json()
40
+ temp_df = pd.DataFrame(data_json["result"]["data"])
41
+ temp_df.rename(
42
+ columns={
43
+ "COUNTRY": "-",
44
+ "INDICATOR_ID": "-",
45
+ "INDICATOR_NAME": "-",
46
+ "REPORT_DATE_CH": "时间",
47
+ "REPORT_DATE": "-",
48
+ "PUBLISH_DATE": "发布日期",
49
+ "VALUE": "现值",
50
+ "PRE_VALUE": "前值",
51
+ "INDICATOR_IDOLD": "-",
52
+ },
53
+ inplace=True,
54
+ )
55
+ temp_df = temp_df[
56
+ [
57
+ "时间",
58
+ "前值",
59
+ "现值",
60
+ "发布日期",
61
+ ]
43
62
  ]
44
- temp_df['前值'] = pd.to_numeric(temp_df['前值'])
45
- temp_df['现值'] = pd.to_numeric(temp_df['现值'])
46
- temp_df['时间'] = pd.to_datetime(temp_df['时间']).dt.date
47
- temp_df['发布日期'] = pd.to_datetime(temp_df['发布日期']).dt.date
63
+ temp_df["前值"] = pd.to_numeric(temp_df["前值"], errors="coerce")
64
+ temp_df["现值"] = pd.to_numeric(temp_df["现值"], errors="coerce")
65
+ temp_df["发布日期"] = pd.to_datetime(temp_df["发布日期"], errors="coerce").dt.date
66
+ temp_df.sort_values(["发布日期"], inplace=True, ignore_index=True)
67
+ return temp_df
68
+
69
+
70
+ def macro_china_hk_cpi() -> pd.DataFrame:
71
+ """
72
+ 东方财富-经济数据一览-中国香港-消费者物价指数
73
+ https://data.eastmoney.com/cjsj/foreign_8_0.html
74
+ :return: 消费者物价指数
75
+ :rtype: pandas.DataFrame
76
+ """
77
+ temp_df = macro_china_hk_core(symbol="EMG01336996")
48
78
  return temp_df
49
79
 
50
80
 
@@ -55,33 +85,7 @@ def macro_china_hk_cpi_ratio() -> pd.DataFrame:
55
85
  :return: 消费者物价指数年率
56
86
  :rtype: pandas.DataFrame
57
87
  """
58
- url = "https://datainterface.eastmoney.com/EM_DataCenter/JS.aspx"
59
- params = {
60
- "type": "GJZB",
61
- "sty": "HKZB",
62
- "js": "({data:[(x)],pages:(pc)})",
63
- "p": "1",
64
- "ps": "2000",
65
- "mkt": "8",
66
- "stat": "1",
67
- "pageNo": "1",
68
- "pageNum": "1",
69
- "_": "1621332091873",
70
- }
71
- r = requests.get(url, params=params)
72
- data_text = r.text
73
- data_json = demjson.decode(data_text[1:-1])
74
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]])
75
- temp_df.columns = [
76
- "时间",
77
- "前值",
78
- "现值",
79
- "发布日期",
80
- ]
81
- temp_df['前值'] = pd.to_numeric(temp_df['前值'])
82
- temp_df['现值'] = pd.to_numeric(temp_df['现值'])
83
- temp_df['时间'] = pd.to_datetime(temp_df['时间']).dt.date
84
- temp_df['发布日期'] = pd.to_datetime(temp_df['发布日期']).dt.date
88
+ temp_df = macro_china_hk_core(symbol="EMG00059282")
85
89
  return temp_df
86
90
 
87
91
 
@@ -92,33 +96,7 @@ def macro_china_hk_rate_of_unemployment() -> pd.DataFrame:
92
96
  :return: 失业率
93
97
  :rtype: pandas.DataFrame
94
98
  """
95
- url = "https://datainterface.eastmoney.com/EM_DataCenter/JS.aspx"
96
- params = {
97
- "type": "GJZB",
98
- "sty": "HKZB",
99
- "js": "({data:[(x)],pages:(pc)})",
100
- "p": "1",
101
- "ps": "2000",
102
- "mkt": "8",
103
- "stat": "2",
104
- "pageNo": "1",
105
- "pageNum": "1",
106
- "_": "1621332091873",
107
- }
108
- r = requests.get(url, params=params)
109
- data_text = r.text
110
- data_json = demjson.decode(data_text[1:-1])
111
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]])
112
- temp_df.columns = [
113
- "时间",
114
- "前值",
115
- "现值",
116
- "发布日期",
117
- ]
118
- temp_df['前值'] = pd.to_numeric(temp_df['前值'])
119
- temp_df['现值'] = pd.to_numeric(temp_df['现值'])
120
- temp_df['时间'] = pd.to_datetime(temp_df['时间']).dt.date
121
- temp_df['发布日期'] = pd.to_datetime(temp_df['发布日期']).dt.date
99
+ temp_df = macro_china_hk_core(symbol="EMG00059647")
122
100
  return temp_df
123
101
 
124
102
 
@@ -129,33 +107,7 @@ def macro_china_hk_gbp() -> pd.DataFrame:
129
107
  :return: 香港 GDP
130
108
  :rtype: pandas.DataFrame
131
109
  """
132
- url = "https://datainterface.eastmoney.com/EM_DataCenter/JS.aspx"
133
- params = {
134
- "type": "GJZB",
135
- "sty": "HKZB",
136
- "js": "({data:[(x)],pages:(pc)})",
137
- "p": "1",
138
- "ps": "2000",
139
- "mkt": "8",
140
- "stat": "3",
141
- "pageNo": "1",
142
- "pageNum": "1",
143
- "_": "1621332091873",
144
- }
145
- r = requests.get(url, params=params)
146
- data_text = r.text
147
- data_json = demjson.decode(data_text[1:-1])
148
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]])
149
- temp_df.columns = [
150
- "时间",
151
- "前值",
152
- "现值",
153
- "发布日期",
154
- ]
155
- temp_df['前值'] = pd.to_numeric(temp_df['前值']) / 100
156
- temp_df['现值'] = pd.to_numeric(temp_df['现值']) / 100
157
- temp_df['时间'] = pd.to_datetime(temp_df['时间']).dt.date
158
- temp_df['发布日期'] = pd.to_datetime(temp_df['发布日期']).dt.date
110
+ temp_df = macro_china_hk_core(symbol="EMG01337008")
159
111
  return temp_df
160
112
 
161
113
 
@@ -166,33 +118,7 @@ def macro_china_hk_gbp_ratio() -> pd.DataFrame:
166
118
  :return: 香港 GDP 同比
167
119
  :rtype: pandas.DataFrame
168
120
  """
169
- url = "https://datainterface.eastmoney.com/EM_DataCenter/JS.aspx"
170
- params = {
171
- "type": "GJZB",
172
- "sty": "HKZB",
173
- "js": "({data:[(x)],pages:(pc)})",
174
- "p": "1",
175
- "ps": "2000",
176
- "mkt": "8",
177
- "stat": "4",
178
- "pageNo": "1",
179
- "pageNum": "1",
180
- "_": "1621332091873",
181
- }
182
- r = requests.get(url, params=params)
183
- data_text = r.text
184
- data_json = demjson.decode(data_text[1:-1])
185
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]])
186
- temp_df.columns = [
187
- "时间",
188
- "前值",
189
- "现值",
190
- "发布日期",
191
- ]
192
- temp_df['前值'] = pd.to_numeric(temp_df['前值'])
193
- temp_df['现值'] = pd.to_numeric(temp_df['现值'])
194
- temp_df['时间'] = pd.to_datetime(temp_df['时间']).dt.date
195
- temp_df['发布日期'] = pd.to_datetime(temp_df['发布日期']).dt.date
121
+ temp_df = macro_china_hk_core(symbol="EMG01337009")
196
122
  return temp_df
197
123
 
198
124
 
@@ -203,33 +129,7 @@ def macro_china_hk_building_volume() -> pd.DataFrame:
203
129
  :return: 香港楼宇买卖合约数量
204
130
  :rtype: pandas.DataFrame
205
131
  """
206
- url = "https://datainterface.eastmoney.com/EM_DataCenter/JS.aspx"
207
- params = {
208
- "type": "GJZB",
209
- "sty": "HKZB",
210
- "js": "({data:[(x)],pages:(pc)})",
211
- "p": "1",
212
- "ps": "2000",
213
- "mkt": "8",
214
- "stat": "5",
215
- "pageNo": "1",
216
- "pageNum": "1",
217
- "_": "1621332091873",
218
- }
219
- r = requests.get(url, params=params)
220
- data_text = r.text
221
- data_json = demjson.decode(data_text[1:-1])
222
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]])
223
- temp_df.columns = [
224
- "时间",
225
- "前值",
226
- "现值",
227
- "发布日期",
228
- ]
229
- temp_df['前值'] = pd.to_numeric(temp_df['前值'])
230
- temp_df['现值'] = pd.to_numeric(temp_df['现值'])
231
- temp_df['时间'] = pd.to_datetime(temp_df['时间']).dt.date
232
- temp_df['发布日期'] = pd.to_datetime(temp_df['发布日期']).dt.date
132
+ temp_df = macro_china_hk_core(symbol="EMG00158055")
233
133
  return temp_df
234
134
 
235
135
 
@@ -240,33 +140,7 @@ def macro_china_hk_building_amount() -> pd.DataFrame:
240
140
  :return: 香港楼宇买卖合约成交金额
241
141
  :rtype: pandas.DataFrame
242
142
  """
243
- url = "https://datainterface.eastmoney.com/EM_DataCenter/JS.aspx"
244
- params = {
245
- "type": "GJZB",
246
- "sty": "HKZB",
247
- "js": "({data:[(x)],pages:(pc)})",
248
- "p": "1",
249
- "ps": "2000",
250
- "mkt": "8",
251
- "stat": "6",
252
- "pageNo": "1",
253
- "pageNum": "1",
254
- "_": "1621332091873",
255
- }
256
- r = requests.get(url, params=params)
257
- data_text = r.text
258
- data_json = demjson.decode(data_text[1:-1])
259
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]])
260
- temp_df.columns = [
261
- "时间",
262
- "前值",
263
- "现值",
264
- "发布日期",
265
- ]
266
- temp_df['前值'] = pd.to_numeric(temp_df['前值']) / 100
267
- temp_df['现值'] = pd.to_numeric(temp_df['现值']) / 100
268
- temp_df['时间'] = pd.to_datetime(temp_df['时间']).dt.date
269
- temp_df['发布日期'] = pd.to_datetime(temp_df['发布日期']).dt.date
143
+ temp_df = macro_china_hk_core(symbol="EMG00158066")
270
144
  return temp_df
271
145
 
272
146
 
@@ -277,33 +151,7 @@ def macro_china_hk_trade_diff_ratio() -> pd.DataFrame:
277
151
  :return: 香港商品贸易差额年率
278
152
  :rtype: pandas.DataFrame
279
153
  """
280
- url = "https://datainterface.eastmoney.com/EM_DataCenter/JS.aspx"
281
- params = {
282
- "type": "GJZB",
283
- "sty": "HKZB",
284
- "js": "({data:[(x)],pages:(pc)})",
285
- "p": "1",
286
- "ps": "2000",
287
- "mkt": "8",
288
- "stat": "7",
289
- "pageNo": "1",
290
- "pageNum": "1",
291
- "_": "1621332091873",
292
- }
293
- r = requests.get(url, params=params)
294
- data_text = r.text
295
- data_json = demjson.decode(data_text[1:-1])
296
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]])
297
- temp_df.columns = [
298
- "时间",
299
- "前值",
300
- "现值",
301
- "发布日期",
302
- ]
303
- temp_df['前值'] = pd.to_numeric(temp_df['前值'])
304
- temp_df['现值'] = pd.to_numeric(temp_df['现值'])
305
- temp_df['时间'] = pd.to_datetime(temp_df['时间']).dt.date
306
- temp_df['发布日期'] = pd.to_datetime(temp_df['发布日期']).dt.date
154
+ temp_df = macro_china_hk_core(symbol="EMG00157898")
307
155
  return temp_df
308
156
 
309
157
 
@@ -314,33 +162,7 @@ def macro_china_hk_ppi() -> pd.DataFrame:
314
162
  :return: 香港制造业 PPI 年率
315
163
  :rtype: pandas.DataFrame
316
164
  """
317
- url = "https://datainterface.eastmoney.com/EM_DataCenter/JS.aspx"
318
- params = {
319
- "type": "GJZB",
320
- "sty": "HKZB",
321
- "js": "({data:[(x)],pages:(pc)})",
322
- "p": "1",
323
- "ps": "2000",
324
- "mkt": "8",
325
- "stat": "8",
326
- "pageNo": "1",
327
- "pageNum": "1",
328
- "_": "1621332091873",
329
- }
330
- r = requests.get(url, params=params)
331
- data_text = r.text
332
- data_json = demjson.decode(data_text[1:-1])
333
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]])
334
- temp_df.columns = [
335
- "时间",
336
- "前值",
337
- "现值",
338
- "发布日期",
339
- ]
340
- temp_df['前值'] = pd.to_numeric(temp_df['前值'])
341
- temp_df['现值'] = pd.to_numeric(temp_df['现值'])
342
- temp_df['时间'] = pd.to_datetime(temp_df['时间']).dt.date
343
- temp_df['发布日期'] = pd.to_datetime(temp_df['发布日期']).dt.date
165
+ temp_df = macro_china_hk_core(symbol="EMG00157818")
344
166
  return temp_df
345
167
 
346
168
 
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/9/14 18:00
4
+ Date: 2024/6/30 22:00
5
5
  Desc: 中国-国家统计局-宏观数据
6
6
  https://data.stats.gov.cn/easyquery.htm
7
7
  """
8
+
8
9
  import time
9
10
  from functools import lru_cache
10
11
  from typing import Union, Literal, List, Dict
@@ -54,7 +55,8 @@ def _get_nbs_wds_tree(idcode: str, dbcode: str, rowcode: str) -> List[Dict]:
54
55
  "k1": str(time.time_ns())[:13],
55
56
  }
56
57
  r = requests.post(url, params=params, verify=False, allow_redirects=True)
57
- data_json = r.json()["returndata"][0]["nodes"]
58
+ data_json = r.json()
59
+ data_json = data_json["returndata"][0]["nodes"]
58
60
  return data_json
59
61
 
60
62
 
@@ -78,7 +80,7 @@ def macro_china_nbs_nation(
78
80
  ) -> pd.DataFrame:
79
81
  """
80
82
  国家统计局全国数据通用接口
81
- http://data.stats.gov.cn/easyquery.htm
83
+ https://data.stats.gov.cn/easyquery.htm
82
84
  :param kind: 数据类别
83
85
  :param path: 数据路径
84
86
  :param period: 时间区间,例如'LAST10', '2016-2023', '2016-'等
@@ -146,7 +148,13 @@ def macro_china_nbs_nation(
146
148
 
147
149
  def macro_china_nbs_region(
148
150
  kind: Literal[
149
- "分省月度数据", "分省季度数据", "分省年度数据", "主要城市月度价格", "主要城市年度数据", "港澳台月度数据", "港澳台年度数据"
151
+ "分省月度数据",
152
+ "分省季度数据",
153
+ "分省年度数据",
154
+ "主要城市月度价格",
155
+ "主要城市年度数据",
156
+ "港澳台月度数据",
157
+ "港澳台年度数据",
150
158
  ],
151
159
  path: str,
152
160
  indicator: Union[str, None],
@@ -261,16 +269,25 @@ def macro_china_nbs_region(
261
269
 
262
270
  if __name__ == "__main__":
263
271
  macro_china_nbs_nation_df = macro_china_nbs_nation(
264
- kind="月度数据", path="工业 > 工业企业主要经济指标", period="LAST13"
272
+ kind="月度数据",
273
+ path="工业 > 工业分大类行业出口交货值(2018-至今) > 废弃资源综合利用业",
274
+ period="LAST5",
265
275
  )
266
276
  print(macro_china_nbs_nation_df)
267
277
 
268
278
  macro_china_nbs_region_df = macro_china_nbs_region(
269
- "分省季度数据", "人民生活 > 居民人均可支配收入", period="2018-2022", indicator=None, region="北京市"
279
+ kind="分省季度数据",
280
+ path="人民生活 > 居民人均可支配收入",
281
+ period="2018-2022",
282
+ indicator=None,
283
+ region="北京市",
270
284
  )
271
285
  print(macro_china_nbs_region_df)
272
286
 
273
287
  macro_china_nbs_region_df = macro_china_nbs_region(
274
- "分省季度数据", "国民经济核算 > 地区生产总值", period="2018-", indicator="地区生产总值_累计值(亿元)"
288
+ kind="分省季度数据",
289
+ path="国民经济核算 > 地区生产总值",
290
+ period="2018-",
291
+ indicator="地区生产总值_累计值(亿元)",
275
292
  )
276
293
  print(macro_china_nbs_region_df)
@@ -1,16 +1,17 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2022/12/27 20:08
4
+ Date: 2024/4/3 16:08
5
5
  Desc: 金十数据-数据中心-主要机构-宏观经济
6
6
  https://datacenter.jin10.com/
7
7
  """
8
+
9
+ import datetime
8
10
  import time
9
11
 
10
12
  import pandas as pd
11
13
  import requests
12
14
  from tqdm import tqdm
13
- import datetime
14
15
 
15
16
 
16
17
  def macro_cons_gold() -> pd.DataFrame:
@@ -22,7 +23,8 @@ def macro_cons_gold() -> pd.DataFrame:
22
23
  """
23
24
  t = time.time()
24
25
  headers = {
25
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
26
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
27
+ "Chrome/107.0.0.0 Safari/537.36",
26
28
  "x-app-id": "rU6QIu7JHe2gOUeR",
27
29
  "x-csrf-token": "x-csrf-token",
28
30
  "x-version": "1.0.0",
@@ -41,7 +43,7 @@ def macro_cons_gold() -> pd.DataFrame:
41
43
  if not data_json["data"]["values"]:
42
44
  break
43
45
  temp_df = pd.DataFrame(data_json["data"]["values"])
44
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
46
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
45
47
  last_date_str = temp_df.iat[-1, 0]
46
48
  last_date_str = (
47
49
  (
@@ -68,7 +70,7 @@ def macro_cons_gold() -> pd.DataFrame:
68
70
  "总价值",
69
71
  ]
70
72
  ]
71
- big_df["日期"] = pd.to_datetime(big_df["日期"]).dt.date
73
+ big_df["日期"] = pd.to_datetime(big_df["日期"], errors="coerce").dt.date
72
74
  big_df["总库存"] = pd.to_numeric(big_df["总库存"], errors="coerce")
73
75
  big_df["增持/减持"] = pd.to_numeric(big_df["增持/减持"], errors="coerce")
74
76
  big_df["总价值"] = pd.to_numeric(big_df["总价值"], errors="coerce")
@@ -86,7 +88,8 @@ def macro_cons_silver() -> pd.DataFrame:
86
88
  """
87
89
  t = time.time()
88
90
  headers = {
89
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
91
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
92
+ "Chrome/107.0.0.0 Safari/537.36",
90
93
  "x-app-id": "rU6QIu7JHe2gOUeR",
91
94
  "x-csrf-token": "x-csrf-token",
92
95
  "x-version": "1.0.0",
@@ -105,7 +108,7 @@ def macro_cons_silver() -> pd.DataFrame:
105
108
  if not data_json["data"]["values"]:
106
109
  break
107
110
  temp_df = pd.DataFrame(data_json["data"]["values"])
108
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
111
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
109
112
  last_date_str = temp_df.iat[-1, 0]
110
113
  last_date_str = (
111
114
  (
@@ -132,7 +135,7 @@ def macro_cons_silver() -> pd.DataFrame:
132
135
  "总价值",
133
136
  ]
134
137
  ]
135
- big_df["日期"] = pd.to_datetime(big_df["日期"]).dt.date
138
+ big_df["日期"] = pd.to_datetime(big_df["日期"], errors="coerce").dt.date
136
139
  big_df["总库存"] = pd.to_numeric(big_df["总库存"], errors="coerce")
137
140
  big_df["增持/减持"] = pd.to_numeric(big_df["增持/减持"], errors="coerce")
138
141
  big_df["总价值"] = pd.to_numeric(big_df["总价值"], errors="coerce")
@@ -163,13 +166,14 @@ def macro_cons_opec_month() -> pd.DataFrame:
163
166
  "referer": "https://datacenter.jin10.com/reportType/dc_opec_report",
164
167
  "sec-fetch-mode": "cors",
165
168
  "sec-fetch-site": "same-site",
166
- "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36",
169
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
170
+ "Chrome/79.0.3945.117 Safari/537.36",
167
171
  "x-app-id": "rU6QIu7JHe2gOUeR",
168
172
  "x-csrf-token": "",
169
173
  "x-version": "1.0.0",
170
174
  }
171
175
  res = requests.get(
172
- f"https://datacenter-api.jin10.com/reports/dates?category=opec&_={str(int(round(t * 1000)))}",
176
+ url=f"https://datacenter-api.jin10.com/reports/dates?category=opec&_={str(int(round(t * 1000)))}",
173
177
  headers=headers,
174
178
  ) # 日期序列
175
179
  all_date_list = res.json()["data"]
@@ -177,7 +181,8 @@ def macro_cons_opec_month() -> pd.DataFrame:
177
181
  for item in bar:
178
182
  bar.set_description(f"Please wait for a moment, now downloading {item}'s data")
179
183
  res = requests.get(
180
- f"https://datacenter-api.jin10.com/reports/list?category=opec&date={item}&_={str(int(round(t * 1000)))}",
184
+ url=f"https://datacenter-api.jin10.com/reports/list?"
185
+ f"category=opec&date={item}&_={str(int(round(t * 1000)))}",
181
186
  headers=headers,
182
187
  )
183
188
  temp_df = pd.DataFrame(
@@ -203,7 +208,7 @@ def macro_cons_opec_month() -> pd.DataFrame:
203
208
  "欧佩克产量",
204
209
  ]
205
210
  ].iloc[-2, :]
206
- except:
211
+ except: # noqa: E722
207
212
  temp_df = temp_df[
208
213
  [
209
214
  "阿尔及利亚",
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2022/11/3 15:08
4
+ Date: 2024/4/3 17:08
5
5
  Desc: 金十数据中心-经济指标-欧元区
6
6
  金十数据中心-经济指标-欧元区-国民经济运行状况-经济状况
7
7
  金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平
@@ -10,6 +10,7 @@ Desc: 金十数据中心-经济指标-欧元区
10
10
  金十数据中心-经济指标-欧元区-产业指标
11
11
  金十数据中心-经济指标-欧元区-领先指标
12
12
  """
13
+
13
14
  import time
14
15
 
15
16
  import pandas as pd
@@ -799,7 +800,7 @@ def macro_euro_lme_holding() -> pd.DataFrame:
799
800
  t = time.time()
800
801
  params = {"_": str(int(round(t * 1000)))}
801
802
  r = requests.get(
802
- "https://cdn.jin10.com/data_center/reports/lme_position.json", params=params
803
+ url="https://cdn.jin10.com/data_center/reports/lme_position.json", params=params
803
804
  )
804
805
  json_data = r.json()
805
806
  temp_df = pd.DataFrame(json_data["values"]).T
@@ -809,8 +810,12 @@ def macro_euro_lme_holding() -> pd.DataFrame:
809
810
  for i in range(3):
810
811
  inner_temp_df = temp_df.loc[:, item].apply(lambda x: eval(str(x))[i])
811
812
  inner_temp_df.name = inner_temp_df.name + "-" + json_data["keys"][i]["name"]
812
- big_df = pd.concat([big_df, inner_temp_df], axis=1)
813
- big_df.sort_index(inplace=True)
813
+ big_df = pd.concat(objs=[big_df, inner_temp_df], axis=1)
814
+ big_df = big_df.astype("float")
815
+ big_df = big_df.iloc[:-1, :].copy()
816
+ big_df.reset_index(inplace=True)
817
+ big_df.rename(columns={"index": "日期"}, inplace=True)
818
+ big_df.sort_values(by=["日期"], ignore_index=True, inplace=True)
814
819
  return big_df
815
820
 
816
821
 
@@ -826,7 +831,7 @@ def macro_euro_lme_stock() -> pd.DataFrame:
826
831
  t = time.time()
827
832
  params = {"_": str(int(round(t * 1000)))}
828
833
  r = requests.get(
829
- "https://cdn.jin10.com/data_center/reports/lme_stock.json", params=params
834
+ url="https://cdn.jin10.com/data_center/reports/lme_stock.json", params=params
830
835
  )
831
836
  json_data = r.json()
832
837
  temp_df = pd.DataFrame(json_data["values"]).T
@@ -835,8 +840,10 @@ def macro_euro_lme_stock() -> pd.DataFrame:
835
840
  for i in range(3):
836
841
  inner_temp_df = temp_df.loc[:, item].apply(lambda x: eval(str(x))[i])
837
842
  inner_temp_df.name = inner_temp_df.name + "-" + json_data["keys"][i]["name"]
838
- big_df = pd.concat([big_df, inner_temp_df], axis=1)
843
+ big_df = pd.concat(objs=[big_df, inner_temp_df], axis=1)
839
844
  big_df.sort_index(inplace=True)
845
+ big_df.reset_index(inplace=True)
846
+ big_df.rename(columns={"index": "日期"}, inplace=True)
840
847
  return big_df
841
848
 
842
849