全自动文章生成发布构建

单机版、定时生成文章和分平台发布,以下是优化后的解决方案及代码示例:

 

---

 

### **推荐方案:APScheduler + 内置调度逻辑**

选择 **APScheduler** 是最佳方案,原因:

1. **轻量级**:纯 Python 实现,无需额外服务(如 Redis/Celery Worker)。

2. **精准调度**:支持 Cron 式定时任务(如每天 3 点生成、8 点发布)。

3. **单机友好**:直接嵌入代码中,适合打包成 exe。

4. **可控性**:能直接操作 SQLite 数据库,处理不同平台的参数化需求。

 

---

 

### **代码实现框架**

 

#### 1. 项目结构

```bash

your_tool/

├── main.py # 主程序入口

├── scheduler.py # 调度器配置

├── article_generator.py # 生成文章模块

├── wechat_publisher.py # 微信发布模块

├── other_publisher.py # 其他平台发布模块

└── database.db # SQLite 数据库

```

 

#### 2. 核心代码实现

 

##### 2.1 主程序 (`main.py`)

```python

import logging

from apscheduler.schedulers.blocking import BlockingScheduler

from scheduler import setup_scheduler

 

if __name__ == "__main__":

    # 配置日志

    logging.basicConfig(level=logging.INFO)

    

    # 初始化调度器

    scheduler = BlockingScheduler()

    setup_scheduler(scheduler)

    

    try:

        scheduler.start()

    except KeyboardInterrupt:

        scheduler.shutdown()

        logging.info("程序已安全退出")

```

 

##### 2.2 调度器配置 (`scheduler.py`)

```python

from apscheduler.triggers.cron import CronTrigger

from article_generator import generate_articles

from wechat_publisher import wechat_publish_job

from other_publisher import other_platform_publish_job

 

def setup_scheduler(scheduler):

    # 每天 3:00 生成文章

    scheduler.add_job(

        generate_articles,

        trigger=CronTrigger(hour=3, minute=0),

        kwargs={"max_articles": 5} # 生成数量可配置

    )

    

    # 微信每天 8:00 发布(每天最多 2 篇)

    scheduler.add_job(

        wechat_publish_job,

        trigger=CronTrigger(hour=8, minute=0),

        kwargs={"max_per_day": 2, "interval_minutes": 30}

    )

    

    # 其他平台(如知乎)每天 9:00 发布(参数不同)

    scheduler.add_job(

        other_platform_publish_job,

        trigger=CronTrigger(hour=9, minute=0),

        kwargs={"platform": "zhihu", "max_per_day": 3}

    )

```

 

##### 2.3 文章生成模块 (`article_generator.py`)

```python

import sqlite3

from datetime import datetime

 

def generate_articles(max_articles=5):

    conn = sqlite3.connect('database.db', check_same_thread=False)

    cursor = conn.cursor()

    

    # 生成 AI 文章的逻辑(示例)

    for _ in range(max_articles):

        article_content = "AI 生成的文章内容..." # 实际调用你的 AI 生成代码

        cursor.execute('''

            INSERT INTO articles (content, generated_time, is_published, platform)

            VALUES (?, ?, 0, 'unassigned')

        ''', (article_content, datetime.now()))

    

    conn.commit()

    conn.close()

```

 

##### 2.4 微信发布模块 (`wechat_publisher.py`)

```python

import sqlite3

import time

 

def wechat_publish_job(max_per_day=2, interval_minutes=30):

    conn = sqlite3.connect('database.db', check_same_thread=False)

    cursor = conn.cursor()

    

    # 查找未发布的微信文章

    cursor.execute('''

        SELECT id, content FROM articles

        WHERE is_published = 0 AND platform = 'wechat'

        LIMIT ?

    ''', (max_per_day,))

    

    articles = cursor.fetchall()

    for idx, (article_id, content) in enumerate(articles):

        # 调用微信 API 发布(伪代码)

        publish_to_wechat(content)

        

        # 标记为已发布

        cursor.execute('''

            UPDATE articles SET is_published = 1 WHERE id = ?

        ''', (article_id,))

        

        # 间隔等待(如 30 分钟)

        if idx < len(articles) - 1:

            time.sleep(interval_minutes * 60)

    

    conn.commit()

    conn.close()

 

def publish_to_wechat(content):

    # 实际调用微信 SDK 的代码

    print(f"[微信] 发布文章: {content[:20]}...")

```

 

---

 

### **关键设计说明**

1. **集中式调度**  

   使用 `APScheduler` 统一管理所有任务,避免各模块自己控制时间,提高可维护性。

 

2. **参数化配置**  

   - 通过 `kwargs` 传递不同平台的参数(如 `max_per_day`、`interval_minutes`)。

   - 平台差异通过数据库字段 `platform` 区分。

 

3. **数据库线程安全**  

   SQLite 连接时设置 `check_same_thread=False`,确保多线程任务能安全访问。

 

4. **打包成 exe 的注意事项**  

   - 使用 `pyinstaller` 打包时添加 `--hidden-import=apscheduler.schedulers.blocking`。

   - 测试后台运行是否稳定(无界面模式可通过 `pythonw.exe` 运行)。

 

---

 

### **替代方案对比**

| 方案 | 优点 | 缺点 | 适合场景 |

|---------------------|--------------------------|--------------------------|---------------------|

| **APScheduler** | 轻量、易嵌入、Cron 支持 | 需保持主进程运行 | 单机 exe 小工具 |

| Windows 任务计划 | 无需代码修改 | 跨平台兼容性差 | 仅 Windows 环境 |

| 代码内 Sleep 轮询 | 简单 | 精度低、资源占用高 | 极简单需求 |

 

---

 

### **最终建议**

- 选择 **APScheduler**,代码清晰且可扩展。

- 在打包 exe 时,确保主程序以 `BlockingScheduler` 运行(阻塞主线程保持进程活跃)。

- 不同平台的发布逻辑通过 `platform` 字段和独立 Job 函数分离。

你可能感兴趣的:(我的学习笔记,python)