akshare 1.16.75__py3-none-any.whl → 1.16.77__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.
akshare/__init__.py CHANGED
@@ -3084,9 +3084,11 @@ amac_manager_cancelled_info # 中国证券投资基金业协会-信息公示-诚
3084
3084
  1.16.73 fix: fix stock_board_industry_hist_em interface
3085
3085
  1.16.74 fix: fix stock_individual_spot_xq interface
3086
3086
  1.16.75 fix: fix get_qhkc_index interface
3087
+ 1.16.76 fix: fix spot_quotations_sge interface
3088
+ 1.16.77 add: add stock_lhb_yyb_detail_em interface
3087
3089
  """
3088
3090
 
3089
- __version__ = "1.16.75"
3091
+ __version__ = "1.16.77"
3090
3092
  __author__ = "AKFamily"
3091
3093
 
3092
3094
  import sys
@@ -3732,6 +3734,7 @@ from akshare.stock_feature.stock_lhb_em import (
3732
3734
  stock_lhb_yybph_em,
3733
3735
  stock_lhb_jgstatistic_em,
3734
3736
  stock_lhb_traderstatistic_em,
3737
+ stock_lhb_yyb_detail_em,
3735
3738
  )
3736
3739
 
3737
3740
  """
akshare/spot/spot_sge.py CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2024/8/22 10:00
4
+ Date: 2025/4/11 22:00
5
5
  Desc: 上海黄金交易所-数据资讯-行情走势
6
6
  https://www.sge.com.cn/sjzx/mrhq
7
7
  上海黄金交易所-数据资讯-上海金基准价-历史数据
@@ -94,6 +94,15 @@ def spot_quotations_sge(symbol: str = "Au99.99") -> pd.DataFrame:
94
94
  }
95
95
  )
96
96
  temp_df["现价"] = pd.to_numeric(temp_df["现价"], errors="coerce")
97
+ # 将更新时间中的时间部分提取出来
98
+ update_time = temp_df["更新时间"].iloc[0].split()[1]
99
+ # 将时间列转换为时间格式以便排序
100
+ temp_df["时间"] = pd.to_datetime(temp_df["时间"], format="%H:%M").dt.time
101
+ # 过滤掉大于等于更新时间的数据
102
+ temp_df = temp_df[temp_df["时间"].astype(str) < update_time]
103
+ # 按时间排序
104
+ temp_df = temp_df.sort_values(by=["时间"])
105
+ temp_df.reset_index(inplace=True, drop=True)
97
106
  return temp_df
98
107
 
99
108
 
@@ -480,7 +480,7 @@ def stock_lhb_hyyyb_em(
480
480
  "卖出总金额",
481
481
  "总买卖净额",
482
482
  "-",
483
- "-",
483
+ "营业部代码",
484
484
  "买入股票",
485
485
  "-",
486
486
  "-",
@@ -496,6 +496,7 @@ def stock_lhb_hyyyb_em(
496
496
  "卖出总金额",
497
497
  "总买卖净额",
498
498
  "买入股票",
499
+ "营业部代码",
499
500
  ]
500
501
  ]
501
502
 
@@ -900,6 +901,119 @@ def stock_lhb_stock_detail_em(
900
901
  return temp_df
901
902
 
902
903
 
904
+ def stock_lhb_yyb_detail_em(symbol: str = "10188715") -> pd.DataFrame:
905
+ """
906
+ 东方财富网-数据中心-龙虎榜单-营业部历史交易明细-营业部交易明细
907
+ https://data.eastmoney.com/stock/lhb/yyb/10188715.html
908
+ :param symbol: 营业部代码, 如 "10188715", 通过 ak.stock_lhb_hyyyb_em() 接口获取
909
+ :type symbol: str
910
+ :return: 营业部交易明细数据
911
+ :rtype: pandas.DataFrame
912
+ """
913
+ url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
914
+ params = {
915
+ "sortColumns": "TRADE_DATE,SECURITY_CODE",
916
+ "sortTypes": "-1,1",
917
+ "pageSize": '100',
918
+ "pageNumber": "1",
919
+ "reportName": "RPT_OPERATEDEPT_TRADE_DETAILSNEW",
920
+ "columns": "ALL",
921
+ "source": "WEB",
922
+ "client": "WEB",
923
+ "filter": f'(OPERATEDEPT_CODE="{symbol}")',
924
+ }
925
+ r = requests.get(url, params=params)
926
+ data_json = r.json()
927
+ total_page = data_json["result"]["pages"]
928
+ big_df = pd.DataFrame()
929
+ tqdm = get_tqdm()
930
+ for page in tqdm(range(1, total_page + 1), leave=False):
931
+ params.update({"pageNumber": page})
932
+ r = requests.get(url, params=params)
933
+ data_json = r.json()
934
+ temp_df = pd.DataFrame(data_json["result"]["data"])
935
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
936
+
937
+ # 检查DataFrame是否为空
938
+ if big_df.empty:
939
+ return pd.DataFrame()
940
+
941
+ # 确保列名与实际返回的JSON数据结构一致
942
+ column_map = {
943
+ "OPERATEDEPT_CODE": "营业部代码",
944
+ "OPERATEDEPT_NAME": "营业部名称",
945
+ "TRADE_DATE": "交易日期",
946
+ "D1_CLOSE_ADJCHRATE": "1日后涨跌幅",
947
+ "D2_CLOSE_ADJCHRATE": "2日后涨跌幅",
948
+ "D3_CLOSE_ADJCHRATE": "3日后涨跌幅",
949
+ "D5_CLOSE_ADJCHRATE": "5日后涨跌幅",
950
+ "D10_CLOSE_ADJCHRATE": "10日后涨跌幅",
951
+ "SECURITY_CODE": "股票代码",
952
+ "SECURITY_NAME_ABBR": "股票名称",
953
+ "ACT_BUY": "买入金额",
954
+ "ACT_SELL": "卖出金额",
955
+ "NET_AMT": "净额",
956
+ "EXPLANATION": "上榜原因",
957
+ "D20_CLOSE_ADJCHRATE": "20日后涨跌幅",
958
+ "D30_CLOSE_ADJCHRATE": "30日后涨跌幅",
959
+ "SECUCODE": "证券代码",
960
+ "OPERATEDEPT_CODE_OLD": "营业部旧代码",
961
+ "ORG_NAME_ABBR": "营业部简称",
962
+ "CHANGE_RATE": "涨跌幅"
963
+ }
964
+
965
+ # 重命名列
966
+ big_df.rename(columns=column_map, inplace=True)
967
+
968
+ # 添加序号列
969
+ big_df.reset_index(inplace=True)
970
+ big_df["序号"] = big_df.index + 1
971
+
972
+ # 选择需要的列并排序
973
+ result_columns = [
974
+ "序号",
975
+ "营业部代码",
976
+ "营业部名称",
977
+ "营业部简称",
978
+ "交易日期",
979
+ "股票代码",
980
+ "股票名称",
981
+ "涨跌幅",
982
+ "买入金额",
983
+ "卖出金额",
984
+ "净额",
985
+ "上榜原因",
986
+ "1日后涨跌幅",
987
+ "2日后涨跌幅",
988
+ "3日后涨跌幅",
989
+ "5日后涨跌幅",
990
+ "10日后涨跌幅",
991
+ "20日后涨跌幅",
992
+ "30日后涨跌幅",
993
+ ]
994
+
995
+ # 确保所有列都存在
996
+ for col in result_columns:
997
+ if col not in big_df.columns and col != "序号":
998
+ big_df[col] = None
999
+
1000
+ big_df = big_df[result_columns]
1001
+
1002
+ # 处理日期格式
1003
+ big_df["交易日期"] = pd.to_datetime(big_df["交易日期"], errors="coerce").dt.date
1004
+
1005
+ # 处理数值列
1006
+ numeric_cols = [
1007
+ "涨跌幅", "买入金额", "卖出金额", "净额",
1008
+ "1日后涨跌幅", "2日后涨跌幅", "3日后涨跌幅",
1009
+ "5日后涨跌幅", "10日后涨跌幅", "20日后涨跌幅", "30日后涨跌幅"
1010
+ ]
1011
+ for col in numeric_cols:
1012
+ big_df[col] = pd.to_numeric(big_df[col], errors="coerce")
1013
+
1014
+ return big_df
1015
+
1016
+
903
1017
  if __name__ == "__main__":
904
1018
  stock_lhb_detail_em_df = stock_lhb_detail_em(
905
1019
  start_date="20250201", end_date="20250228"
@@ -949,3 +1063,6 @@ if __name__ == "__main__":
949
1063
  symbol="600077", date="20070416", flag="买入"
950
1064
  )
951
1065
  print(stock_lhb_stock_detail_em_df)
1066
+
1067
+ stock_lhb_yyb_detail_em_df = stock_lhb_yyb_detail_em(symbol="10188715")
1068
+ print(stock_lhb_yyb_detail_em_df)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: akshare
3
- Version: 1.16.75
3
+ Version: 1.16.77
4
4
  Summary: AKShare is an elegant and simple financial data interface library for Python, built for human beings!
5
5
  Home-page: https://github.com/akfamily/akshare
6
6
  Author: AKFamily
@@ -1,4 +1,4 @@
1
- akshare/__init__.py,sha256=mFH9R0cW2wCtgC0g0XKEzcFBrnP5eswX1Jwv3by2mdQ,193144
1
+ akshare/__init__.py,sha256=RXBBHX6CKjlarg4vC5g_-eS46sWZRJH_d5rX16X9cZ4,193271
2
2
  akshare/datasets.py,sha256=rKuRNZrqi6IMsZ9nyvO3Rx02js0tH3zMLjz8HQNAoPQ,963
3
3
  akshare/exceptions.py,sha256=WEJjIhSmJ_xXNW6grwV4nufE_cfmmyuhmueVGiN1VAg,878
4
4
  akshare/request.py,sha256=HtFFf9MhfEibR-ETWe-1Tts6ELU4VKSqA-ghaXjegQM,4252
@@ -232,7 +232,7 @@ akshare/sport/sport_olympic.py,sha256=InkuHz4So8r-0101rUzdro58zsgtr5SLuSxWjiObRG
232
232
  akshare/spot/__init__.py,sha256=BvXm1zCReGMWbcANKydbK9uvYzNU-cbReuUYbdDqunI,82
233
233
  akshare/spot/spot_hog_soozhu.py,sha256=IEt7zrDs0ptAKgMA7QRIk45jcMLcA_LGq6Y3lKLFTi0,9397
234
234
  akshare/spot/spot_price_qh.py,sha256=rRv09vR8K0U_x6x8AiLgGluxytIXkLatFNVkFbIh8eQ,3756
235
- akshare/spot/spot_sge.py,sha256=sXaUGPm8yEXogssNFyFgTlnpf363g7s3U6xO4Zyvk9g,8213
235
+ akshare/spot/spot_sge.py,sha256=fXy6I9GchX2rfdPDD2wSN8K-hcDdS3ABzLDLdH-9t4Y,8696
236
236
  akshare/stock/__init__.py,sha256=jSa9260d6aNZajaW68chI2mpPkDSXLOgi3eXrqo4MQ8,82
237
237
  akshare/stock/cons.py,sha256=pAMixwmjYARzCVWIxN7RjhjnJMpvLR2OD6mZ-zI7jlM,42990
238
238
  akshare/stock/stock_allotment_cninfo.py,sha256=OVjVdWp2XVRNbJvVgtgVVoBmPBJgBB4RyIIgA_9QHM8,6066
@@ -335,7 +335,7 @@ akshare/stock_feature/stock_inner_trade_xq.py,sha256=XNeQheeWcjdhuvfO2NWt_m191HX
335
335
  akshare/stock_feature/stock_irm_cninfo.py,sha256=xD028gllzaHYj6xU9pRKvSLI_gIkVhCTnFH0dSPv1gY,6112
336
336
  akshare/stock_feature/stock_jgdy_em.py,sha256=B39Il7p1a_hx0FXL4zo_Xsxi10Z8W7_EZv8f9nNnwXg,6080
337
337
  akshare/stock_feature/stock_lh_yybpm.py,sha256=7VlqA-UGbfiQ4ez7Ah9znIfUcVI-7Fxxz_V03JO8LTY,3614
338
- akshare/stock_feature/stock_lhb_em.py,sha256=bQGM06jo3IQi_zpJ-cPxa_grteZHJo6Nf69Kei7R5kQ,34304
338
+ akshare/stock_feature/stock_lhb_em.py,sha256=0zQVJAI6Q2-fByX45-DpC_2KF3sU9lVvcC-ds0IM0_k,38237
339
339
  akshare/stock_feature/stock_lhb_sina.py,sha256=W5F5aPlxAmHzzxcf1AAiJuMVtTK9PlYMo_XamCZ5N1o,9232
340
340
  akshare/stock_feature/stock_margin_em.py,sha256=DRuZ3nwtpYq55Yq3WF8jFlj4xEou3bf9krcc_JbJOPM,3327
341
341
  akshare/stock_feature/stock_margin_sse.py,sha256=0Lq9dS21cJVMNMM-L1aEnsnO3V-0BSOr7kwEl9s9YEU,6804
@@ -394,10 +394,10 @@ akshare/utils/func.py,sha256=4cwmXFztU86yJNONJ40KJLvsIEQHBbct4iMm3zT2v30,2315
394
394
  akshare/utils/multi_decrypt.py,sha256=aWoL2iEPeuXHJg8-n7OtMKixLnIhfzepACgxfrfmQB4,1657
395
395
  akshare/utils/token_process.py,sha256=nGtgnZGRprXJkhLXH8mcUH4TgIFwzsTOb0EaEPa0Euo,667
396
396
  akshare/utils/tqdm.py,sha256=MuPNwcswkOGjwWQOMWXi9ZvQ_RmW4obCWRj2i7HM7FE,847
397
- akshare-1.16.75.dist-info/licenses/LICENSE,sha256=mmSZCPgfHiVw34LXuFArd-SUgQtBJ_QsIlh-kWlDHfs,1073
397
+ akshare-1.16.77.dist-info/licenses/LICENSE,sha256=mmSZCPgfHiVw34LXuFArd-SUgQtBJ_QsIlh-kWlDHfs,1073
398
398
  tests/__init__.py,sha256=gNzhlO0UPjFq6Ieb38kaVIODXv4cTDByrdohAZnDYt4,82
399
399
  tests/test_func.py,sha256=j1MGYbZI2if2j_LY1S4FLsf4qfq4NwVqD5wmRlv5Log,832
400
- akshare-1.16.75.dist-info/METADATA,sha256=p7PdD8Bi0t-lyJ-pXC3sUuWb68YpzhZdG9czeEH0WyM,12591
401
- akshare-1.16.75.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
402
- akshare-1.16.75.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
403
- akshare-1.16.75.dist-info/RECORD,,
400
+ akshare-1.16.77.dist-info/METADATA,sha256=Vxm0tm1qOq0EJhThxsTicBe2_b3ZbLRLcl9PPyqYjn0,12591
401
+ akshare-1.16.77.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
402
+ akshare-1.16.77.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
403
+ akshare-1.16.77.dist-info/RECORD,,