Files
peoplelib/README.md
T
lofyerandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> b8c8d24107 feat: 完善本地书库与发布更新流程
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-28 21:55:16 +08:00

147 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PeopleLib
开放获取文献与图书的桌面客户端(Electron)。在一个界面里检索多个公开文献源,查看详情,下载文件并归入本地书库。
## 功能
- **多源检索**:12 个数据源统一的搜索、详情、下载流程
- **本地书库**:收藏条目、下载文件、封面缓存、阅读状态管理
- **全局代理**:一处配置,对所有数据源与封面请求生效
- **镜像故障转移**:镜像失效自动切换,恢复后自动重新启用
- **Z-Library 登录**:凭据本地保存,会话过期自动重新登录
- **版本更新**:手动或启动时检查 GitHub Releases,发现新版本后前往下载
## 数据源
| 源 | ID | 说明 |
|---|---|---|
| arXiv 论文 | `arxiv` | 预印本,支持全文检索 |
| Gutenberg 公版书 | `gutenberg` | 公共领域图书 |
| Open Library 图书 | `openlibrary` | 图书元数据与借阅入口 |
| DOAJ 开放期刊 | `doaj` | 开放获取期刊论文 |
| PMC 生物医学 | `pmc` | PubMed Central 全文 |
| bioRxiv 预印本 | `biorxiv` | 仅浏览最新列表,不支持关键词搜索 |
| Standard Ebooks | `standardebooks` | 精校排版的公版电子书 |
| Semantic Scholar | `semanticscholar` | 学术论文检索 |
| Memory of the World | `motw` | 公共图书馆藏书 |
| Library Genesis | `libgen` | 图书检索,下载需站点账号 |
| Z-Library | `zlib` | 需登录,可获取下载直链 |
| Sci-Hub(按 DOI | `scihub` | 按 DOI 查询 |
数据源的可用性取决于站点自身状态。部分站点(如 Sci-Hub)启用了人机验证,程序会给出明确提示而非静默失败。
## 下载与运行
正式版本仅通过 [GitHub Releases](https://github.com/lofyer/peoplelib/releases) 发布打包后的 Windows x64 二进制,不通过 npm 分发。
1. 下载最新版本的压缩包并完整解压。
2. 双击目录中的 `PeopleLib.exe`
3. 保留整个程序目录,不要只移动 exe。用户数据默认保存在程序同级的 `data/`
当前版本为 **1.1.0**。可在「设置」中手动检查更新,也可启用启动时自动检查。检测到新版本后,应用会打开对应的 GitHub Release 下载页,更新前请退出旧版本并覆盖程序文件,`data/` 目录无需替换。
## 源码运行与打包
源码开发需要 Node.js 18+
```bash
npm install
npm start
```
生成 Windows 免安装版到 `dist/`
```bash
npm run portable
```
发布时将完整的 `dist/PeopleLib-1.1.0/` 目录压缩,上传到 GitHub Release,并使用 `v1.1.0` 形式的版本标签。应用根据最新 Release 标签判断是否需要更新。
## 配置
### 代理
在应用内「设置」填写代理地址,例如 `http://127.0.0.1:7897`。留空表示直连。配置会持久化,重启后仍生效,并应用于所有数据源请求与封面加载。
网络受限环境下,多数数据源需要代理才能访问。
### Z-Library 账号
「设置」中填入邮箱与密码即可登录。登录后可获取下载直链(免费账号有每日下载额度限制)。
> 凭据以 base64 混淆后保存在本地 `zlib-auth.json`**这只是防止肉眼直读,不是加密**。请勿在不受信任的机器上使用。
## 数据位置
| 模式 | 路径 |
|---|---|
| 开发运行 | `%APPDATA%/PeopleLib`Windows |
| 打包运行 | 可执行文件同级的 `data/` 目录 |
该目录包含:
- `library.json` 书库索引
- `settings.json` 应用设置(代理等)
- `zlib-auth.json` Z-Library 凭据与会话
- `covers/` 封面缓存
## 项目结构
```
main.js 主进程:窗口、IPC、代理与证书处理、文件下载
preload.js 渲染进程 API 桥接
src/
settings.js 设置持久化
library/store.js 书库存储
sources/
index.js 数据源注册表
http.js 统一 HTTP 层:超时、Cookie、代理
mirror.js 镜像故障转移
zlib-auth.js Z-Library 凭据存储
<source>.js 各数据源实现
ui/ 渲染进程界面
```
### 数据源接口
每个数据源模块导出以下结构:
```js
module.exports = {
id: 'example',
name: '示例源',
supportsSearch: true,
async list(page) // 浏览:{ items, maxPage, page }
async search(keyword, page) // 搜索:{ items, maxPage, page }
async detail(postId) // 详情:{ title, authors, cover, tags, brief, links }
async download(postId) // 下载:{ files, links }
};
```
新增数据源只需实现该接口,并在 `src/sources/index.js` 中注册。
### 网络层说明
- 主进程使用 Electron 的 `net.fetch`(Chromium 网络栈),代理通过 `session.setProxy` 生效
- 纯 Node 环境回退到 undici `ProxyAgent`(Electron 下不启用,该组合存在兼容问题)
- 所有请求默认 15 秒超时,可按调用点覆盖
- 失效镜像进入 5 分钟冷却,之后自动重试,避免站点恢复后被永久跳过
- **应用启动时全局忽略 TLS 证书错误**。这是为了兼容大量使用自签名或过期证书的镜像站点,代价是失去对中间人攻击的防护,请仅在受信任的网络环境中使用。
## 测试
```bash
npx electron test-search.js --proxy http://127.0.0.1:7897
```
对主要数据源依次执行搜索、详情、下载链路,输出每一步耗时与结果。
## 免责声明
本项目仅是对公开网络接口的客户端封装,不托管、不分发任何内容。部分数据源所提供作品的版权状态因司法辖区而异,使用者需自行确保其使用方式符合当地法律与各站点的服务条款。
## 许可
MIT