# 玩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开始)
可选参数:page_size=1-40|data含文章列表,区分`author`(作者)/`shareUser`(分享人,此时author为null),示例:
`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开始)
查询参数:cid=二级分类id
可选:page_size=1-40|data为文章列表,结构同首页文章列表|按知识分类查文章,cid为体系数据返回的二级id| |按作者搜文章|`/article/list/{页码}/json`|GET|路径参数:页码(从0开始)
查询参数:author=作者昵称
可选: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**开始)
查询参数:cid=分类id
可选:page_size=1-40|data为项目列表,含`id/title/desc/projectLink/envelopePic`等项目信息|按分类查项目,页码从1开始(区别于文章接口)| ## 六、登录/注册/退出API |接口名称|接口地址|请求方式|请求参数(POST Body/GET)|成功响应体示例|失败响应体示例(以登录为例)|核心说明| |---|---|---|---|---|---|---| |登录|`/user/login`|POST|Body(JSON):
{ "username": "你的账号", "password": "你的密码" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|`json { "data": null, "errorCode": -1, "errorMsg": "账号或密码错误" } `|登录后服务端返回Cookie,客户端需持久化存储| |注册|`/user/register`|POST|Body(JSON):
{ "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开始)
可选:page_size=1-40|data为收藏文章列表,含收藏id、原文章信息等|分页查询自己收藏的所有站内/站外文章| |收藏站内文章|`/lg/collect/{文章id}/json`|POST|路径参数:文章id(站内文章原始id)
Body:无|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|直接通过文章id收藏站内文章| |收藏站外文章|`/lg/collect/add/json`|POST|Body(JSON):
{ "title": "文章标题", "author": "作者", "link": "文章外链" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|手动添加站外文章到收藏,三个参数均为必传| |编辑收藏文章|`/lg/collect/user_article/update/{文章id}/json`|POST|路径参数:文章id(收藏的文章id)
Body(JSON):
{ "title": "新标题", "author": "新作者", "link": "新链接" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|**必须传全三个参数**,否则会将对应字段置空| |取消收藏(文章列表)|`/lg/uncollect_originId/{文章id}/json`|POST|路径参数:文章id(列表中原始文章id)
Body:无|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|从文章列表页取消收藏时使用| |取消收藏(我的收藏页)|`/lg/uncollect/{收藏id}/json`|POST|路径参数:收藏id(收藏列表的id)
Body(JSON):
{ "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):
{ "name": "网站名称", "link": "网站链接" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|添加开发网站到收藏,两个参数均为必传| |编辑收藏网站|`/lg/collect/updatetool/json`|POST|Body(JSON):
{ "id": 收藏网站id, "name": "新名称", "link": "新链接" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|编辑收藏的网站,id为必传,用于定位修改对象| |删除收藏网站|`/lg/collect/deletetool/json`|POST|Body(JSON):
{ "id": 收藏网站id }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|根据收藏网站id删除对应记录| ## 八、搜索API |接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明| |---|---|---|---|---|---| |文章搜索|`/article/query/{页码}/json`|POST|路径参数:页码(从0开始)
Body(JSON):
{ "k": "搜索关键词" }
可选:page_size=1-40|data为搜索结果文章列表,结构同首页文章列表|支持**多关键词**,用空格分隔(如k: "Android Java")| ## 九、积分相关API |接口名称|接口地址|请求方式|请求参数|成功响应体示例/核心说明|核心说明| |---|---|---|---|---|---| |积分排行榜|`/coin/rank/{页码}/json`|GET|路径参数:页码(从1开始)
可选: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开始)
可选:page_size=1-40(需登录)|data为积分获取记录列表,含`date/desc/coinCount`等字段|查自己的积分获取历史,需登录| ## 十、广场相关API(用户分享) |接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明| |---|---|---|---|---|---| |广场文章列表|`/user_article/list/{页码}/json`|GET|路径参数:页码(从0开始)
可选:page_size=1-40|data为广场文章列表,结构同首页文章列表,部分自见文章会被过滤|所有用户分享的审核通过文章列表| |分享人文章列表|`/user/{用户id}/share_articles/{页码}/json`|GET|路径参数:用户id、页码(从**1**开始)
可选:page_size=1-40|data含`coinInfo`(用户积分信息)+`shareArticles`(分享文章列表),示例见文档|查指定用户的审核通过分享文章,返回该用户积分+文章| |我的分享文章|`/user/lg/private_articles/{页码}/json`|GET|路径参数:页码(从**1**开始)
可选:page_size=1-40(需登录)|data为自己的分享文章列表,含未审核/已审核文章|查自己分享的所有文章,需登录| |删除我的分享|`/lg/user_article/delete/{文章id}/json`|POST|路径参数:文章id(自己分享的文章id)
Body:无(需登录)|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|删除自己分享的文章,需登录| |分享文章|`/lg/user_article/add/json`|POST|Body(JSON,需登录):
{ "title": "文章标题", "link": "文章链接" }|`json { "data": null, "errorCode": 0, "errorMsg": "" } `|分享文章到广场,CSDN/简书等外链直接审核通过,其他仅自己可见| ## 十一、问答相关API |接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明| |---|---|---|---|---|---| |问答列表|`/wenda/list/{pageId}/json`|GET|路径参数:pageId(从**1**开始)
可选: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**开始)
可选:page_size=1-40|data为已读消息列表,含消息`id/title/content/publishTime`等字段|分页查询已读消息,需登录| |未读消息列表|`/message/lg/unread_list/{页码}/json`|GET|路径参数:页码(从**1**开始)
可选:page_size=1-40|data为未读消息列表,结构同已读消息列表|**访问后所有未读消息标记为已读**,勿用于仅查询未读数量,需登录| ## 十四、公众号相关API |接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明| |---|---|---|---|---|---| |公众号列表|`/wxarticle/chapters/json`|GET|无|data为公众号数组,含`id/name`(id为公众号唯一标识)|返回收录的所有微信公众号列表| |公众号历史文章|`/wxarticle/list/{公众号id}/{页码}/json`|GET|路径参数:公众号id、页码(从**1**开始)
可选:page_size=1-40|data为该公众号的历史文章列表,结构同首页文章列表|按公众号查历史文章,页码从1开始| |公众号文章搜索|`/wxarticle/list/{公众号id}/{页码}/json`|GET|路径参数:公众号id、页码(从**1**开始)
查询参数:k=搜索关键词
可选:page_size=1-40|data为该公众号内的搜索结果文章列表,结构同首页文章列表|在指定公众号内搜索历史文章,k为搜索关键词| ## 十五、最新项目API |接口名称|接口地址|请求方式|请求参数|成功响应体核心说明/示例|核心说明| |---|---|---|---|---|---| |最新项目列表|`/article/listproject/{页码}/json`|GET|路径参数:页码(从0开始)
可选: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开始)
查询参数:cid=教程id&order_type=1
可选: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 生成)