update
This commit is contained in:
parent
29b2fad1d6
commit
d62d959b45
@ -327,82 +327,43 @@ class TushareAdvancedService:
|
|||||||
end_date = datetime.now().strftime('%Y%m%d')
|
end_date = datetime.now().strftime('%Y%m%d')
|
||||||
|
|
||||||
# 使用news接口(需要5000积分)
|
# 使用news接口(需要5000积分)
|
||||||
df = self.pro.news(
|
try:
|
||||||
src=src,
|
df = self.pro.query('news',
|
||||||
start_date=start_date,
|
src=src,
|
||||||
end_date=end_date,
|
start_date=start_date,
|
||||||
fields='datetime,content,title,channels,score'
|
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
|
return None
|
||||||
|
|
||||||
# 如果指定了股票代码,过滤相关新闻
|
# 如果指定了股票代码,过滤相关新闻
|
||||||
if ts_code:
|
if ts_code:
|
||||||
# 简单的关键词过滤
|
try:
|
||||||
stock_info = self.pro.stock_basic(ts_code=ts_code, fields='name,symbol')
|
# 简单的关键词过滤
|
||||||
if not stock_info.empty:
|
stock_info = self.pro.stock_basic(ts_code=ts_code, fields='name,symbol')
|
||||||
name = stock_info.iloc[0]['name']
|
if not stock_info.empty:
|
||||||
symbol = stock_info.iloc[0]['symbol']
|
name = stock_info.iloc[0]['name']
|
||||||
df = df[
|
symbol = stock_info.iloc[0]['symbol']
|
||||||
df['title'].str.contains(name, na=False) |
|
df = df[
|
||||||
df['content'].str.contains(name, na=False) |
|
df['title'].str.contains(name, na=False) |
|
||||||
df['title'].str.contains(symbol, 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)
|
df = df.sort_values('datetime', ascending=False)
|
||||||
return df.head(10).to_dict('records')
|
return df.head(10).to_dict('records')
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"获取新闻失败: {e}")
|
logger.warning(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}")
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# ==================== 市场特色数据 ====================
|
# ==================== 市场特色数据 ====================
|
||||||
|
|||||||
@ -41,7 +41,7 @@ class AdvancedDataSkill(BaseSkill):
|
|||||||
- money_flow: 资金流向
|
- money_flow: 资金流向
|
||||||
- margin: 融资融券
|
- margin: 融资融券
|
||||||
- block_trade: 大宗交易
|
- block_trade: 大宗交易
|
||||||
- announcement: 重大公告
|
- all: 全部数据
|
||||||
"""
|
"""
|
||||||
stock_code = kwargs.get('stock_code')
|
stock_code = kwargs.get('stock_code')
|
||||||
data_type = kwargs.get('data_type', 'all') # 默认获取所有数据
|
data_type = kwargs.get('data_type', 'all') # 默认获取所有数据
|
||||||
@ -107,12 +107,7 @@ class AdvancedDataSkill(BaseSkill):
|
|||||||
# 只取最近10条
|
# 只取最近10条
|
||||||
result['data']['block_trade'] = block_trade[: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}")
|
logger.info(f"获取高级数据成功: {stock_code}, 类型: {data_type}")
|
||||||
return result
|
return result
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user