许多Telegram用户希望将PTT(批踢踢)看板上的热门文章或特定帖文自动转发到Telegram频道或群组中,以便及时获取资讯。然而,手动搬运既耗时又容易遗漏。本教程将详细讲解如何利用Telegram机器人结合第三方工具,实现PTT文章自动转传至Telegram的完整流程,涵盖从准备到验证的全步骤。
问题现象描述
用户在使用Telegram时,常常遇到以下困扰:需要频繁手动打开PTT网页或应用,搜索特定看板(如八卦版、股票版)的新文章,再逐一复制链接或内容粘贴到Telegram群组或频道中。这种操作不仅效率低下,而且无法做到实时同步,容易错过重要信息。此外,部分用户尝试使用现成的转传机器人,却因配置复杂、接口失效或无法自定义筛选规则而失败。本教程将解决这些痛点,指导用户搭建一套属于自己的自动转传系统,实现PTT文章在Telegram中的实时推送。
步骤一:准备Telegram机器人并获取Token
具体操作说明:
1. 打开Telegram,在搜索框输入 BotFather,并进入该官方机器人对话框。
2. 发送指令 /newbot,按提示依次输入机器人的显示名称(如“PTT自动转传助手”)和用户名(必须以 bot结尾,例如 ptt_auto_bot)。
3. 创建成功后,BotFather会返回一个 API Token(格式类似 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11),请立即复制并妥善保存。此Token是后续连接机器人的唯一凭证。
4. 将机器人添加到你想要接收PTT文章的群组或频道中,并赋予其“发送消息”权限。如果使用频道,需将机器人设为管理员。
注意事项/小提示:
- Token 一旦泄露,他人可控制你的机器人,请勿分享到公开场合。
- 机器人用户名必须唯一,如果提示已被占用,请更换名称重试。
- 若机器人未获得发送权限,转传将失败,建议在群组中先手动发送一条消息测试。
备用方案:
- 如果找不到 BotFather,可通过此链接直接打开:https://t.me/botfather
- 若忘记Token,可在 BotFather中输入
/mybots,选择你的机器人,再点击 API Token即可重新获取。
步骤二:搭建PTT文章抓取与转发脚本(以Python为例)
具体操作说明:
1. 在电脑上安装Python环境(推荐3.8以上版本),并安装所需库:在终端或命令提示符中运行 pip install requests beautifulsoup4 python-telegram-bot。
2. 创建一个新的Python文件(例如 ptt_to_telegram.py),并编写以下核心逻辑:
- 使用 requests库访问PTT看板页面(如 https://www.ptt.cc/bbs/Gossiping/index.html),并设置 User-Agent模拟浏览器访问,避免被屏蔽。
- 利用 BeautifulSoup解析HTML,提取文章标题、链接和作者。
- 通过 python-telegram-bot库,调用之前获取的 Token,将提取到的内容格式化后发送到指定群组或频道的 Chat ID。
3. 设置定时任务:使用 cron(Linux/Mac)或 任务计划程序(Windows)让脚本每隔5-10分钟自动运行一次,实现实时监控。
注意事项/小提示:
- PTT页面可能有反爬机制,建议在请求头中添加
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'。 - 获取群组或频道的 Chat ID方法:在群组中发送任意消息,然后访问
https://api.telegram.org/bot<你的Token>/getUpdates,在返回的JSON中找到chat下的id字段。 - 如果PTT页面结构发生变化,脚本可能失效,需要定期维护更新解析规则。
备用方案:
- 如果不熟悉Python,可使用现成的开源项目(如 PTT-Crawler),直接修改配置文件中的Token和看板名称即可。
- 也可借助 IFTTT或 Zapier等自动化平台,通过RSS订阅PTT看板(部分第三方提供RSS服务),再联动Telegram机器人发送消息,无需编写代码。
步骤三:配置筛选规则与消息格式
具体操作说明:
1. 在脚本中添加条件判断,实现按关键词、作者或推文数筛选文章。例如,只转传标题包含“地震”或“股票”的帖子。
2. 格式化发送内容,建议包含:文章标题(加粗或使用Markdown格式)、作者、文章链接(直接可点击)以及发帖时间。例如:*标题:* 地震快报\n*作者:* abc123\n*链接:* [点此阅读](https://www.ptt.cc/...)\n*时间:* 2024-01-01 12:00。
3. 在Telegram机器人发送消息时,设置参数 parse_mode='Markdown'以支持文本格式。如果发送失败,可改用 parse_mode='HTML'。
注意事项/小提示:
- 关键词筛选支持正则表达式,例如
re.search(r'地震|颱風', title)可匹配多个关键词。 - 消息长度有限制(Telegram单条消息最长4096字符),如果文章内容过长,建议只发送标题和链接。
- 避免发送重复文章,可在脚本中记录已发送文章的ID或链接,每次抓取时比对去重。
备用方案:
- 如果不想处理去重逻辑,可使用
python-telegram-bot的MessageQueue功能,或借助数据库(如SQLite)存储已发记录。 - 对于复杂筛选,可考虑使用 PTT API(非官方,需申请)替代网页爬虫,数据更稳定。
步骤四:测试与验证转传功能
具体操作说明:
1. 手动运行脚本一次,检查Telegram群组或频道是否收到消息。如果没有收到,打开终端查看报错信息,常见错误包括:Token无效、Chat ID错误、网络连接超时。
2. 验证消息格式是否正确:点击链接是否能跳转到PTT原文,标题是否加粗,时间是否显示正常。
3. 测试筛选规则:故意在PTT发布一篇包含关键词的测试文章(或等待已有文章被触发),确认只有符合条件的文章被转传。
4. 检查去重机制:连续运行脚本两次,观察是否重复发送同一篇文章。
注意事项/小提示:
- 首次测试建议使用一个私密群组或频道,避免打扰其他用户。
- 如果出现“403 Forbidden”错误,说明PTT服务器拒绝了请求,请检查 User-Agent设置或更换IP。
- 若消息发送成功但格式混乱,请确认
parse_mode参数是否正确设置,并检查Markdown语法是否有误(如括号未配对)。
备用方案:
- 如果脚本运行无误但收不到消息,可在代码中添加
print语句输出抓取结果,确认数据是否被正确获取。 - 使用 Telegram Bot API的测试工具(如 Postman)直接发送消息到Chat ID,排除脚本问题。
步骤五:自动化部署与长期运行
具体操作说明:
1. 将脚本部署到云服务器或长期在线的设备(如树莓派、NAS)。如果使用本地电脑,需确保电脑不关机且网络稳定。
2. 使用 systemd(Linux)或 Windows服务将脚本注册为后台服务,设置开机自启。例如,在Linux中创建 /etc/systemd/system/ptt_bot.service文件,配置启动命令和重启策略。
3. 设置日志记录:在脚本中添加 logging模块,将运行日志写入文件,便于排查后续问题。
4. 定期检查脚本运行状态,建议每周查看一次日志,确认无异常中断。
注意事项/小提示:
- 云服务器推荐使用 AWS EC2、Vultr或国内轻量应用服务器,选择最低配置即可,月费约几十元。
- 如果使用免费服务(如 Heroku),需注意每月运行时长限制,且可能需要绑定信用卡。
- 脚本应添加异常处理(
try-except),避免因单次抓取失败导致整个程序崩溃。
备用方案:
- 如果不想自己维护服务器,可使用 GitHub Actions设置定时工作流,每10分钟运行一次脚本(需将Token等敏感信息配置为 Secrets)。
- 也可使用 Docker封装脚本,部署到支持容器的平台(如 Railway、Fly.io),简化环境配置。
常见问题补充
问:为什么机器人发送的消息是乱码或空白?
答:通常是因为PTT页面编码为 Big5,而Python默认使用UTF-8。在脚本中抓取数据后,需使用 .encode('latin-1').decode('utf-8')或直接指定编码 response.encoding = 'utf-8'进行转换。另外,检查消息中是否包含Telegram不支持的字符(如某些特殊符号)。
问:如何转传多个PTT看板?
答:在脚本中循环遍历看板列表,例如 boards = ['Gossiping', 'Stock', 'Baseball'],分别请求每个看板的首页,然后合并结果并发送。注意控制请求频率,避免被PTT封IP。
问:转传时能否自动将PTT文章内容完整复制到Telegram?
答:可以,但需注意PTT文章可能包含大量纯文本、图片链接或ASCII艺术,直接复制可能导致格式混乱。建议只提取文章正文的前200字,并附上原文链接。如果要完整复制,需单独请求文章页面(如 https://www.ptt.cc/bbs/Gossiping/M.1234567890.A.123.html),解析 #main-content区域的内容。
问:机器人突然停止工作了怎么办?
答:首先检查网络是否正常,然后查看脚本日志是否有报错。常见原因包括:PTT页面改版导致解析失败、Token过期(极少发生)、服务器磁盘空间满。如果是页面改版,需更新 BeautifulSoup的解析规则;如果是服务器问题,重启服务或重新部署。
总结:通过创建Telegram机器人、编写PTT抓取脚本并设置定时任务,即可实现PTT看板文章自动转传至Telegram,全程无需手动干预,大幅提升资讯获取效率。