Warning
Deprecated. Please use bilibili_subscriber instead.
Bilibili 自搭建(第三方)哔哩哔哩关注服务
In memory of my 6-digit UID account which was permanently banned by bilibili at 2021-06-11
谨以此纪念我在 2021 年 6 月 11 日被 B 站永久封禁的 6 位数 UID 大号
该项目旨在提供一个第三方的关注 / 订阅功能,以在被封号的情况下对自己希望关注的用户进行关注 / 订阅。
valkyrie,音译“瓦尔基里”,意译“女武神”。瓦尔基里是挪威和日耳曼神话中奥丁的侍女们的名字。她们骑着马与“狂猎”一道出巡,或者化作天鹅飞向战场,为瓦尔哈拉殿堂(Valhalla)收集阵亡的武士。
为项目取这个名字,一是因为《命运石之门》系列中冈部伦太郎的抵抗组织是这个名字,石头门为“瓦尔基里”附上了反抗的意味,这与我想表达的内容不谋而合。二是因为其本来的面貌:为瓦尔哈拉殿堂收集英灵,就像“订阅 / 关注”一样(笑)。当然,我的中二情结也是原因之一——上一个项目叫“诸神黄昏”(Rangarok),上上个项目叫“纳吉尔法”(Naglfar),都是北欧神话中的事物。
yarn
yarn start
熟悉 TypeScript 的可以看 API 示例,里面有各接口从输入到返回的完整的类型定义。至于如何与后端通信可以看请求模块示例。虽然这两个都是我的 react 版前端的一部分,但它们并不依赖 react,你可以将它们原封不动地搬到自己的项目中。
如果不熟悉 TypeScript,请看此,但文档仍在施工中,且部分过时。
yarn
yarn dev
src
├── api .............................. BiliBili 的 API
│ ├── getUperInfo.ts ............... 获取 up 主基本信息
│ └── getUperSpace.ts .............. 获取 up 主空间页面
├── app.ts ........................... express实例
├── controllers ...................... 控制器,存放较复杂的操作
│ ├── addVideos.ts ................. 获取并更新 up 主上传的视频
│ └── deleteSubscribe.ts ........... 删除订阅
├── errors ........................... 定义错误类型
│ ├── ConflictError.ts ............. 资源冲突
│ ├── InvalidMidError.ts ........... up 主 UID 不合法
│ ├── NotAllowedToSignUpError.ts ... 不允许注册
│ └── NotFoundError.ts ............. 未找到资源
├── index.ts ......................... 入口
├── middlewares ...................... 自定义中间件
│ └── errorHandler.ts .............. 错误处理中间件
├── models ........................... 存放 mongoose 模型
│ ├── Uper.ts ...................... Uper 模型
│ ├── User.ts ...................... User 模型
│ └── Video.ts ..................... Video 模型
├── routers .......................... 路由器
│ ├── biliAPIRouter.ts ............. 对 BiliBili API 进行去 CORS 暴露
│ ├── loginRouter.ts ............... 负责登录路由
│ ├── subscribeAddRemoveRouter.ts .. 负责订阅增删
│ ├── subscribeGetRouter.ts ........ 负责订阅查询
│ ├── subscribeUpdateRouter.ts ..... 负责订阅更新 / 查询更新
│ └── usersRouter.ts ............... 负责用户增改删查
├── tests ............................ 测试
│ ├── helper
│ │ ├── apiInstance.ts
│ │ ├── data
│ │ │ ├── upers.json
│ │ │ ├── users.json
│ │ │ └── videos.json
│ │ ├── dbRWhelper.ts
│ │ ├── initUsers.ts
│ │ ├── testdb_init.ts
│ │ ├── tokenStorage.ts
│ │ └── userUsedForTest.ts
│ ├── simulate_test.test.ts
│ ├── subscribe_add.test.ts
│ ├── subscribe_update.test.ts
│ └── user.test.ts
└── utils ............................ 杂项
├── expressJwtConstructor.ts ..... 构造 express-jwt 选项
├── getTokenFrom.ts .............. 从请求头中获取 Token
├── logger.ts .................... 记录器
├── rmDB.ts ...................... 一键删库
└── wait.ts ...................... Promisify 的 setTimeout() 函数
yarn test
也可以单独运行仿真测试,该测试以模拟服务过程的思路设计,覆盖面更广。
yarn test:sim