From d62d959b4503c08434537074da3a2c073d8b6b0a Mon Sep 17 00:00:00 2001 From: aaron <> Date: Tue, 3 Feb 2026 22:06:30 +0800 Subject: [PATCH] update --- .../app/services/tushare_advanced_service.py | 93 ++++++------------- backend/app/skills/advanced_data.py | 9 +- 2 files changed, 29 insertions(+), 73 deletions(-) diff --git a/backend/app/services/tushare_advanced_service.py b/backend/app/services/tushare_advanced_service.py index 1fc29d9..ace9ac9 100644 --- a/backend/app/services/tushare_advanced_service.py +++ b/backend/app/services/tushare_advanced_service.py @@ -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 # ==================== 市场特色数据 ==================== diff --git a/backend/app/skills/advanced_data.py b/backend/app/skills/advanced_data.py index 1ad4a02..ce634ea 100644 --- a/backend/app/skills/advanced_data.py +++ b/backend/app/skills/advanced_data.py @@ -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