@@ -614,6 +614,25 @@ def check_proxy(self):
614614 logging .error (f"代理连接测试失败: { e } " )
615615 return False
616616
617+ def save_news_to_json (self , news_items , filename = 'news.json' ):
618+ """将新闻保存到JSON文件"""
619+ try :
620+ # 将日期对象转换为字符串,以便JSON序列化
621+ serializable_news = []
622+ for item in news_items :
623+ news_item = item .copy ()
624+ if isinstance (news_item ['date' ], datetime .date ):
625+ news_item ['date' ] = news_item ['date' ].strftime ('%Y-%m-%d' )
626+ serializable_news .append (news_item )
627+
628+ with open (filename , 'w' , encoding = 'utf-8' ) as f :
629+ json .dump (serializable_news , f , ensure_ascii = False , indent = 4 )
630+ logging .info (f"成功保存 { len (news_items )} 条新闻到 { filename } " )
631+ return True
632+ except Exception as e :
633+ logging .error (f"保存新闻到JSON文件失败: { e } " )
634+ return False
635+
617636 def run (self ):
618637 """运行主程序"""
619638 logging .info ("开始抓取华东理工大学新闻..." )
@@ -665,14 +684,17 @@ def run(self):
665684
666685 # 筛选今日新闻
667686 recent_news = self .filter_recent_news (all_news_items )
668- logging .info (f"筛选出今日新闻 { len (recent_news )} 条" )
687+ logging .info (f"筛选出最近 { self .config ['days' ]} 天内的新闻 { len (recent_news )} 条" )
688+
689+ # 保存新闻到JSON文件
690+ self .save_news_to_json (recent_news )
669691
670692 # 只有在有新通知时才发送邮件
671693 if recent_news and self .emails :
672694 # 直接传递新闻列表,在send_email中根据用户订阅分类进行筛选
673695 self .send_email ("" , len (recent_news ), recent_news )
674696 elif not recent_news :
675- logging .info ("今日暂无新通知 ,不发送邮件" )
697+ logging .info ("最近无新通知 ,不发送邮件" )
676698 else :
677699 logging .warning ("没有配置收件人邮箱" )
678700
0 commit comments