{"id":13616286,"url":"https://github.com/pureink/inkrss","last_synced_at":"2025-04-14T00:32:06.809Z","repository":{"id":42535179,"uuid":"387138170","full_name":"pureink/inkrss","owner":"pureink","description":"Notify when rss feeds are updated | RSS 更新通知 ","archived":false,"fork":false,"pushed_at":"2022-04-01T02:45:09.000Z","size":10841,"stargazers_count":294,"open_issues_count":3,"forks_count":31,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-08-02T20:48:06.557Z","etag":null,"topics":["cloudflare","cloudflare-workers","rss","telegram"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pureink.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-07-18T09:30:42.000Z","updated_at":"2024-07-30T12:06:06.000Z","dependencies_parsed_at":"2022-09-10T04:34:49.820Z","dependency_job_id":null,"html_url":"https://github.com/pureink/inkrss","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pureink%2Finkrss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pureink%2Finkrss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pureink%2Finkrss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pureink%2Finkrss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pureink","download_url":"https://codeload.github.com/pureink/inkrss/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223611889,"owners_count":17173529,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare","cloudflare-workers","rss","telegram"],"created_at":"2024-08-01T20:01:26.384Z","updated_at":"2024-11-08T00:31:07.996Z","avatar_url":"https://github.com/pureink.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003ch1 align=\"center\"\u003eINK RSS\u003c/h1\u003e\n\u003c/p\u003e\n  \u003cp align=\"center\"\u003e\n    管理订阅，接收通知\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://channel.1nk.workers.dev/channel\"\u003e示例网页\u003c/a\u003e\n    ·\n    \u003ca href=\"https://t.me/inkrss_chat\"\u003e\n    示例群组\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/pureink/inkrss/issues\"\u003e报告Bug\u003c/a\u003e\n  \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n\u003cimg src=\"https://img.shields.io/github/license/pureink/inkrss?style=for-the-badge\"/\u003e\n\u003c/p\u003e\n\n- [介绍](#介绍)\n- [特点](#特点)\n- [项目背景](#项目背景)\n- [TODO](#todo)\n- [注意事项](#注意事项)\n- [部署](#部署)\n- [额外附赠](#额外附赠)\n- [使用建议](#使用建议)\n- [调查](#调查)\n- [贡献](#贡献)\n- [作者](#作者)\n- [协议](#协议)\n\n## 介绍\n\nINK RSS 提供及时且多样的 rss 通知服务，借助现有的接口你可以在任意位置订阅，并使用任意方式接收通知，并且所有服务均开源且免费。\n\n已包含的订阅方式：\n网页，telegram bot\n\n已实现的通知方式：telegram（支持instant view），bark，微信\n\n⚠️注意：由于测试有限，无法发现所有问题，当前无法保证项目的高可用性。如果部署的早期代码出现异常，请在网页删除worker和KV并部署最新版本。\n\n## 特点\n\n🎊 **免费** - 整个应用部署在 cloudflare workers（包括前后端，机器人）\n\n⚡️ **即时** - 最短一分钟进行一次监测。\n\n♻️ **省心** - serverless，无需管理服务器和数据库。\n\n🎨 **定制** - 多种订阅和通知方式，包括不限于 telegram，bark，微信\n\n## 项目背景\n\n部分 rss 提供者并没有提供全文输出，在阅读器订阅此类信息体验并不完整。随着 rsshub 的出现，更多种的信息可以被订阅。这些源或许更适合被动接收更新。\n\n大部分阅读器并不提供通知功能，因为这需要后端定时去获取，inoreader 等功能强大的软件提供此服务，但即使每月支出\\$6.99,也只有 60 分钟的刷新周期保证。IFTTT 是个好选择，但它无法保证延迟并且在去年（2020）只对免费用户提供三个 Applet。\n\ntelegram 有不少开源的机器人，使用公益公开的机器人，隐私安全是一小方面，telegram 对机器人发送信息频率有限制，一个服务器往往也不能保证所有人的订阅即时更新，也无法保证稳定性。自行部署可以解决以上问题但服务器和数据库的支出和维护也不是小问题，通知方式和订阅方式也局限于 telegram。\n\n## TODO\n\n-   [ ] 关键词过滤\n\n-   [ ] 翻译功能\n\n-   [ ] 多语言支持\n\n## 注意事项\n\n1. 对于所有项目都可以使用网页进行订阅\n\n    \u003cimg src=\"https://user-images.githubusercontent.com/44235276/126451080-1c16cc60-9f7e-4423-b67a-ce8b26134a90.gif\" alt=\"screen\" style=\"zoom: 50%;\" /\u003e\n\n2. 使用 telegram 不仅可以使用网页，还包含借助 telegraph 提供的即时预览功能（instant view）以及一个提供增删查功能的机器人。部署后访问\n\n    ```\n    https://api.telegram.org/bot\u003cyour token\u003e/setwebhook?url=https://example.com/secret_path\n    ```\n\n    即可开始使用 bot 进行订阅，注意替换 token 以及 url\n\n3. 连续更新 15 次失败后将会收到错误通知，并将暂时关闭此订阅源更新，如确认订阅源无误，可自行在网页中开启更新。如无法确保订阅源的高可用性，也可在配置中调高此数值。\n\n4. 由于 workers 的限制，无法自行解析 xml，需要配置 PARSE_URL 用于提供解析功能，可以点击以下按钮自行部署，或者适量使用我已部署的 https://inkrssparse.vercel.app\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fpureink%2Finkrss%2Ftree%2Fmain%2Fparse\"\u003e\u003cimg src=\"https://vercel.com/button\" alt=\"Deploy with Vercel\"/\u003e\u003c/a\u003e\u003c/p\u003e\n\n5. 需要配置 SECRET_PATH,网页将部署在https://inkrss.example.workers.dev/secret_path 请仅使用大小写字母和数字进行编写。\n\n## 部署\n\n本项目不依赖于本地环境，但需要在本地进行打包和上传，推荐使用 mac os 系统或者 linux 系统进行以下操作。\n\n-   前期准备\n\n1. 在[官网](https://workers.cloudflare.com)注册 cloudflare 账号，验证邮箱后找到 workers 界面，选择一个子域如 inkrss.workers.dev 即可。\n2. 畅通无阻的网络。\n\n3. 安装 wrangler\n\n\n    推荐根据[官方文档](https://github.com/cloudflare/wrangler)进行安装，以避免不确定的问题。\n\n    在[nodejs 官网](https://nodejs.org/zh-cn/)安装 nodejs（选择长期支持版即可）安装后运行\n\n    ```bash\n    npm i @cloudflare/wrangler -g\n    ```\n\n    如果在命令行输入以下命令成功输出版本号，即安装成功。\n\n    ```\n    wrangler -V\n    ```\n\n4.  wrangler 登录\n\n    ```\n    wrangler login\n    ```\n\n    在一般情况下，会打开浏览器申请授权，授权后即成功登陆，可以跳转到下一步。但有些情况 wrangler 会收不到返回的 token，此时应使用另一种方式登陆.\n\n    在[api tokens 界面](https://dash.cloudflare.com/profile/api-tokens) 找到创建令牌，选择编辑 cloudflare workers 模版，账户资源选择所有账户，区域资源选择所有区域其他默认即可点击确定并复制 api token。\n\n\n    ```bash\n    wrangler config\n    ```\n\n    ![login](https://user-images.githubusercontent.com/44235276/126451261-50b79eda-90f3-462e-8af4-2feaa0fe8ee6.png)\n\n-   开始部署\n\n1.  克隆本项目并解压，复制 wrangler.example.toml 内容建立新配置文件 wrangler.toml\n    \n    在文件夹目录打开命令行（windows 用户可直接在资源管理器输入 cmd 并回车）\n\n    ```\n    wrangler kv:namespace create \"KV\"\n    ```\n\n    根据提示将输出的内容粘贴在 wrangler.toml 文件中 kv_namespaces 位置。\n\n2.  配置\n\n    在 cloudflare 网页找到自己的 account id,粘贴在 wrangler.toml 的对应位置。\n\n    ![api screenshot](https://user-images.githubusercontent.com/44235276/126452407-8f7fb995-1ba1-4daf-91c5-d931e893ccc6.png)\n\n    选择你的通知方式，出于覆盖性考虑目前支持以下方式，将支持 Slack，Discord，钉钉等其他通知方式。\n\n    -   telegram（包括即时预览和机器人订阅，功能丰富，受限于网络）\n    -   bark（部署最便捷，受限于平台）\n    -   wechat（部署较麻烦，仅支持纯文本，适用性广）\n\n    定义 wrangler.toml 中环境变量 `[vars]`，其中必须定义的有：\n    \n    - `NOTIFIER` 为想要的通知方式\n    - `SECRET_PATH` 为 UI 页面路径\n    - `PARSE_URL` 为 Feed Parser\n\n    然后根据所选通知方式，根据 config 文件夹的指定文件夹中 readme 配置其他相应变量，如`BARK_URL`。\n\n3.  发布\n\n    ```\n    wrangler publish\n    ```\n\n    ![publish](https://user-images.githubusercontent.com/44235276/126451441-6af7df11-ae99-4bae-bad5-e1db46de1ef8.png)\n\n    wrangler 会自动安装相应的依赖，进行打包和上传，并返回一个部署好的 url,之后就可以立即在https://ink-rss.xxx.workers.dev/secret_path 访问到前端进行订阅.但由于cloudflare的一些延迟，定时计划可能在半小时后才会开始运行\n\n4. 多环境（Workers）\n\n   可以在 wrangler.toml 中定义多个环境，并通过命令行发布，如若去掉 wrangler.example.toml 中的注释，并如下配置：\n   ```\n   # Environments / Multiple Workers\n   [env.production]\n   name = \"inkrss-prod\"\n\n   kv_namespaces = [\n      { binding = \"KV\", id = \"\" }\n   ]\n\n   [env.production.vars]\n   NOTIFIER = \"telegram\" # bark, telegram or wechat\n\n   PARSE_URL = \"https://inkrssparse.vercel.app\"\n   SECRET_PATH = \"subscriptions\"\n\n   # Telegram notification\n   TELEGRAPH_TOKEN = \"\"\n   TG_TOKEN = \"\"\n\n   TG_SENDID = \"@channel_name\"\n   TG_USERID = 12345678\n   ```\n\n   即可使用以下命令行来部署新的 Worker\n   ```\n   $ wrangler publish -e production\n   ```\n   \n   具体 wrangler.toml 多环境配置请参考：\n   - https://developers.cloudflare.com/workers/platform/environments\n   - https://developers.cloudflare.com/workers/cli-wrangler/configuration\n\n\n## 额外附赠\n\n-   [IOS 桌面小插件](https://github.com/pureink/scripts/tree/master/scriptable/inkrss)\n\n\n    \u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://user-images.githubusercontent.com/44235276/126298401-3370afa4-878d-4243-a587-302e60a19fa3.png\" alt=\"screenshot\" width=\"50%\"/\u003e\u003c/p\u003e\n\n      默认部署后的 url 很长，使用此小部件可以一键跳转，并展示基本信息。\n\n\n- 功能丰富的telegram bot（还没有做完）\n\n    cloudflare workers开发机器人只能使用过时的框架并且开发体验较差。目前仅支持四个命令/list /sub /unsub /unsuball\n\n    具有完整功能以及行内键盘支持的机器人将部署在其他无服务器平台\n\n## 使用建议\n\n-   由于对 cpu 时间的限制，cloudflare worker 会分批进行监测，如果订阅数过多，或者希望多渠道接收消息，只需要在 wrangler.toml 中修改名称重新部署即可部署多个 worker。\n-   频繁的通知提醒会打扰到正常的生活，建议适量订阅。\n-   建议和阅读器结合使用。\n\n## 调查\n\n此开源方案在功能上解决了问题，但多人订阅相同源，必然会造成带宽的浪费并对源站造成压力。如 websub（原 pubsubhubbub）这样的方案我认为太过理想，大部分已使用的协议很难发生变化，我认为存在更合适的过渡方案，请协助填写此[问卷](https://airtable.com/shr5wzoOLMvUM7Aor)帮助我了解 RSS 用户。\n\n## 贡献\n\n本项目仍在起步阶段，无论是机器人，前端后端的交互，还是 worker 的逻辑和功能都可能有所缺陷，任何贡献都将起到帮助。\n\n## 作者\n\n21 岁，是学生。\n\n[@pureink](https://github.com/pureink)\n\n## 协议\n\nThe MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpureink%2Finkrss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpureink%2Finkrss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpureink%2Finkrss/lists"}