@@ -73,13 +73,14 @@ def __init__(
7373 self .max_accounts = config .get ("MAX_ACCOUNTS_PER_CHANNEL" , 3 )
7474 self .translator = translator
7575
76- def _translate_content (
76+ def translate_content (
7777 self ,
7878 report_data : Dict ,
7979 rss_items : Optional [List [Dict ]] = None ,
8080 rss_new_items : Optional [List [Dict ]] = None ,
8181 standalone_data : Optional [Dict ] = None ,
8282 display_regions : Optional [Dict ] = None ,
83+ skip_rss : bool = False ,
8384 ) -> tuple :
8485 """
8586 翻译推送内容
@@ -90,6 +91,7 @@ def _translate_content(
9091 rss_new_items: RSS 新增条目
9192 standalone_data: 独立展示区数据
9293 display_regions: 区域显示配置(不展示的区域跳过翻译)
94+ skip_rss: 跳过 RSS 和独立展示区翻译(当数据已在上游翻译过时使用)
9395
9496 Returns:
9597 tuple: (翻译后的 report_data, rss_items, rss_new_items, standalone_data)
@@ -127,14 +129,14 @@ def _translate_content(
127129 title_locations .append (("new_titles" , source_idx , title_idx ))
128130
129131 # 3. RSS 统计标题(结构与 stats 一致:[{word, count, titles: [{title, ...}]}])
130- if rss_items and scope .get ("RSS" , True ) and display_regions .get ("RSS" , True ):
132+ if not skip_rss and rss_items and scope .get ("RSS" , True ) and display_regions .get ("RSS" , True ):
131133 for stat_idx , stat in enumerate (rss_items ):
132134 for title_idx , title_data in enumerate (stat .get ("titles" , [])):
133135 titles_to_translate .append (title_data .get ("title" , "" ))
134136 title_locations .append (("rss_items" , stat_idx , title_idx ))
135137
136138 # 4. RSS 新增标题(结构与 stats 一致)
137- if rss_new_items and scope .get ("RSS" , True ) and display_regions .get ("RSS" , True ) and display_regions .get ("NEW_ITEMS" , True ):
139+ if not skip_rss and rss_new_items and scope .get ("RSS" , True ) and display_regions .get ("RSS" , True ) and display_regions .get ("NEW_ITEMS" , True ):
138140 for stat_idx , stat in enumerate (rss_new_items ):
139141 for title_idx , title_data in enumerate (stat .get ("titles" , [])):
140142 titles_to_translate .append (title_data .get ("title" , "" ))
@@ -147,11 +149,12 @@ def _translate_content(
147149 titles_to_translate .append (item .get ("title" , "" ))
148150 title_locations .append (("standalone_platforms" , plat_idx , item_idx ))
149151
150- # 6. 独立展示区 - RSS 源
151- for feed_idx , feed in enumerate (standalone_data .get ("rss_feeds" , [])):
152- for item_idx , item in enumerate (feed .get ("items" , [])):
153- titles_to_translate .append (item .get ("title" , "" ))
154- title_locations .append (("standalone_rss" , feed_idx , item_idx ))
152+ # 6. 独立展示区 - RSS 源(跳过已翻译的)
153+ if not skip_rss :
154+ for feed_idx , feed in enumerate (standalone_data .get ("rss_feeds" , [])):
155+ for item_idx , item in enumerate (feed .get ("items" , [])):
156+ titles_to_translate .append (item .get ("title" , "" ))
157+ title_locations .append (("standalone_rss" , feed_idx , item_idx ))
155158
156159 if not titles_to_translate :
157160 print ("[翻译] 没有需要翻译的内容" )
@@ -225,6 +228,7 @@ def dispatch_all(
225228 rss_new_items : Optional [List [Dict ]] = None ,
226229 ai_analysis : Optional [AIAnalysisResult ] = None ,
227230 standalone_data : Optional [Dict ] = None ,
231+ skip_translation : bool = False ,
228232 ) -> Dict [str , bool ]:
229233 """
230234 分发通知到所有已配置的渠道(支持热榜+RSS合并推送+AI分析+独立展示区)
@@ -240,6 +244,7 @@ def dispatch_all(
240244 rss_new_items: RSS 新增条目列表(用于 RSS 新增区块)
241245 ai_analysis: AI 分析结果(可选)
242246 standalone_data: 独立展示区数据(可选)
247+ skip_translation: 跳过翻译(当数据已在上游翻译过时使用)
243248
244249 Returns:
245250 Dict[str, bool]: 每个渠道的发送结果,key 为渠道名,value 为是否成功
@@ -250,9 +255,17 @@ def dispatch_all(
250255 display_regions = self .config .get ("DISPLAY" , {}).get ("REGIONS" , {})
251256
252257 # 执行翻译(如果启用,根据 display_regions 跳过不展示的区域)
253- report_data , rss_items , rss_new_items , standalone_data = self ._translate_content (
254- report_data , rss_items , rss_new_items , standalone_data , display_regions
255- )
258+ # skip_translation=True 时,RSS 已在上游翻译过,跳过 RSS 重复翻译
259+ if not skip_translation :
260+ report_data , rss_items , rss_new_items , standalone_data = self .translate_content (
261+ report_data , rss_items , rss_new_items , standalone_data , display_regions
262+ )
263+ else :
264+ # RSS 已翻译,仅翻译热榜 report_data 和独立展示区热榜部分
265+ report_data , _ , _ , standalone_data = self .translate_content (
266+ report_data , standalone_data = standalone_data , display_regions = display_regions ,
267+ skip_rss = True ,
268+ )
256269
257270 # 飞书
258271 if self .config .get ("FEISHU_WEBHOOK_URL" ):
0 commit comments