update
This commit is contained in:
parent
29b2fad1d6
commit
d62d959b45
@ -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
|
||||
|
||||
# ==================== 市场特色数据 ====================
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user