Telegram利用RSSHub定制RSS源:将任意网站更新自动推送到频道

本文详细讲解如何借助RSSHub把没有RSS的网站变成可订阅源,并利用Telegram Bot将更新自动推送到频道,实现信息流高效聚合。

阅读提示建议先浏览小标题,再根据需要深入阅读具体段落。

在信息爆炸的时代,如何高效获取关注网站的更新而不被广告和噪音打扰?Telegram频道+RSS是一个经典方案,但很多网站并不提供原生RSS。今天,我们引入一个神器——RSSHub,它几乎能为任何网站生成RSS源,再配合Telegram机器人,就能实现「网站一更新,频道立马收到通知」的极致自动化体验。本文以keep-telegram.cn的视角,带你从零搭建这套系统。

为什么选择RSSHub?

RSSHub是一个开源、轻量、易于扩展的RSS生成器。它通过大量预制路由,可以轻松为B站、微博、小红书、GitHub、知乎甚至许多小众网站生成RSS订阅链接。相比直接使用第三方RSS服务,RSSHub可控性更高、更隐私,还能自定义规则。结合Telegram的频道推送,你可以打造一个完全属于自己的「信息中枢」。

准备工作

在开始前,你需要具备以下条件:

  • 一个Telegram账号,并创建好一个目标频道(用于接收推送)。
  • 一个Telegram Bot(通过@BotFather创建),并获得其Token。
  • 一个可用的RSSHub实例。你可以使用公共实例(如rsshub.app),但推荐自行部署,避免限速和隐私问题。
  • 基本的命令行操作能力,以及Python或Node.js环境(用于编写推送脚本)。

通用实现思路

整个流程分为三步:获取RSSHub生成的自定义RSS链接,让脚本定期抓取RSS并解析更新,通过Bot API将新条目发送到频道。

具体操作步骤

1. 启动RSSHub

如果你选择自建,Docker是最快捷的方式:

docker run -d --name rsshub -p 1200:1200 diygod/rsshub

启动后,通过http://你的服务器IP:1200即可访问。公共实例则直接使用https://rsshub.app作为根路径。

2. 查找并测试目标网站的路由

RSSHub的文档(https://docs.rsshub.app/)列出了所有支持的路由。例如,想要订阅某个B站UP主,路径为/bilibili/user/video/uid。在浏览器中打开https://rsshub.app/bilibili/user/video/你的UID,若返回XML内容则说明成功。

3. 配置Telegram Bot与频道

创建好Bot后,将Bot添加为频道管理员(赋予“发布消息”权限)。获取频道ID(形如@your_channel),并记下Bot Token。

4. 编写RSS轮询脚本

这里以Python脚本为例,使用feedparser解析RSS,并通过requests调用Telegram Bot API发送消息。核心代码如下:

import feedparser
import requests
import time

RSS_URL = "https://rsshub.app/bilibili/user/video/UID"
BOT_TOKEN = "你的BOT_TOKEN"
CHANNEL_ID = "@your_channel"

def send_message(text):
url = f"https://api.telegram.org/bot/sendMessage"
data = {"chat_id": CHANNEL_ID, "text": text, "disable_web_page_preview": False}
requests.post(url, data=data)

last_entries = set()
while True:
feed = feedparser.parse(RSS_URL)
for entry in feed.entries[:5]: # 每次最多检查最新5条
if entry.link not in last_entries:
send_message(f"📢 {entry.title}\n{entry.link}")
last_entries.add(entry.link)
time.sleep(600) # 每10分钟检查一次

将上面的参数替换为实际值,运行脚本即可。注意,你需要用pip install feedparser requests安装依赖。

5. 精细优化:定制推送格式

默认脚本只是发送标题和链接,你可以利用RSS条目的更多字段(如summaryauthorupdated)来丰富消息内容。例如,加上发布时间、作者名,甚至通过parse_mode参数支持Markdown或HTML格式,让推送更美观。

高级玩法:RSSHub的过滤与路由参数

RSSHub不仅生成RSS,还支持路由参数,让你在源头就过滤内容。例如:

  • 在路由末尾添加?filter=关键词,只推送包含指定关键词的条目。
  • 使用?filter_title=针对标题过滤。
  • 有些路由支持排序或限制数量,如?limit=10

这样,你可以精准控制什么内容进入Telegram频道,避免垃圾信息轰炸。

定时任务部署(以Linux为例)

手动运行脚本不够优雅,建议部署为系统服务或cron任务。较简单的方式是使用crontab -e,添加一行:

*/10 * * * * cd /path/to/script && /usr/bin/python3 rss.py

这样每10分钟自动执行一次。注意脚本内部需要处理重复推送问题(比如用数据库或文件记录已发送的链接),这样cron重复执行不会重复推送。

常见问题解答

公共RSSHub实例不稳定怎么办?

公共实例经常被大量请求拖慢或封锁,最佳方案是自建。自建只需要一台VPS和Docker,对小白也很友好。

脚本运行一段时间后不再推送?

可能是RSSHub路由失效或目标网站改版。首先用浏览器访问RSS链接,查看是否还能正常返回数据;若失败,尝试更新RSSHub容器或检查路由参数。

想要推送图片或媒体内容?

Telegram Bot API支持sendPhotosendVideo。你可以在脚本中解析RSS条目中的媒体链接,然后调用对应接口,实现富媒体推送。

是否支持推送多个RSS源?

当然,你可以维护一个RSS列表,脚本遍历所有源并推送。只需将RSS_URL改为一个列表,循环处理即可。

总结

通过RSSHub和Telegram Bot的结合,你不仅能让网站更新即时触达,还能借助RSSHub强大的路由定制能力,过滤出真正有价值的信息。这套方案适用于个人学习、工作监控、社群运营等场景,是Telegram效率提升的重要拼图。动手搭建属于自己的信息流吧,一旦用上,你将再也回不去手动刷网页的日子。

FAQ

安装与配置指南

常见问题

RSSHub需要自己部署吗?

公共实例(rsshub.app)可以直接使用,但受限于限速和稳定性,如果用于生产环境或高频推送,强烈推荐自建。自建只需Docker一行命令,成本低且可控。

如何避免重复推送同一篇文章?

在脚本中维护一个已推送链接的集合(如Python的set),每次处理新条目时先检查链接是否已在集合中,若不在则推送并加入集合。如果脚本重启,可将集合持久化到本地文件或数据库。

推送的消息可以包含图片或视频吗?

可以。Telegram Bot API支持sendPhoto、sendVideo等方法,你需要在解析RSS时获取媒体URL(通常在<enclosure>标签或media:content中),然后调用对应接口发送。