Files
XijiaX/main.py
2025-07-15 10:52:00 +08:00

94 lines
3.4 KiB
Python

import asyncio
from crawler import RSSCrawler
from ai_analyzer import AIContentAnalyzer
from wp_publisher import WordPressPublisher
from db_manager import DatabaseManager
import os
import random
from datetime import datetime, timedelta
async def main():
print("=== 喜加一自动发布系统启动 ===")
while True:
try:
await process_items()
# 清理7天前的数据库记录
db_manager = DatabaseManager()
await db_manager.cleanup_old_records()
# 生成3-8分钟的随机等待时间
wait_minutes = random.uniform(3, 8)
wait_seconds = wait_minutes * 60
next_run_time = (datetime.now() + timedelta(minutes=wait_minutes)).strftime('%H:%M:%S')
print(f"本轮处理完成,将在 {wait_minutes:.2f} 分钟后({next_run_time})开始下一轮采集")
print(f"当前时间:{datetime.now().strftime('%H:%M:%S')}")
# 等待指定时间
await asyncio.sleep(wait_seconds)
print(f"等待结束,开始新一轮采集,当前时间:{datetime.now().strftime('%H:%M:%S')}")
except Exception as e:
print(f"系统运行出错:{str(e)}")
print(f"错误类型:{type(e).__name__}")
# 发生错误后等待1分钟再继续
await asyncio.sleep(60)
continue
async def process_items():
print("\n=== 开始新一轮内容处理 ===")
try:
# 初始化组件
crawler = RSSCrawler()
analyzer = AIContentAnalyzer()
publisher = WordPressPublisher()
db_manager = DatabaseManager()
# 获取RSS内容
print("\n1. 开始获取RSS内容...")
items = await crawler.fetch_rss()
if not items:
print("没有获取到新的内容,本轮处理结束")
return
# 处理每个内容项
for item in items:
try:
# 检查文章是否已处理
if await db_manager.is_article_processed(item['url']):
print(f"文章已处理过,跳过:{item['title']}")
continue
# AI分析内容
print("\n2. 开始AI内容分析...")
ai_content = await analyzer.analyze_content(item['title'])
# 添加数据库管理器到item
item['db_manager'] = db_manager
# 记录文章处理状态
await db_manager.add_processed_article(
item['url'],
item['title'],
ai_content['type'],
ai_content['title']
)
# 发布到WordPress
print("\n3. 开始发布到WordPress...")
await publisher.publish_post(item, ai_content)
print("\n=== 内容处理完成 ===")
except Exception as e:
print(f"处理内容项时出错:{str(e)}")
continue
except Exception as e:
print(f"处理过程出错:{str(e)}")
raise e
if __name__ == "__main__":
asyncio.run(main())