94 lines
3.4 KiB
Python
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()) |