This commit is contained in:
aaron 2026-02-03 22:06:30 +08:00
parent 29b2fad1d6
commit d62d959b45
2 changed files with 29 additions and 73 deletions

View File

@ -327,82 +327,43 @@ class TushareAdvancedService:
end_date = datetime.now().strftime('%Y%m%d')
# 使用news接口需要5000积分
df = self.pro.news(
src=src,
start_date=start_date,
end_date=end_date,
fields='datetime,content,title,channels,score'
)
try:
df = self.pro.query('news',
src=src,
start_date=start_date,
end_date=end_date,
fields='datetime,content,title,channels,score'
)
except Exception as api_error:
# 如果接口不可用积分不足或接口名称问题返回None
logger.warning(f"新闻接口不可用(可能需要更高积分权限): {api_error}")
return None
if df.empty:
if df is None or df.empty:
return None
# 如果指定了股票代码,过滤相关新闻
if ts_code:
# 简单的关键词过滤
stock_info = self.pro.stock_basic(ts_code=ts_code, fields='name,symbol')
if not stock_info.empty:
name = stock_info.iloc[0]['name']
symbol = stock_info.iloc[0]['symbol']
df = df[
df['title'].str.contains(name, na=False) |
df['content'].str.contains(name, na=False) |
df['title'].str.contains(symbol, na=False)
]
try:
# 简单的关键词过滤
stock_info = self.pro.stock_basic(ts_code=ts_code, fields='name,symbol')
if not stock_info.empty:
name = stock_info.iloc[0]['name']
symbol = stock_info.iloc[0]['symbol']
df = df[
df['title'].str.contains(name, na=False) |
df['content'].str.contains(name, na=False) |
df['title'].str.contains(symbol, na=False)
]
except Exception as filter_error:
logger.warning(f"新闻过滤失败: {filter_error}")
# 继续返回未过滤的新闻
df = df.sort_values('datetime', ascending=False)
return df.head(10).to_dict('records')
except Exception as e:
logger.error(f"获取新闻失败: {e}")
return None
def get_major_news(
self,
stock_code: str,
start_date: str = None,
end_date: str = None
) -> Optional[List[Dict[str, Any]]]:
"""
获取重大公告
Args:
stock_code: 股票代码
start_date: 开始日期
end_date: 结束日期
Returns:
公告列表
"""
if not self.pro:
return None
try:
ts_code = normalize_stock_code(stock_code)
if not ts_code:
return None
if not start_date:
start_date = (datetime.now() - timedelta(days=30)).strftime('%Y%m%d')
if not end_date:
end_date = datetime.now().strftime('%Y%m%d')
# 获取公告数据
df = self.pro.anns(
ts_code=ts_code,
start_date=start_date,
end_date=end_date,
fields='ts_code,ann_date,title,ann_type'
)
if df.empty:
return None
df = df.sort_values('ann_date', ascending=False)
return df.head(20).to_dict('records')
except Exception as e:
logger.error(f"获取公告失败: {e}")
logger.warning(f"获取新闻失败: {e}")
return None
# ==================== 市场特色数据 ====================

View File

@ -41,7 +41,7 @@ class AdvancedDataSkill(BaseSkill):
- money_flow: 资金流向
- margin: 融资融券
- block_trade: 大宗交易
- announcement: 重大公告
- all: 全部数据
"""
stock_code = kwargs.get('stock_code')
data_type = kwargs.get('data_type', 'all') # 默认获取所有数据
@ -107,12 +107,7 @@ class AdvancedDataSkill(BaseSkill):
# 只取最近10条
result['data']['block_trade'] = block_trade[:10]
# 重大公告
if data_type in ['announcement', 'all']:
announcements = tushare_advanced_service.get_major_news(stock_code)
if announcements:
# 只取最近10条
result['data']['announcements'] = announcements[:10]
# 注意:重大公告功能已移除(需要特殊权限)
logger.info(f"获取高级数据成功: {stock_code}, 类型: {data_type}")
return result