diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml
index 7f1def4..9f11ea9 100644
--- a/.github/workflows/docker-release.yml
+++ b/.github/workflows/docker-release.yml
@@ -6,7 +6,7 @@ on:
# - "apps/**"
# - "Dockerfile"
tags:
- - "v*.*.*"
+ - 'v*.*.*'
concurrency:
group: docker-release
diff --git a/.markdownlint.yaml b/.markdownlint.yaml
index 4a59f85..0a040ff 100644
--- a/.markdownlint.yaml
+++ b/.markdownlint.yaml
@@ -6,4 +6,4 @@ line-length: false
# MD033/no-inline-html - Inline HTML
MD033:
# Allowed elements
- allowed_elements: ["style"]
+ allowed_elements: ['style']
diff --git a/README.md b/README.md
index ef5e4c2..82bb4df 100644
--- a/README.md
+++ b/README.md
@@ -11,18 +11,18 @@
## 功能
-- [x] v2.x版本使用全新接口,更加稳定
-- [x] 支持微信公众号订阅(基于微信读书)
-- [x] 后台自动定时更新内容
-- [x] 微信公众号RSS生成(支持`.atom`\.`rss`\.`json`格式)
-- [x] 支持全文内容输出,让阅读无障碍
-- [x] 所有订阅源导出OPML
-- [x] 支持通过/feeds/all.(json|rss|atom)接口和/feeds/:feed对标题进行过滤:使用title_include和title_exclude参数,支持使用`|`实现多个关键词的 或 逻辑
-> {{ORIGIN_URL}}/feeds/all.atom?title_include=张三
->
-> {{ORIGIN_URL}}/feeds/MP_WXS_123.json?limit=30&title_include=张三|李四|王五&title_exclude=张三丰|赵六
-- [x] 支持通过/feeds/:feed接口触发单个feedid更新:使用update=true参数(实时返回结果不包含更新后的articles,要获取更新后的articles需去掉update参数再请求一次)
-> {{ORIGIN_URL}}/feeds/MP_WXS_123.rss?update=true
+- [x] v2.x版本使用全新接口,更加稳定
+- [x] 支持微信公众号订阅(基于微信读书)
+- [x] 后台自动定时更新内容
+- [x] 微信公众号RSS生成(支持`.atom`\.`rss`\.`json`格式)
+- [x] 支持全文内容输出,让阅读无障碍
+- [x] 所有订阅源导出OPML
+- [x] 支持通过/feeds/all.(json|rss|atom)接口和/feeds/:feed对标题进行过滤:使用title_include和title_exclude参数,支持使用`|`实现多个关键词的 或 逻辑
+ > {{ORIGIN_URL}}/feeds/all.atom?title_include=张三
+ >
+ > {{ORIGIN_URL}}/feeds/MP_WXS_123.json?limit=30&title_include=张三|李四|王五&title_exclude=张三丰|赵六
+- [x] 支持通过/feeds/:feed接口触发单个feedid更新:使用update=true参数(实时返回结果不包含更新后的articles,要获取更新后的articles需去掉update参数再请求一次)
+ > {{ORIGIN_URL}}/feeds/MP_WXS_123.rss?update=true
## 部署
@@ -30,7 +30,7 @@
你可以通过以下平台一键部署,只需填写本项目的URL即可。
-[Zeabur](https://zeabur.com/)
+[Zeabur](https://zeabur.com/)
[](https://zeabur.com/templates/DI9BBD)
@@ -97,6 +97,7 @@ docker run -d \
如果你想本地部署,请使用 `pnpm install && pnpm run -r build && pnpm run start:server` 命令(可以配合 pm2 来守护进程,防止被杀死)。
详细的部署步骤如下,以sqlite为例:
+
```shell
# 需要提前声明环境变量,因为prisma会根据环境变量生成对应的数据库连接
export DATABASE_URL="file:../data/wewe-rss.db"
@@ -105,10 +106,10 @@ export DATABASE_TYPE="sqlite"
rm -rf apps/server/prisma
mv apps/server/prisma-sqlite apps/server/prisma
# 生成prisma client
-npx prisma generate --schema apps/server/prisma/schema.prisma
+npx prisma generate --schema apps/server/prisma/schema.prisma
# 生成数据库表
npx prisma migrate deploy --schema apps/server/prisma/schema.prisma
-# 构建并运行
+# 构建并运行
pnpm run -r build
pnpm run start:server
@@ -137,20 +138,21 @@ pnpm run start:server
## 使用方式
1. 进入账号管理,点击添加账号,微信扫码登录微信读书账号。
-
+
1. 进入公众号源,点击添加,通过提交微信公众号分享链接,订阅微信公众号。
- **(添加频率过高容易被封控,等24小时解封)**
-
-
+ **(添加频率过高容易被封控,等24小时解封)**
+
## 账号状态说明
-- 今日小黑屋
+- 今日小黑屋
+
> 账号被封控,等一天恢复
> 如果账号正常,可以通过重启服务/容器清除小黑屋记录
- 禁用
+
> 不使用该账号
- 失效
@@ -169,7 +171,6 @@ pnpm run start:server
-
## 风险声明
为了确保本项目的持久运行,某些接口请求将通过`weread.111965.xyz`进行转发。请放心,该转发服务不会保存任何数据。
diff --git a/apps/server/src/app.controller.ts b/apps/server/src/app.controller.ts
index adb03d8..4516357 100644
--- a/apps/server/src/app.controller.ts
+++ b/apps/server/src/app.controller.ts
@@ -22,10 +22,9 @@ export class AppController {
}
@Get('favicon.ico')
- getFavicon(
- @Response() res: Res,
- ) {
- const imgContent = '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'
+ getFavicon(@Response() res: Res) {
+ const imgContent =
+ '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';
const imgBuffer = Buffer.from(imgContent, 'base64');
res.setHeader('Content-Type', 'image/png');
res.send(imgBuffer);
@@ -43,7 +42,7 @@ export class AppController {
enabledAuthCode: !!code,
iconUrl: weweRssServerOriginUrl
? `${weweRssServerOriginUrl}/favicon.ico`
- : 'https://r2-assets.111965.xyz/wewe-rss.png'
+ : 'https://r2-assets.111965.xyz/wewe-rss.png',
};
}
}
diff --git a/apps/server/src/feeds/feeds.controller.ts b/apps/server/src/feeds/feeds.controller.ts
index 3387fd3..589edd1 100644
--- a/apps/server/src/feeds/feeds.controller.ts
+++ b/apps/server/src/feeds/feeds.controller.ts
@@ -60,7 +60,7 @@ export class FeedsController {
const [id, type] = feed.split('.');
this.logger.log('getFeed: ', id);
- if(update) {
+ if (update) {
this.feedsService.updateFeed(id);
}
diff --git a/apps/server/src/feeds/feeds.service.ts b/apps/server/src/feeds/feeds.service.ts
index 6073f43..fd3592f 100644
--- a/apps/server/src/feeds/feeds.service.ts
+++ b/apps/server/src/feeds/feeds.service.ts
@@ -274,13 +274,15 @@ export class FeedsService {
if (title_include) {
const includes = title_include.split('|');
- feed.items = feed.items.filter(
- (i: Item) => includes.some((k) => i.title.includes(k)));
+ feed.items = feed.items.filter((i: Item) =>
+ includes.some((k) => i.title.includes(k)),
+ );
}
if (title_exclude) {
const excludes = title_exclude.split('|');
feed.items = feed.items.filter(
- (i: Item) => !excludes.some((k) => i.title.includes(k)));
+ (i: Item) => !excludes.some((k) => i.title.includes(k)),
+ );
}
switch (type) {
diff --git a/apps/web/README.md b/apps/web/README.md
index 0d6babe..9d0b4bc 100644
--- a/apps/web/README.md
+++ b/apps/web/README.md
@@ -22,7 +22,7 @@ export default {
project: ['./tsconfig.json', './tsconfig.node.json'],
tsconfigRootDir: __dirname,
},
-}
+};
```
- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
diff --git a/apps/web/index.html b/apps/web/index.html
index 51ed5bd..dc1d7b2 100644
--- a/apps/web/index.html
+++ b/apps/web/index.html
@@ -1,4 +1,4 @@
-
+