V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
fengkx
V2EX  ›  分享创造

造的一个轮子 Telegram RSSBot in Node.js

  •  
  •   fengkx · 2019-10-01 00:15:49 +08:00 · 4809 次点击
    这是一个创建于 1917 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先放地址:https://github.com/fengkx/NodeRSSBot

    作为一个 Telegram 重度使用者。非常喜欢用 Telegram 订阅通知类型的 RSS 或者低频更新的博客。之前一直用的是这个 Bot。它是用 Rust 写的。之所以造这个轮子最早是因为 Rust 版的 Bot 的 Release 不能在我当时的一个 VPS 上跑。Rustup 一波工具链下载编译下来把本来就小的硬盘给撑满了。再加上不能方便地自定义抓取时间间隔于是便造了这么个轮子。 最初设计的用法都高仿 Rust 版的 Bot。借助 Docker 可以很方便的部署,不用操心编译和环境问题。

    但是如果你赏脸点进去看,可能会发现这已经是 9 个月前的事了。9 个月的时间里也有了不少的改进。同时demo也保持了稳定地运行。有效用户 189 人。有效订阅源 1000 个。于是在这里分享一下做出的改进吧。

    count

    改进

    1. 更多的可配置项。例如抓取间隔 view_all 等 更多配置项可见 https://github.com/fengkx/NodeRSSBot#配置项

    2. 多语言支持。开坑的时候就已经考虑了多语言的支持。有赖于 GitHub 上的贡献者的帮助现在 Bot 支持中(简繁)英西四种语言选项。并可以通过/lang命令自由切换 lang

    3. opml 格式的导入导出。 /import/export 指令。值得注意的是,为群聊 import 需要在对应群聊中通过reply向 Bot 发送 opml 格式文件。 而为 Channelimport则需要修改 opml 文件名为形如@频道 id.opml并在私聊中发送。

    4. 更好的交互界面。 /rss 等的命令支持按键翻页 /unsub 可弹出按键供解除订阅 ui

    5. 针对 Telegram 场景的用户生成 RSS 的输出优化。 此处以RSSHub为例。RSSHub 生成的 RSS 不同于站点生成的 RSS 在部分路由中存在未转义的 HTML 字符。由于 Telegram 有支持部分的 HTML 语法,所以会导致含有这些字符的消息无法发出。针对这些字符进行转义 https://github.com/fengkx/NodeRSSBot/issues/57
      另外,部分 RSS 路由例如 GitHub trending 标题中存在一些换行符 \n。在浏览器 base 的 RSS 阅读器中并不会有什么问题。因为 HTML 中的换行是 BR tag, 但是在 Telegram 中 \n 会被当作有效的换行符对待。这就导致了在 Rust 版 RSSBot 会产生这样的输出。

    rrss

    NodeRSSBot 会对换行符做处理而产生正常的输出。

    nrss

    第 1 条附言  ·  2019-10-01 20:08:55 +08:00
    Demo: https://t.me/NodeRSS_bot 欢迎使用😁
    Demo 部署打开了 view_all 设置。但是请放心 view_all 不会输出订阅者相关的信息。抓取时间间隔为 15min。
    11 条回复    2019-10-06 20:33:49 +08:00
    fengkx
        1
    fengkx  
    OP
       2019-10-01 00:29:22 +08:00
    两有一处小改进忘记了。
    1. 按行分割的链接批量订阅
    2. 通过 rel="alternate" type="application/atom+xml" 自动识别并订阅。 例如 v2ex.com 中有 <link rel="alternate" type="application/atom+xml" href="/feed/tab/tech.xml" /> 使用 /sub https://www.v2ex.com 会自动订阅到 https://www.v2ex.com/feed/tab/tech.xml
    B1ock
        2
    B1ock  
       2019-10-01 00:38:39 +08:00
    图都裂了 qwq
    chouj
        3
    chouj  
       2019-10-01 09:00:46 +08:00
    感谢,一直在用。
    wujunze
        4
    wujunze  
       2019-10-01 09:58:08 +08:00
    ifwangs
        5
    ifwangs  
       2019-10-01 12:09:08 +08:00
    希望能支持 instant view
    fengkx
        6
    fengkx  
    OP
       2019-10-01 19:52:56 +08:00
    @B1ock 貌似是因为 imgur 被墙。我这里能看到的。
    fengkx
        7
    fengkx  
    OP
       2019-10-01 19:53:47 +08:00
    fengkx
        8
    fengkx  
    OP
       2019-10-01 20:00:09 +08:00
    @ifwangs 更喜欢一个应用做好一件事。Telegram 的优势在于它作为一个 IM 的及时性和通知能力。还有就是可以用在群聊之中做通知提醒,还有在群聊中订阅群主题相关的 feed 增加讨论度的功能。 所以我多在 Bot 里订阅通知类或者低频更新的博客。特别不喜欢微信公众号那种方式。就是想方设法把用户留在应用内,公众号阅读时如果想要回消息只能用浮窗这种方式。我个人认为很奇葩很不好用。阅读还是用浏览器的好。
    ytbcsyzf
        9
    ytbcsyzf  
       2019-10-02 09:24:49 +08:00 via Android
    墙太高了
    n3yKZn7vykSRL0xz
        10
    n3yKZn7vykSRL0xz  
       2019-10-04 18:53:09 +08:00 via iPhone
    测试订阅了 V2EX 的 rss 一直没推送 自己部署的也是😶
    fengkx
        11
    fengkx  
    OP
       2019-10-06 20:33:49 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1372 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:13 · PVG 01:13 · LAX 09:13 · JFK 12:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.