# 诗词API接口文档 ## 概述 本文档描述了诗词应用的所有API接口,包括诗词推荐、搜索、点赞、统计等功能。 **基础URL**: `https://yy.vogov.cn/api/` --- ## 1. 诗词推荐接口 (`/pms.php`) ### 接口说明 提供诗词随机推荐、获取指定站点信息及点赞功能,支持朝代、标签多条件筛选。 **请求方式**: GET / POST 均可 **重要**: 只要接口成功返回 `data` 字段,即会自动增加该站点的浏览次数(日、月、总)。 ### 请求参数 | 参数 | 类型 | 必填 | 说明 | |------|------|------| | `lid` | int | 否 | 点赞ID。传入时直接对该站点执行点赞/取消点赞,返回更新后的信息,并增加浏览次数统计。此时忽略其他所有参数。 | | `id` | int | 否 | 站点ID。返回该站点的完整信息(不点赞),可与 `like` 组合实现同时点赞。 | | `like` | 标志 | 否 | 无值参数。若存在,则对本次请求返回的站点(通过 `id` 指定或随机推荐)执行点赞/取消点赞。可与 `id`、`dyn`、`tag` 组合。 | | `dyn` | string | 否 | 朝代,多个用英文逗号分隔,例如 `宋代,唐代`。条件为"或",即满足任一朝代。 | | `tag` | string | 否 | 标签,多个用英文逗号分隔,例如 `友情,柳树`。条件为"或",即满足任一标签。 | ### 优先级说明 - `lid` > `id` > 随机推荐。若同时提供 `lid` 和 `like`,`like` 无效(以 `lid` 为准)。 - 若不提供任何参数,则从全站随机返回一条。 - 若同时提供 `dyn` 和 `tag`,则取交集(必须同时满足朝代和标签条件)。 ### 返回格式 始终返回 JSON 格式,包含以下字段: | 字段 | 类型 | 说明 | |------|------|------| | `code` | int | 状态码:0 成功,非0 失败 | | `msg` | string | 提示信息(如"点赞成功"、"取消点赞"等) | | `data` | object | 站点完整信息 | ### data 对象字段说明 | 字段 | 类型 | 说明 | |------|------|------| | `id` | int | 站点ID | | `name` | string | 诗词名称/诗句 | | `alias` | string | 朝代 | | `keywords` | string | 标签(多个用逗号分隔) | | `introduce` | string | 译文/介绍 | | `drtime` | string | 原文 | | `like` | int | 点赞数 | | `url` | string | 诗人和<标题> | | `tui` | int | 是否推荐(1是0否) | | `star` | int | 星级 | | `hits_total` | int | 总浏览数 | | `hits_month` | int | 月浏览数 | | `hits_day` | int | 日浏览数 | | `date` | string | 最后统计日期(Y-m-d) | | `datem` | string | 最后统计月份(Y-m) | | `time` | string | 收录时间 | | `create_time` | string | 创建时间 | | `update_time` | string | 更新时间 | | …… | | 其他数据库字段均返回 | ### 示例请求 #### 1. 随机推荐(无参数) ``` GET /pms.php ``` #### 2. 随机推荐并点赞 ``` GET /pms.php?like ``` #### 3. 获取指定站点信息(id=5) ``` GET /pms.php?id=5 ``` #### 4. 获取指定站点信息并点赞(id=5 且 like) ``` GET /pms.php?id=5&like ``` #### 5. 按朝代筛选(宋代或唐代)并随机推荐 ``` GET /pms.php?dyn=宋代,唐代 ``` #### 6. 按朝代筛选并点赞(like 标志) ``` GET /pms.php?like&dyn=宋代 ``` #### 7. 按标签筛选(友情)并点赞 ``` GET /pms.php?like&tag=友情 ``` #### 8. 同时筛选(朝代=宋代 且 标签=友情)并点赞 ``` GET /pms.php?like&dyn=宋代&tag=友情 ``` #### 9. 直接点赞指定站点(lid=5) ``` POST /pms.php?lid=5 ``` ### 返回示例 ```json { "code": 0, "msg": "点赞成功", "data": { "id": 15572, "name": "良将不怯死以苟免,烈士不毁节以求生", "alias": "暂无朝代", "keywords": "三国志", "introduce": "优秀的将领不会畏惧死亡而苟且偷生,忠烈之士不会毁坏名节而求得生存。", "drtime": "(赏析)此句强调了人的尊严和信仰是不能被牺牲和放弃...", "like": 1, "tui": 0, "star": 4, "hits_total": 156, "hits_month": 12, "hits_day": 3, "date": "2026-03-21", "datem": "2026-03", "create_time": "2026-03-13 06:38:24", "update_time": "2026-03-13 21:03:58" } } ``` ### 注意事项 1. **浏览次数统计**:只要接口成功返回 data,该站点的日、月、总浏览次数均会 +1。 2. **朝代对应**:数据库字段 alias,标签对应 keywords(支持模糊匹配)。 3. **多个值分隔**:用英文逗号分隔,不要混用中文逗号。 4. **点赞/取消点赞**:基于 IP 进行限制,同一 IP 对同一站点切换状态。 5. **like 是无值参数**:只需在 URL 中包含 &like 或 ?like 即可,无需赋值。 6. **频率限制**:每个 IP 每秒最多请求 2 次,超出将返回 `{"code":429, "msg":"请求过于频繁,请稍后再试"}`。 7. **接口未做严格的频率限制**,但建议合理调用。 --- ## 2. 搜索接口 (`/searchs.php`) **Flutter 客户端**:`lib/utils/http/poetry_api.dart` 中 `PoetryApi.searchPoetry` 已对接本接口;全站搜索 UI 为 `lib/views/active/active_search_page.dart`。 ### 接口说明 提供诗词内容搜索功能,支持模糊搜索和精确搜索,多关键字搜索,以及自定义搜索字段。 **请求方式**: GET / POST 均可 ### 请求参数 | 参数 | 类型 | 必填 | 说明 | |------|------|------| | `q` | string | 否 | 搜索关键词 | | `field` | string | 否 | 搜索字段:name(标题), keywords(标签), introduce(译文) | | `page` | int | 否 | 页码,默认1 | | `limit` | int | 否 | 每页数量,默认20 | ### 返回格式 ```json { "code": 0, "msg": "搜索成功", "data": { "total": 156, "page": 1, "limit": 20, "list": [ { "id": 123, "name": "诗词标题", "alias": "唐代", "keywords": "友情,离别", "introduce": "译文内容...", "like": 25, "hits_total": 1024 } ] } } ``` ### 示例请求 #### 1. 基础搜索 ``` GET /searchs.php?q=李白 ``` #### 2. 按标题搜索 ``` GET /searchs.php?q=李白&field=name ``` #### 3. 分页搜索 ``` GET /searchs.php?q=爱情&page=2&limit=10 ``` --- ## 3. 朝代列表接口 (`/dyn.php`) ### 接口说明 获取所有可用的朝代列表。 **请求方式**: GET ### 返回格式 ```json { "code": 0, "msg": "success", "data": { "total": 8, "dynasties": [ "先秦", "汉代", "唐代", "宋代", "元代", "明代", "清代", "暂无朝代" ] } } ``` --- ## 4. 排行榜接口 (`/apilist.php`) ### 接口说明 获取诗词排行榜信息,包括点赞排行、浏览排行等。 **请求方式**: GET ### 请求参数 | 参数 | 类型 | 必填 | 说明 | |------|------|------| | `type` | string | 否 | 排行类型:like(点赞), hits(浏览) | | `period` | string | 否 | 时间周期:day(日), month(月), total(总) | | `limit` | int | 否 | 返回数量,默认10 | ### 返回格式 ```json { "code": 0, "msg": "success", "data": { "top_like": [ {"id": 123, "name": "诗词标题", "like": 156} ], "top_hits_day": [ {"id": 456, "name": "诗词标题", "hits_day": 89} ], "top_hits_month": [ {"id": 789, "name": "诗词标题", "hits_month": 456} ], "top_hits_total": [ {"id": 101, "name": "诗词标题", "hits_total": 2341} ] } } ``` --- ## 5. 网站统计接口 (`/stat.php`) ### 接口说明 获取网站整体统计信息。 **请求方式**: GET ### 返回格式 ```json { "code": 0, "msg": "网站统计", "data": { "build_time": "2026-03-13 06:38:24", "category": 25, "site": 1568, "apply": 45, "apply_reject": 12, "article": 89, "article_category": 8, "notice": 6, "link": 23, "top_hits_day": [ {"id": 123, "name": "诗词标题", "hits_day": 156} ], "top_hits_month": [ {"id": 456, "name": "诗词标题", "hits_month": 892} ], "top_hits_total": [ {"id": 789, "name": "诗词标题", "hits_total": 3456} ], "top_like": [ {"id": 101, "name": "诗词标题", "like": 234} ] } } ``` --- ## 通用说明 ### 错误码 | 错误码 | 说明 | |------|------| | 0 | 成功 | | -1 | 数据不存在或参数错误 | | 429 | 请求过于频繁 | | 500 | 服务器内部错误 | ### 通用响应格式 所有接口都遵循统一的响应格式: ```json { "code": 0, // 状态码 "msg": "success", // 提示信息 "data": {} // 具体数据,成功时返回 } ``` ### 开发建议 1. **错误处理**:检查 `code` 字段,非0时处理错误信息 2. **频率控制**:避免短时间内大量请求,建议每秒不超过2次 3. **缓存策略**:对于不常变化的数据(如朝代列表),建议本地缓存 4. **分页处理**:搜索接口支持分页,合理设置每页数量 5. **字段验证**:传入参数前进行基本验证 --- ## Flutter客户端使用示例 ### 使用HttpClient ```dart import 'package:your_app/utils/http/http_client.dart'; import 'package:your_app/utils/http/poetry_api.dart'; // 获取随机诗词 try { final response = await PoetryApi.getRandomPoetry(); print('诗词标题: ${response.data?.name}'); print('朝代: ${response.data?.alias}'); } catch (e) { print('获取失败: $e'); } // 按朝代获取 final response = await PoetryApi.getRandomPoetry(dynasty: '唐代'); // 搜索诗词 final searchResponse = await PoetryApi.searchPoetry('李白'); // 点赞 if (poetryData?.id != null) { await PoetryApi.toggleLike(poetryData!.id); } ``` ### 网络权限配置 确保在 `AndroidManifest.xml` 和 `module.json5` 中配置了网络权限: **Android**: ```xml ``` **鸿蒙**: ```json "requestPermissions": [ {"name": "ohos.permission.INTERNET"}, {"name": "ohos.permission.GET_NETWORK_INFO"} ] ``` --- *最后更新时间: 2026-03-21* *API版本: v1.0*