azu/irodr
GitHub: azu/irodr
面向 Inoreader 的轻量级 RSS 阅读客户端,模拟 Livedoor Reader 的快速交互体验。
Stars: 139 | Forks: 4
# Irodr [](https://github.com/azu/irodr/actions?query=workflow%3A"test")
针对 [Inoreader](http://www.inoreader.com/ "Inoreader") 的 RSS 阅读器客户端。
该 RSS 阅读器提供与 [LDR](http://reader.livedoor.com/) 相似的体验。

## 目标
- [x] 像 [LDR](http://reader.livedoor.com/) 一样快速阅读 RSS
- [x] 预取内容
- [x] 闲置时自动标记为“已读”
- [x] 键盘快捷键
- [x] 可通过 UserScript 自定义
- [x] 提供 [UserScript API](src/component/container/App/Hidden/UserScript) 如 `window.getActiveItem`
## 使用方法

1. 打开
2. 点击 **连接到 Inoreader**
3. 在 Inoreader 站点点击 **授权**
### 键盘快捷键
- j:移动到下一篇内容
- shift+j:加载更多过往内容
- t:切换内容过滤器
- k:移动到上一篇内容
- a:移动到上一个订阅源
- s:移动到下一个订阅源
- m:将订阅源标记为已读
- v:打开当前内容 URL
- z:切换订阅源列表
- space:向下滚动内容
- shift+spaceshift+s:跳过并移动到下一个订阅源
### 自定义客户端 ID 和客户端密钥
如果你希望使用自己的 Inoreader 客户端 ID/密钥,请按以下步骤操作:
1. 访问 https://www.inoreader.com/
2. 打开“偏好设置”
3. 打开“开发者”选项卡
4. 创建新应用
- “重定向 URL” 非必需
- “作用域”:读取与写入
5. 复制客户端 ID 和客户端密钥

将客户端 ID 和密钥粘贴到 Irodr 授权页面中。

## UserScript API
Irodr 为 Greasemonkey 等 UserScript 提供了一些 UserScript API。
- `window.addEventListener("userscript-init", (event) => { /* 初始化 UserScript 对象 */ })`
- `window.userScript.getActiveContent(): UserScriptActiveContent | undefined`
- `window.userScript.getActiveSubscription(): UserScriptActiveSubscription | undefined`
- `window.userScript.triggerKey(keys: string, action?: string): void`
更多详情请参阅 [UserScript API 文档](src/component/container/App/Hidden/UserScript)。
另请参见 [resources/userScript](./resources/userScript) 目录。
## :memo: 说明
- Inoreader 不支持 CORS
- 请支持 CORS :bow:
- [x] 在 [Inoreader Developers - User authentication via OAuth 2.0](http://www.inoreader.com/developers/oauth "Inoreader Developers - User authentication via OAuth 2.0") 中留言
- 当前需要在 `package.json` 中配置 CORS 代理
- 换句话说,需要代理或代理服务器
## 开发
### 使用方法
运行以下命令并打开本地服务器。
```
npm start
# 打开 http://localhost:13245/
```
### :memo: CORS 问题
Inoreader 的 API 不支持 CORS。
因此,Irodr 使用 CORS 代理来访问 Inoreader API。
#### 生产环境
http://irodr.netlify.app/ 运行在 [Netlify](https://www.netlify.com/ "Netlify") 上。
它使用 [Netlify Edge Functions](https://docs.netlify.com/edge-functions/overview/) 作为 CORS 代理。
- [netlify/edge-functions/cors-proxy.ts](./netlify/edge-functions/cors-proxy.ts)
推荐:你也可以通过 UserScript 直接连接 Inoreader API,无需 CORS 代理。
- [irodr-cros.js](./resources/userScript/irodr-cors.js "irodr-cros.js")
此外,你还可以使用自己的 CORS 代理。
- [irodr-custom-cors-proxy.js](./resources/userScript/irodr-custom-cors-proxy.js)
#### 本地服务器
在本地,只需运行 `npm run dev` 并打开 `http://localhost:8888/`。
```
npm run dev
```
### :memo: 混合内容的限制
浏览器在 https://irodr.netlify.app/ 上会显示警告。
这是由混合内容引起的。
- [混合内容 - Web 安全 | MDN](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content "Mixed content - Web security | MDN")
## 更新日志
参见 [版本发布页](https://github.com/azu/irodr/releases)。
## 运行测试
安装开发依赖并运行 `npm test`:
```
npm test
```
## 行为准则
请注意,本项目采用 [贡献者行为准则](./CODE_OF_CONDUCT.md)。
参与本项目即表示你同意遵守其条款。
## 作者
- [github/azu](https://github.com/azu)
- [twitter/azu_re](https://twitter.com/azu_re)
## 许可证
MIT © azu
## OSS 支持
标签:CMS安全, Inoreader, JavaScript, LDR, Netlify, React, RSS阅读器, Syscalls, TypeScript, 前端, 安全插件, 客户端, 开源, 用户脚本, 自动化攻击, 自动已读, 键盘快捷键, 阅读工具, 预取