seoToProfit - 订阅频道机器人,seoToProfit 频道专用

由于很多帖子不是经常看论坛的,可能会遗漏一些供需的信息或者最新的资源等,尝试了市面上许多RSS订阅的机器人,要么有广告,要么是发布的格式我觉得太复杂了,所以自制了一个专门用于在频道发布最新的帖子

如果哪位帖子需要订阅论坛的帖子或者需要在频道和群组发布的请参阅 :satellite_antenna: seoToProfit RSS 订阅指南

import feedparser
import requests
import schedule
import time
import os

# === 配置项 ===
RSS_FEED_URL = 'https://seotoprofit.com/latest.rss'
TELEGRAM_BOT_TOKEN = '机器人 API Token'
TELEGRAM_CHANNEL_ID = -12345678 # 替换为你的频道 ID(整数)

SENT_FILE = 'sent_links.txt'  # 存储已推送文章链接,防重复发送

# === 初始化文件 ===
def init_sent_file():
    if not os.path.exists(SENT_FILE):
        with open(SENT_FILE, 'w') as f:
            pass  # 创建一个空文件
        print("📁 已自动创建记录文件:", SENT_FILE)

# === 已推送文章记录 ===
def load_sent_links():
    with open(SENT_FILE, 'r') as f:
        return set(line.strip() for line in f.readlines())

def save_sent_link(link):
    with open(SENT_FILE, 'a') as f:
        f.write(link + '\n')

# === 发送文章到 Telegram ===
def send_to_telegram(entry):
    message = f'<b><a href="{entry.link}">{entry.title}</a></b>'
    url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
    payload = {
        'chat_id': TELEGRAM_CHANNEL_ID,
        'text': message,
        'parse_mode': 'HTML',
        'disable_web_page_preview': False
    }
    response = requests.post(url, data=payload)
    print("📤 推送状态:", response.status_code, response.text)

# === 检查 RSS 并推送所有未读文章 ===
def check_feed():
    print("📡 检查 RSS Feed...")
    sent_links = load_sent_links()
    feed = feedparser.parse(RSS_FEED_URL)

    if not feed.entries:
        print("⚠️ 未获取到任何文章")
        return

    new_posts = [entry for entry in feed.entries[:10] if entry.link not in sent_links]

    if not new_posts:
        print("✅ 没有新文章")
        return

    for entry in reversed(new_posts):  # 保持推送顺序
        print(f"📌 推送文章: {entry.title}")
        send_to_telegram(entry)
        save_sent_link(entry.link)

# === 启动前初始化 ===
init_sent_file()  # 确保 sent_links.txt 存在

# === 调度器,每 30 秒检测一次 ===
schedule.every(30).seconds.do(check_feed)

print("🤖 RSS Bot 正在运行,每 30 秒检测一次...")
check_feed()  # 启动时立即执行一次

while True:
    schedule.run_pending()
    time.sleep(1)

后台常驻运行使用 tmux(推荐,灵活可恢复控制) , tmux 是一个终端复用器,可以让你开启一个“后台终端会话”,即使你断开 SSH,它依然保持运行。

:wrench: 安装(如果未装)

sudo apt update
sudo apt install tmux -y

:play_button: 启动脚本并保持运行:

tmux new -s rssbot
python3 /root/rss_bot.py

然后按下:

Ctrl + B,然后按 D

这样你就脱离会话了,脚本继续后台运行。

:repeat_button: 恢复控制(查看日志或停止):

tmux attach -t rssbot

退出脚本后可以用:

exit

:white_check_mark: 重新进入会话查看输出(最直接)

tmux attach -t rssbot

你会看到类似:

🤖 RSS Bot 正在运行,每 30 秒检测一次...
📡 检查 RSS Feed...
✅ 没有新文章
📡 检查 RSS Feed...
📌 推送文章: 新文章标题
📤 推送状态: 200 OK {"ok":true, ...}

然后你可以按下:

Ctrl + B 然后 D

来再次脱离会话(让它继续后台运行)。

:white_check_mark: 如果你看不到输出怎么办?

说明你可能是在 tmux 启动后忘了运行脚本。

你可以这样检查:

ps aux | grep rss_bot.py

如果没看到在运行,可以重新进入:

tmux attach -t rssbot

然后再执行:

python3 /root/rss_bot.py

:white_check_mark: 额外建议(自动启动)

如果你不想每次手动进入 tmux 再运行脚本,可以创建一键启动命令:

tmux new -d -s rssbot 'python3 /root/rss_bot.py'

意思是:后台启动名为 rssbot 的 tmux 会话,并自动执行脚本。