Spaces:
Paused
Paused
| title: Notion2API Node.js | |
| emoji: 🚀 | |
| colorFrom: green | |
| colorTo: blue | |
| sdk: docker | |
| app_port: 7860 | |
| pinned: false | |
| # Notion API 轻量级客户端 | |
| 这个项目提供了一个轻量级的 Notion API 客户端,可以在资源受限的环境(如 Termux)中运行,无需完整的浏览器环境。 | |
| ## 特点 | |
| - 使用 `node-fetch` 代替 Playwright 浏览器自动化 | |
| - 轻量级设计,适合在移动设备和资源受限环境中运行 | |
| - 支持 Notion AI 的流式响应 | |
| - 兼容 OpenAI API 格式的请求和响应 | |
| ## 安装 | |
| ### 依赖项 | |
| 确保安装以下依赖: | |
| ```bash | |
| npm install | |
| ``` | |
| ### 环境变量 | |
| 创建 `.env` 文件,设置以下环境变量: | |
| ``` | |
| NOTION_COOKIE=your_notion_cookie_here | |
| NOTION_SPACE_ID=optional_space_id | |
| NOTION_ACTIVE_USER_HEADER=optional_user_id | |
| PROXY_URL=optional_proxy_url | |
| PROXY_AUTH_TOKEN=your_auth_token | |
| PORT=7860 | |
| ``` | |
| ## 使用方法 | |
| ### 启动服务 | |
| 运行轻量级服务器: | |
| ```bash | |
| npm start | |
| ``` | |
| 服务器将在指定端口(默认 7860)启动。 | |
| 如果需要使用原始的基于 Playwright 的版本(不推荐在 Termux 中使用): | |
| ```bash | |
| npm run original | |
| ``` | |
| ### API 端点 | |
| - `GET /v1/models` - 获取可用模型列表 | |
| - `POST /v1/chat/completions` - 聊天完成端点 | |
| - `GET /health` - 健康检查 | |
| ### 在 Termux 中运行 | |
| 1. 安装 Termux 和 Node.js: | |
| ```bash | |
| pkg update | |
| pkg install nodejs | |
| ``` | |
| 2. 克隆项目并安装依赖: | |
| ```bash | |
| git clone https://github.com/yourusername/notion2api-nodejs.git | |
| cd notion2api-nodejs | |
| npm install | |
| ``` | |
| 3. 设置环境变量并运行: | |
| ```bash | |
| npm start | |
| ``` | |
| ## 作为模块集成 | |
| 你也可以将轻量级客户端作为模块导入到你自己的项目中: | |
| ```javascript | |
| import { | |
| initialize, | |
| streamNotionResponse, | |
| buildNotionRequest, | |
| FETCHED_IDS_SUCCESSFULLY | |
| } from './lightweight-client.js'; | |
| // 初始化客户端 | |
| await initialize(); | |
| // 检查是否成功获取 Notion IDs | |
| if (FETCHED_IDS_SUCCESSFULLY) { | |
| // 构建请求 | |
| const requestData = { | |
| notion_model: "openai-gpt-4.1", | |
| messages: [ | |
| { role: "user", content: "你好,请介绍一下自己" } | |
| ] | |
| }; | |
| const notionRequestBody = buildNotionRequest(requestData); | |
| // 获取响应流 | |
| const stream = await streamNotionResponse(notionRequestBody); | |
| // 处理响应 | |
| stream.on('data', chunk => { | |
| console.log(chunk.toString()); | |
| }); | |
| } | |
| ``` | |
| ## 故障排除 | |
| - 如果无法获取 Notion IDs,请确保提供了有效的 NOTION_COOKIE | |
| - 对于网络问题,可以尝试设置 PROXY_URL | |
| - 查看日志输出以获取详细的错误信息 | |
| ## 依赖说明 | |
| - `node-fetch`: 用于发送 HTTP 请求 | |
| - `jsdom`: 提供 DOM API 的轻量级模拟 | |
| - `dotenv`: 加载环境变量 | |
| - `express`: Web 服务器框架 | |
| - `https-proxy-agent`: 支持 HTTPS 代理 | |
| ## Cookie管理功能 | |
| 本项目新增了Cookie管理功能,可以更方便地管理多个Notion Cookie,避免在.env文件中手动编辑长字符串。 | |
| ### 使用方法 | |
| #### 1. 通过文件管理Cookie | |
| 在项目根目录创建一个`cookies.txt`文件,每行一个完整的Cookie字符串: | |
| ``` | |
| cookie1_string_here | |
| cookie2_string_here | |
| cookie3_string_here | |
| ``` | |
| 然后在`.env`文件中设置: | |
| ``` | |
| COOKIE_FILE=cookies.txt | |
| ``` | |
| 系统启动时会自动从该文件加载Cookie。 | |
| #### 2. 使用Cookie管理工具 | |
| 项目提供了一个命令行工具来管理Cookie: | |
| ```bash | |
| # 使用npm脚本运行 | |
| npm run cookie | |
| # 或者全局安装后运行 | |
| npm link | |
| notion-cookie | |
| ``` | |
| 命令行工具支持以下功能: | |
| - `help`: 显示帮助信息 | |
| - `list`: 列出所有已加载的Cookie | |
| - `add`: 添加新的Cookie | |
| - `validate`: 验证所有Cookie的有效性 | |
| - `remove`: 删除指定的Cookie | |
| - `save`: 保存Cookie到文件 | |
| - `load`: 从文件加载Cookie | |
| - `exit`: 退出程序 | |
| ### Cookie轮询机制 | |
| 系统会自动轮询使用所有有效的Cookie,当一个Cookie返回401错误(未授权)时,会自动将其标记为无效并切换到下一个Cookie。这样可以提高系统的可靠性和可用性。 | |
| ### 文件格式支持 | |
| Cookie管理器支持两种文件格式: | |
| 1. 文本格式(.txt):每行一个Cookie | |
| 2. JSON格式(.json):包含Cookie数组的JSON文件 | |
| ```json | |
| { | |
| "cookies": [ | |
| "cookie1_string_here", | |
| "cookie2_string_here" | |
| ], | |
| "updatedAt": "2023-08-01T12:00:00.000Z", | |
| "count": 2 | |
| } | |
| ``` | |
| 或者简单的数组: | |
| ```json | |
| [ | |
| "cookie1_string_here", | |
| "cookie2_string_here" | |
| ] | |
| ``` |