# 书籍API文档 ## 概述 这是一套基于SQLite数据库的书籍管理API,提供书籍列表、目录、页面内容查询等功能。 ## 快速开始 ### 1. 数据导入 首先需要将JSON数据导入到SQLite数据库: ```bash python import_book_data.py ``` 执行成功后,会在当前目录生成 `books.db` 文件。 ### 2. 启动应用 ```bash python app.py ``` 应用默认运行在 `http://localhost:7860` ## API端点 ### 基础信息 - **Base URL**: `http://localhost:7860/api/v2` - **返回格式**: JSON - **编码**: UTF-8 --- ### 1. 获取书籍列表 获取所有可用的书籍。 **请求** ``` GET /api/v2/books ``` **响应示例** ```json { "success": true, "count": 1, "books": [ { "book_id": 1, "book_name": "书籍ID 10242", "source_file": "book_10242.json", "total_pages": 64, "created_at": "2024-10-16 12:00:00", "updated_at": "2024-10-16 12:00:00" } ] } ``` --- ### 2. 获取书籍信息 获取指定书籍的详细信息。 **请求** ``` GET /api/v2/books/{book_id} ``` **参数** | 参数 | 类型 | 必需 | 说明 | |------|------|------|------| | book_id | int | 是 | 书籍ID | **响应示例** ```json { "success": true, "book": { "book_id": 1, "book_name": "书籍ID 10242", "source_file": "book_10242.json", "total_pages": 64, "created_at": "2024-10-16 12:00:00", "updated_at": "2024-10-16 12:00:00" } } ``` --- ### 3. 获取书籍目录 获取书籍的所有页面列表(目录)。 **请求** ``` GET /api/v2/books/{book_id}/catalog ``` **参数** | 参数 | 类型 | 必需 | 说明 | |------|------|------|------| | book_id | int | 是 | 书籍ID | **响应示例** ```json { "success": true, "book_id": 1, "book_name": "书籍ID 10242", "total_pages": 64, "catalog": [ { "page_id": 34428, "page_number": 55, "origin_img_url": "https://res-100200.kingsunedu.com/...", "encrypt_img_url": "https://res-100200.kingsunedu.com/..." }, { "page_id": 34429, "page_number": 56, "origin_img_url": "https://res-100200.kingsunedu.com/...", "encrypt_img_url": "https://res-100200.kingsunedu.com/..." } ] } ``` --- ### 4. 获取单页内容 获取指定页面的完整内容,包括所有文本片段、音频等。 **请求** ``` GET /api/v2/books/{book_id}/pages/{page_num} ``` **参数** | 参数 | 类型 | 必需 | 说明 | |------|------|------|------| | book_id | int | 是 | 书籍ID | | page_num | int | 是 | 页码 | **响应示例** ```json { "success": true, "book_id": 1, "book_name": "书籍ID 10242", "page": { "page_id": 34428, "page_number": 55, "origin_img_url": "https://res-100200.kingsunedu.com/...", "encrypt_img_url": "https://res-100200.kingsunedu.com/...", "piece_count": 15, "pieces": [ { "piece_id": 207349, "original": "Unit 1", "translation": "", "origin_sound_url": "https://res-100200.kingsunedu.com/...", "encrypt_sound_url": "https://res-100200.kingsunedu.com/...", "duration": 2, "coordinate": { "x": 0.1031, "y": 0.1281, "width": 0.0857, "height": 0.0277 }, "is_evaluated": 0, "show_translation": 1, "rich_original": "", "rich_translation": "" } ] } } ``` --- ### 5. 搜索内容 在书籍中搜索关键词。 **请求** ``` GET /api/v2/books/{book_id}/search?keyword={keyword}&limit={limit} ``` **参数** | 参数 | 类型 | 必需 | 说明 | |------|------|------|------| | book_id | int | 是 | 书籍ID | | keyword | string | 是 | 搜索关键词 | | limit | int | 否 | 返回结果数量(默认20) | **响应示例** ```json { "success": true, "book_id": 1, "keyword": "hello", "count": 3, "results": [ { "page_id": 34428, "page_number": 55, "piece_id": 207350, "original": "Hello, how are you?", "translation": "你好,你好吗?" } ] } ``` --- ### 6. 获取统计信息 获取书籍的统计数据。 **请求** ``` GET /api/v2/books/{book_id}/statistics ``` **参数** | 参数 | 类型 | 必需 | 说明 | |------|------|------|------| | book_id | int | 是 | 书籍ID | **响应示例** ```json { "success": true, "statistics": { "book_id": 1, "total_pages": 64, "total_pieces": 850, "total_audio": 820 } } ``` --- ## 错误响应 所有API在出错时返回统一格式: ```json { "success": false, "error": "错误信息描述" } ``` **常见错误码** - `400` - 请求参数错误 - `404` - 资源不存在 - `500` - 服务器内部错误 --- ## 使用示例 ### cURL ```bash # 获取书籍列表 curl http://localhost:7860/api/v2/books # 获取书籍目录 curl http://localhost:7860/api/v2/books/1/catalog # 获取第55页内容 curl http://localhost:7860/api/v2/books/1/pages/55 # 搜索内容 curl "http://localhost:7860/api/v2/books/1/search?keyword=hello&limit=10" # 获取统计信息 curl http://localhost:7860/api/v2/books/1/statistics ``` ### Python ```python import requests base_url = "http://localhost:7860/api/v2" # 获取书籍列表 response = requests.get(f"{base_url}/books") books = response.json() print(books) # 获取第55页内容 book_id = 1 page_num = 55 response = requests.get(f"{base_url}/books/{book_id}/pages/{page_num}") page_data = response.json() print(page_data) # 搜索 response = requests.get(f"{base_url}/books/{book_id}/search", params={ 'keyword': 'hello', 'limit': 10 }) search_results = response.json() print(search_results) ``` ### JavaScript ```javascript const baseUrl = 'http://localhost:7860/api/v2'; // 获取书籍列表 fetch(`${baseUrl}/books`) .then(response => response.json()) .then(data => console.log(data)); // 获取第55页内容 const bookId = 1; const pageNum = 55; fetch(`${baseUrl}/books/${bookId}/pages/${pageNum}`) .then(response => response.json()) .then(data => console.log(data)); // 搜索 fetch(`${baseUrl}/books/${bookId}/search?keyword=hello&limit=10`) .then(response => response.json()) .then(data => console.log(data)); ``` --- ## 数据库结构 ### books 表 - `book_id`: 书籍ID(主键) - `book_name`: 书籍名称 - `source_file`: 源文件名 - `total_pages`: 总页数 - `created_at`: 创建时间 - `updated_at`: 更新时间 ### pages 表 - `page_id`: 页面ID(主键) - `book_id`: 所属书籍ID(外键) - `page_number`: 页码 - `origin_img_url`: 原始图片URL - `encrypt_img_url`: 加密图片URL - `created_at`: 创建时间 ### pieces 表 - `piece_id`: 片段ID(主键) - `page_id`: 所属页面ID(外键) - `original`: 原文 - `translation`: 翻译 - `origin_sound_url`: 原始音频URL - `encrypt_sound_url`: 加密音频URL - `duration`: 音频时长 - `coordinate_x/y/width/height`: 坐标信息 - `is_evaluated`: 是否可评测 - `show_translation`: 是否显示翻译 - `rich_original`: 富文本原文 - `rich_translation`: 富文本翻译 - `created_at`: 创建时间 --- ## 注意事项 1. 首次使用前必须运行 `import_book_data.py` 导入数据 2. 数据库文件 `books.db` 会在导入时自动创建 3. 所有API响应都是UTF-8编码的JSON格式 4. 页码从实际页码开始(如本例中从55开始) 5. 音频URL有时效性,可能需要定期更新 --- ## 支持 如有问题,请查看日志文件 `logs/app.log`