Files
nanocode/wanandroid/wanapi.md
T
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

153 lines
16 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.
# 玩Android 开放API 完整整理(Markdown版)
**Base URL**:`https://www.wanandroid.com`
**通用返回格式**:所有接口统一返回如下结构,`errorCode`为核心判断依据
```JSON
{
"data": Object, // 业务数据,接口不同结构不同
"errorCode": 0, // 0=成功 / -1=普通错误 / -1001=登录失效
"errorMsg": "" // 错误信息,errorCode非0时非空
}
```
**开发通用注意**:
1. 页码:早期接口从0开始,后期从1开始,按各接口说明遵循;
2. 分页:支持`page_size`(取值1-40),一旦传入后续分页必须携带,否则读取错误;
3. 登录态:需登录接口依赖Cookie持久化,登录后服务端返回Cookie,客户端存储即可;
4. 空值处理:除标题、链接外,其他字段均可能为null,App需做兼容;
5. POST接口:建议先通过Postman模拟调试,再接入代码。
## 一、2024-05-26 新增API
|接口名称|接口地址|请求方式|请求参数|成功响应体示例|核心说明|
|---|---|---|---|---|---|
|鸿蒙专栏|`/harmony/index/json`|GET|无|`json { "data": { "links": {}, "open_sources": {}, "tools": {} }, "errorCode": 0, "errorMsg": "" } `|返常用链接/开源/工具,复用Chapter/Article Bean|
|首页热门-问答|`/popular/wenda/json`|GET|无|复用Chapter Bean结构,errorCode=0,data为问答列表|首页最受欢迎问答板块|
|首页热门-专栏|`/popular/column/json`|GET|无|复用Chapter Bean结构,errorCode=0,data为专栏列表|首页最受欢迎专栏板块|
|首页热门-路线|`/popular/route/json`|GET|无|复用Chapter Bean结构,errorCode=0,data为学习路线列表|首页最受欢迎学习路线|
## 二、首页相关API
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|首页文章列表|`/article/list/{页码}/json`|GET|路径参数:页码(从0开始)<br>可选参数:page_size=1-40|data含文章列表,区分`author`(作者)/`shareUser`(分享人,此时author为null),示例:<br>`json { "data": { "curPage":1, "datas": [{ "title":"xxx", "author":"xxx", "shareUser":null }] }, "errorCode":0, "errorMsg":"" } `|支持分页,注意`superChapterId`为一级分类第一个子类id|
|首页Banner|`/banner/json`|GET|无|data为Banner数组,含`id/title/url/imagePath`等字段|首页轮播图数据|
|常用网站|`/friend/json`|GET|无|data为网站数组,含`id/name/link/desc`等字段|开发常用网站导航|
|搜索热词|`/hotkey/json`|GET|无|data为热词数组,含`id/name`字段(name为搜索关键词)|当前搜索量最高的关键词列表|
|置顶文章|`/article/top/json`|GET|无|data为置顶文章数组,结构同首页文章列表|首页所有置顶文章|
## 三、体系相关API(知识分类)
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|体系数据|`/tree/json`|GET|无|data为二级体系数组,含一级分类`id/name`+二级子分类`children`(子分类含`id/name`),示例见文档|返回知识体系二级结构,子分类id用于查文章|
|体系下的文章|`/article/list/{页码}/json`|GET|路径参数:页码(从0开始)<br>查询参数:cid=二级分类id<br>可选:page_size=1-40|data为文章列表,结构同首页文章列表|按知识分类查文章,cid为体系数据返回的二级id|
|按作者搜文章|`/article/list/{页码}/json`|GET|路径参数:页码(从0开始)<br>查询参数:author=作者昵称<br>可选:page_size=1-40|data为该作者的文章列表,结构同首页文章列表|author为**精确昵称**,不支持模糊匹配|
## 四、导航相关API
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|导航数据|`/navi/json`|GET|无|data为导航分类数组,含`id/name/articles`(articles为对应链接列表)|开发导航分类及对应链接,含分类+子链接|
## 五、项目相关API
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|项目分类|`/project/tree/json`|GET|无|data为项目分类数组,含`id/name`(id为分类唯一标识),示例见文档|返回所有项目分类,分类id用于查对应项目列表|
|项目列表|`/project/list/{页码}/json`|GET|路径参数:页码(从**1**开始)<br>查询参数:cid=分类id<br>可选:page_size=1-40|data为项目列表,含`id/title/desc/projectLink/envelopePic`等项目信息|按分类查项目,页码从1开始(区别于文章接口)|
## 六、登录/注册/退出API
|接口名称|接口地址|请求方式|请求参数(POST Body/GET)|成功响应体示例|失败响应体示例(以登录为例)|核心说明|
|---|---|---|---|---|---|---|
|登录|`/user/login`|POST|Body(JSON):<br>{ "username": "你的账号", "password": "你的密码" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|`json { "data": null, "errorCode": -1, "errorMsg": "账号或密码错误" } `|登录后服务端返回Cookie,客户端需持久化存储|
|注册|`/user/register`|POST|Body(JSON):<br>{ "username": "账号", "password": "密码", "repassword": "确认密码" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|`json { "data": null, "errorCode": -1, "errorMsg": "用户名已存在" } `|三次参数均为必传,密码需一致|
|退出|`/user/logout/json`|GET|无|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|`json { "data": null, "errorCode": -1001, "errorMsg": "未登录" } `|服务端设置Cookie Max-Age=0,客户端需清理本地账号密码|
## 七、收藏相关API(均需登录,Cookie持久化)
|接口名称|接口地址|请求方式|请求参数(POST Body/GET)|成功响应体示例|核心说明|
|---|---|---|---|---|---|
|收藏文章列表|`/lg/collect/list/{页码}/json`|GET|路径参数:页码(从0开始)<br>可选:page_size=1-40|data为收藏文章列表,含收藏id、原文章信息等|分页查询自己收藏的所有站内/站外文章|
|收藏站内文章|`/lg/collect/{文章id}/json`|POST|路径参数:文章id(站内文章原始id)<br>Body:无|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|直接通过文章id收藏站内文章|
|收藏站外文章|`/lg/collect/add/json`|POST|Body(JSON):<br>{ "title": "文章标题", "author": "作者", "link": "文章外链" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|手动添加站外文章到收藏,三个参数均为必传|
|编辑收藏文章|`/lg/collect/user_article/update/{文章id}/json`|POST|路径参数:文章id(收藏的文章id)<br>Body(JSON):<br>{ "title": "新标题", "author": "新作者", "link": "新链接" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|**必须传全三个参数**,否则会将对应字段置空|
|取消收藏(文章列表)|`/lg/uncollect_originId/{文章id}/json`|POST|路径参数:文章id(列表中原始文章id)<br>Body:无|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|从文章列表页取消收藏时使用|
|取消收藏(我的收藏页)|`/lg/uncollect/{收藏id}/json`|POST|路径参数:收藏id(收藏列表的id)<br>Body(JSON):<br>{ "originId": 原文章id(无则为-1)}|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|从我的收藏页取消收藏时使用,originId为原文章id,无则传-1|
|收藏网站列表|`/lg/collect/usertools/json`|GET|无|data为收藏网站数组,含`id/name/link`等字段|查询自己收藏的开发网站|
|收藏网址|`/lg/collect/addtool/json`|POST|Body(JSON):<br>{ "name": "网站名称", "link": "网站链接" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|添加开发网站到收藏,两个参数均为必传|
|编辑收藏网站|`/lg/collect/updatetool/json`|POST|Body(JSON):<br>{ "id": 收藏网站id, "name": "新名称", "link": "新链接" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|编辑收藏的网站,id为必传,用于定位修改对象|
|删除收藏网站|`/lg/collect/deletetool/json`|POST|Body(JSON):<br>{ "id": 收藏网站id }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|根据收藏网站id删除对应记录|
## 八、搜索API
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|文章搜索|`/article/query/{页码}/json`|POST|路径参数:页码(从0开始)<br>Body(JSON):<br>{ "k": "搜索关键词" }<br>可选:page_size=1-40|data为搜索结果文章列表,结构同首页文章列表|支持**多关键词**,用空格分隔(如k: "Android Java")|
## 九、积分相关API
|接口名称|接口地址|请求方式|请求参数|成功响应体示例/核心说明|核心说明|
|---|---|---|---|---|---|
|积分排行榜|`/coin/rank/{页码}/json`|GET|路径参数:页码(从1开始)<br>可选:page_size=1-40|data为排行榜列表,含用户`id/name/coinCount`(积分)/`rank`(排名)|公开的用户积分排名,无需登录|
|个人积分信息|`/lg/coin/userinfo/json`|GET|无(需登录)|`json { "data": { "coinCount": 451, "rank": 7, "userId": 2, "username": "xxx" }, "errorCode": 0, "errorMsg": "" } `|查自己的总积分、当前排名,需登录|
|个人积分列表|`/lg/coin/list/{页码}/json`|GET|路径参数:页码(从1开始)<br>可选:page_size=1-40(需登录)|data为积分获取记录列表,含`date/desc/coinCount`等字段|查自己的积分获取历史,需登录|
## 十、广场相关API(用户分享)
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|广场文章列表|`/user_article/list/{页码}/json`|GET|路径参数:页码(从0开始)<br>可选:page_size=1-40|data为广场文章列表,结构同首页文章列表,部分自见文章会被过滤|所有用户分享的审核通过文章列表|
|分享人文章列表|`/user/{用户id}/share_articles/{页码}/json`|GET|路径参数:用户id、页码(从**1**开始)<br>可选:page_size=1-40|data含`coinInfo`(用户积分信息)+`shareArticles`(分享文章列表),示例见文档|查指定用户的审核通过分享文章,返回该用户积分+文章|
|我的分享文章|`/user/lg/private_articles/{页码}/json`|GET|路径参数:页码(从**1**开始)<br>可选:page_size=1-40(需登录)|data为自己的分享文章列表,含未审核/已审核文章|查自己分享的所有文章,需登录|
|删除我的分享|`/lg/user_article/delete/{文章id}/json`|POST|路径参数:文章id(自己分享的文章id)<br>Body:无(需登录)|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|删除自己分享的文章,需登录|
|分享文章|`/lg/user_article/add/json`|POST|Body(JSON,需登录):<br>{ "title": "文章标题", "link": "文章链接" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|分享文章到广场,CSDN/简书等外链直接审核通过,其他仅自己可见|
## 十一、问答相关API
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|问答列表|`/wenda/list/{pageId}/json`|GET|路径参数:pageId(从**1**开始)<br>可选:page_size=1-40|data为问答列表,含`id/title/author/answerCount`(回答数)/`publishTime`等字段|全站问答列表,页码从1开始|
|问答评论列表|`/wenda/comments/{问答id}/json`|GET|路径参数:问答id(从问答列表获取)|data为评论列表,含`id`(评论id,用于回复/删除)/`content/author/zanCount`等字段|默认按点赞倒序,登录后本人评论置顶|
## 十二、个人信息API(需登录)
|接口名称|接口地址|请求方式|请求参数|成功响应体示例|核心说明|
|---|---|---|---|---|---|
|个人信息详情|`/user/lg/userinfo/json`|GET|无|见文档完整示例,含`coinInfo`(积分/等级/排名)+`userInfo`(昵称/邮箱/收藏id/用户名等)|积分排名**非实时**(每日更新),返回收藏id列表、用户基础信息|
## 十三、站内消息API(均需登录)
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|未读消息数量|`/message/lg/count_unread/json`|GET|无|data为未读消息数(数字类型),errorCode=0|仅返回未读数量,不改变消息状态|
|已读消息列表|`/message/lg/readed_list/{页码}/json`|GET|路径参数:页码(从**1**开始)<br>可选:page_size=1-40|data为已读消息列表,含消息`id/title/content/publishTime`等字段|分页查询已读消息,需登录|
|未读消息列表|`/message/lg/unread_list/{页码}/json`|GET|路径参数:页码(从**1**开始)<br>可选:page_size=1-40|data为未读消息列表,结构同已读消息列表|**访问后所有未读消息标记为已读**,勿用于仅查询未读数量,需登录|
## 十四、公众号相关API
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|公众号列表|`/wxarticle/chapters/json`|GET|无|data为公众号数组,含`id/name`(id为公众号唯一标识)|返回收录的所有微信公众号列表|
|公众号历史文章|`/wxarticle/list/{公众号id}/{页码}/json`|GET|路径参数:公众号id、页码(从**1**开始)<br>可选:page_size=1-40|data为该公众号的历史文章列表,结构同首页文章列表|按公众号查历史文章,页码从1开始|
|公众号文章搜索|`/wxarticle/list/{公众号id}/{页码}/json`|GET|路径参数:公众号id、页码(从**1**开始)<br>查询参数:k=搜索关键词<br>可选:page_size=1-40|data为该公众号内的搜索结果文章列表,结构同首页文章列表|在指定公众号内搜索历史文章,k为搜索关键词|
## 十五、最新项目API
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|最新项目列表|`/article/listproject/{页码}/json`|GET|路径参数:页码(从0开始)<br>可选:page_size=1-40|data为最新项目列表,结构同项目列表接口|按时间分页展示所有项目,首页第二个Tab数据,页码从0开始|
## 十六、工具/教程相关API
|接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明|
|---|---|---|---|---|---|
|开发工具列表|`/tools/list/json`|GET|无|data为开发工具数组,含工具名称、链接、说明等字段|工具详情页**未适配移动端**,App展示需注意|
|教程列表|`/chapter/547/sublist/json`|GET|无(547为固定值)|data为教程合集数组,含`id/name/author/desc/cover`等(id为教程唯一标识),示例见文档|返回收录的教程合集(如阮一峰C语言/HTML教程),教程id用于查对应文章|
|单个教程文章|`/article/list/{页码}/json`|GET|路径参数:页码(从0开始)<br>查询参数:cid=教程id&order_type=1<br>可选:page_size=1-40|data为教程文章列表,结构同首页文章列表,正序展示(保持教程目录结构)|`order_type=1`强制正序,cid为教程列表返回的id,文章详情页适配移动端|
## 十七、待办工具API(TODO)
官方推荐使用 **玩Android TODO Open API v2**(老接口仍支持,不推荐),所有接口**均需登录**(Cookie持久化),具体参数/响应体参考官方v2文档,核心说明:
1. 支持待办的增、删、改、查、标记完成/未完成;
2. 分页规则、返回格式与上述接口保持一致;
3. 需注意待办的`type`(类型)、`status`(状态)字段传参规范。
我可以帮你将这份Markdown格式的API列表保存为**独立的.md文件**,方便你开发时直接下载、复制和查阅,需要吗?
> (注:文档部分内容可能由 AI 生成)