Somincola Social
返回博客列表

Mastodon News Center:自动化 Mastodon 新闻机器人管理系统

介绍 Mastodon News Center,一个基于 FastAPI 和 Docker 的新闻机器人管理系统,可以轻松管理多个 Mastodon Bot,自动抓取 RSS 新闻并发布到 Mastodon。

Somincola Social
Mastodon RSS Bot FastAPI Docker 项目

最近完成了一个有趣的项目:Mastodon News Center,一个用于管理和自动化多个 Mastodon 新闻机器人的后台系统。今天就来分享一下这个项目的使用方法和主要功能。


📋 项目简介

Mastodon News Center 是一个基于 FastAPI 和 Docker 的新闻机器人管理系统,可以让你轻松管理多个 Mastodon Bot,自动抓取 RSS 新闻并发布到 Mastodon。

核心功能

  • 📰 自动抓取 RSS 新闻:支持多个 RSS 源,自动去重和格式化
  • 🤖 多 Bot 管理:统一管理多个新闻 Bot(如 Daily、Tech、Finance 等)
  • 📝 自定义模板系统:使用 Jinja2 模板自定义发帖格式
  • 👁️ 内容预览:发布前预览内容,支持模板切换
  • 定时发布:基于 APScheduler 的灵活调度系统
  • 🤖 AI 摘要:可选使用 OpenAI API 进行新闻摘要
  • 📊 运行日志:完整的执行日志,支持筛选和分页
  • 智能错误处理:自动检查内容长度,避免发布失败

🚀 快速开始

1. 克隆项目

git clone https://github.com/somincola/mastodon-news-center.git
cd mastodon-news-center

2. 配置环境变量

复制示例配置文件:

cp .env.example .env

主要配置项:

# 数据库密码(生产环境必须修改为强密码!)
POSTGRES_PASSWORD=your_strong_password_here

# Mastodon 实例地址
MASTODON_BASE_URL=https://m.somincola.org

# Mastodon 帖子最大字符数(默认 500)
MASTODON_MAX_LENGTH=500

# OpenAI API Key(可选,用于 AI 摘要)
OPENAI_API_KEY=sk-...

3. 启动服务

docker-compose up -d

启动成功后访问:http://localhost:8000/admin

Dashboard 页面


📖 使用步骤

步骤 1:创建 Bot

  1. 访问 Dashboard 页面
  2. 点击”创建新 Bot”
  3. 填写基本信息:
    • 名称:Bot 名称(如:Daily、Tech)
    • Mastodon Token:从 Mastodon 实例获取的应用 Token
    • Mastodon 账号:Bot 账号(格式:@[email protected]

步骤 2:配置 Bot

  • 运行时间:设置每日执行时间(格式:HH:MM,每行一个)
    • 示例:09:0018:00
  • 最大新闻条数:每条动态包含的新闻数量(1-20)
  • AI 摘要(可选):开启后使用 OpenAI 进行新闻摘要
  • 发帖模板(可选):选择自定义模板或使用默认格式

步骤 3:添加 RSS 源

在 Bot 详情页面添加 RSS 源:

  • 填写源名称和 URL
  • 设置每次最大抓取条数
  • 可单独启用/禁用某个源

步骤 4:预览和发布

在 Bot 详情页面点击”📋 预览发布内容”:

  • 查看将要发布的内容
  • 切换不同模板查看效果
  • 确认无误后可以直接发布

Bot 详情页面


✨ 特色功能

自定义发帖模板

系统支持使用 Jinja2 模板自定义发帖格式。你可以:

  1. 进入”Templates”页面创建模板
  2. 使用模板变量(bot_namenews_itemsitems_count 等)
  3. 在 Bot 配置中选择该模板

模板示例:

📰 {{ bot_name }} 新闻简报

{% for item in news_items %}
{{ loop.index }}. {{ item.title }}
{{ item.link }}
{% if not loop.last %}

{% endif %}
{% endfor %}

智能错误处理

系统会自动检查内容长度,如果超过 Mastodon 的限制(默认 500 字符),会:

  • 在合适位置(换行符处)自动截断
  • 添加”…(内容过长,已截断)“提示
  • 确保发布不会因为内容过长而失败

你可以在 .env 文件中修改 MASTODON_MAX_LENGTH 来调整限制。

运行日志

系统记录每次任务执行的详细日志:

  • 执行时间、耗时、状态
  • 发布的新闻条数
  • 帖子 ID(自动转换为可点击的 Mastodon 链接)
  • 错误信息(如果失败)

支持按 Bot、状态筛选,以及分页查看。

运行日志页面


🛠️ 技术栈

  • 后端:FastAPI
  • 数据库:PostgreSQL
  • 模板引擎:Jinja2
  • 任务调度:APScheduler
  • 容器化:Docker + docker-compose
  • UI 设计:现代化设计风格(类似 shadcn/ui)

🎯 项目特点

  1. 开箱即用:Docker Compose 一键启动,无需复杂配置
  2. 统一管理:Dashboard 集中管理所有 Bot,操作简单直观
  3. 灵活配置:支持模板系统、AI 摘要、定时任务等
  4. 错误容错:自动处理内容长度、网络错误等问题
  5. 完整日志:详细的运行日志,便于排查问题

🔑 获取 Mastodon Token

  1. 登录你的 Mastodon 实例
  2. 进入”设置” → “开发” → “新应用”
  3. 填写应用信息(权限选择”读写”)
  4. 复制生成的 Access Token
  5. 将 Token 粘贴到 Bot 配置中

📝 总结

Mastodon News Center 提供了一个完整的解决方案来管理多个 Mastodon 新闻机器人。通过简洁的 Web 界面,你可以轻松配置 Bot、管理 RSS 源、预览内容,并查看详细的运行日志。

系统支持自定义模板、AI 摘要、定时任务等功能,同时具备完善的错误处理机制,确保机器人稳定运行。


项目地址https://github.com/somincola/mastodon-news-center

许可证:MIT License

如果你对这个项目感兴趣,欢迎 Star 和 Fork!如有问题或建议,也欢迎在 Issues 中提出。