🚗 API开发文档
emlog pro版本支持接口(API)调用功能,开发者可以通过调用API来和emlog系统进行交互。如:对接文章发布软件,实现自动发布文章;对接微信小程序,实现多样化的文章展示;对接浏览器插件实现更便捷的笔记发布功能等。详细接口说明请参看下文内容。
提示
该文档以最新版本emlog pro为基础编写,低版本可能不兼容,请先升级到最新版本,并在后台api设置页面开启api。
接口鉴权
(1)API秘钥鉴权:签名鉴权
- 请求方式:POST/GET
- 鉴权所需参数:
参数 | 是否必填 | 描述 |
---|---|---|
req_sign | 必填 | 接口签名,见下方计算签名规则 |
req_time | 必填 | Unix时间戳,php可使用time()函数获取,如:1651591816 |
计算签名规则
将 unix时间戳 和 API秘钥 拼接后进行md5加密,API秘钥,在后台系统-设置-API 设置页面可以找到
php代码示例:
$apikey = '******'; // API秘钥,在后台系统-设置-API 设置页面可以找到
$req_time = time(); // unix时间戳, 单位秒
$req_sign = md5($req_time . $apikey); // MD5签名
(2)API秘钥鉴权:免签名鉴权
使用简单,但是安全性不如签名鉴权,建议配合https使用
- 请求方式:POST/GET
- 鉴权所需参数:
参数 | 是否必填 | 描述 |
---|---|---|
api_key | 必填 | API秘钥,在后台系统-设置-API 设置页面可以找到 |
(3)cookie鉴权
请求需要附带用户登录emlog系统后的登录状态cookie,用来识别当前登录状态及登录用户。
// emlog登录状态cookie形如:
EM_AUTHCOOKIE_XXXXX=admin%7C0%7C2a12e9a651b7e44be3d2d3536f51eaaa; Path=/; HttpOnly;
API列表
用户登录
- 用户登录接口
- 接口URL:https://yourdomain/admin/account.php?action=dosignin
- 请求方式:POST
- 接口鉴权方式:无需鉴权
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
user | 必填 | 用户名、邮箱 |
pw | 必填 | 密码 |
persist | 否 | 记住我,保留登录状态(传值:1) |
login_code | 否 | 图片验证码 |
resp | 必填 | 传递字符串 "json" |
返回结果(同时附带登录成功cookie)
{
"code": 0,
"msg": "ok",
"data": ""
}
用户注册
- 用户注册接口
- 接口URL:https://yourdomain/admin/account.php?action=dosignup
- 请求方式:POST
- 接口鉴权方式:无需鉴权
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
必填 | 邮箱 | |
passwd | 必填 | 密码 |
repasswd | 必填 | 重复密码 |
login_code | 否 | 图片验证码 |
mail_code | 否 | 邮件验证码 |
resp | 必填 | 传递字符串 "json" |
返回结果
{
"code": 1,
"msg": "错误的邮箱格式",
"data": ""
}
找回密码:验证注册邮箱
- 找回密码:验证注册邮箱接口
- 接口URL:https://yourdomain/admin/account.php?action=doreset
- 请求方式:POST
- 接口鉴权方式:无需鉴权
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
必填 | 邮箱 | |
login_code | 否 | 图片验证码 |
resp | 必填 | 传递字符串 "json" |
返回结果
{
"code": 0,
"msg": "ok",
"data": ""
}
找回密码:重置密码
- 找回密码:重置密码接口
- 接口URL:https://yourdomain/admin/account.php?action=doreset2
- 请求方式:POST
- 接口鉴权方式:无需鉴权
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
mail_code | 是 | 邮件验证码 |
passwd | 必填 | 密码 |
repasswd | 必填 | 重复密码 |
resp | 必填 | 传递字符串 "json" |
返回结果
{
"code": 0,
"msg": "ok",
"data": ""
}
获取当前登录用户信息
- 获取当前登录用户信息接口
- 接口URL:https://yourdomain/?rest-api=userinfo
- 请求方式:GET
- 接口鉴权方式:【cookie鉴权】
- 返回格式:JSON
- 请求参数:无
返回结果
{
"code": 0,
"msg": "ok",
"data": {
"userinfo": {
"uid": "1",
"nickname": "emer",
"role": "admin",
"photo": "../content/uploadfile/202303/ad7b1678085402.jpg",
"email": "",
"description": "",
"ip": "172.18.0.1",
"create_time": "1677640065"
}
}
}
获取用户信息
- 获取当前登录用户信息接口
- 接口URL:https://yourdomain/?rest-api=user_detail
- 请求方式:GET
- 接口鉴权方式:【API秘钥鉴权】
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
id | 是 | 用户id |
返回结果
{
"code": 0,
"msg": "ok",
"data": {
"userinfo": {
"uid": 1,
"nickname": "emer",
"role": "admin",
"avatar": "http://localhost/content/uploadfile/202408/ad7b1723864764.jpg",
"description": "",
"create_time": 1723271947
}
}
}
修改用户信息
- 当前登录用户修改用户信息,以及修改密码接口
- 接口URL:https://yourdomain/admin/blogger.php?action=update
- 请求方式:POST
- 接口鉴权方式:【cookie鉴权】
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
name | 是 | 昵称 |
是 | 登录邮箱 | |
description | 否 | 个人说明 |
username | 否 | 登录用户名 |
newpass | 否 | 新的密码,修改密码时 传递 |
repeatpass | 否 | 重新输入新密码,修改密码时传递 |
返回结果
{
"code": 0,
"msg": "ok",
"data": ""
}
上传头像
- 用户上传头像接口
- 接口URL:https://yourdomain/admin/blogger.php?action=update_avatar
- 请求方式:POST
- 接口鉴权方式:【cookie鉴权】
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
image | 是 | 表单提交的图片, PHP 获取:$_FILES["image"] |
返回结果
{
"code": 0,
"msg": "ok",
"data": "..\/content\/uploadfile\/202310\/ad7b1696580183.jpg"
}
发布评论
- 发布评论接口
- 接口URL:https://yourdomain/index.php?action=addcom
- 请求方式:POST
- 接口鉴权方式:无需鉴权
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
gid | 必填 | 文章id |
comname | 必填 | 评论人名称 |
comment | 必填 | 评论内容 |
commail | 否 | 评论人邮箱 |
comurl | 否 | 评论人主页地址 |
avatar | 否 | 评论人头像图片 URL |
imgcode | 否 | 图片验证码 |
pid | 否 | 被回复评论ID |
resp | 必填 | 传递字符串 "json" |
返回结果
{
"code": 0,
"msg": "ok",
"data": {
"cid": 4
}
}
评论列表
- 获取文章的评论列表接口
- 接口URL:https://yourdomain/?rest-api=comment_list
- 请求方式:GET
- 接口鉴权方式:无需鉴权
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
id | 是 | 文章ID |
page | 否 | 评论分页,需后台设置开启评论分页功能 |
返回结果
{
"code": 0,
"msg": "ok",
"data": {
"comments": {
"1": {
"cid": "1",
"gid": "1",
"pid": "0",
"top": "n",
"poster": "snow",
"uid": "0",
"comment": "stay hungry stay foolish",
"mail": "",
"url": "",
"ip": "",
"agent": "",
"hide": "n",
"date": "57 分钟前",
"content": "stay hungry stay foolish",
"children": [],
"level": 0
}
},
"commentStacks": [],
"commentPageUrl": ""
}
}
评论列表-v2
- 获取文章的评论列表接口
- 接口URL:https://yourdomain/?rest-api=comment_list_simple
- 请求方式:GET
- 接口鉴权方式:无需鉴权
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
id | 是 | 文章id |
返回结果
{
"code": 0,
"msg": "ok",
"data": {
"comments": [
{
"cid": "1",
"gid": "1",
"pid": "0",
"top": "n",
"poster": "emlog",
"avatar": "http://localhost:8080/admin/views/images/avatar.svg",
"uid": "0",
"comment": "这是系统生成的演示评论",
"mail": "",
"url": "",
"ip": "",
"agent": "",
"hide": "n",
"date": "2024-09-28 22:06",
"content": "这是系统生成的演示评论",
"children": [
{
"cid": "2",
"gid": "1",
"pid": "1",
"top": "n",
"poster": "emer",
"avatar": "http://localhost:8080/",
"uid": "1",
"comment": "@emlog:这是测试评论",
"mail": "",
"url": "http://localhost:8080/",
"ip": "192.168.65.1",
"agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
"hide": "n",
"date": "3 秒前",
"content": "@emlog:这是测试评论",
"children": []
}
]
}
]
}
}
点赞
- 文章点赞接口
- 接口URL:https://yourdomain/index.php?action=addlike
- 请求方式:POST
- 接口鉴权方式:无需鉴权
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
gid | 是 | 文章id |
name | 否 | 点赞人名称 |
avatar | 否 | 点赞人头像图片 URL |
返回结果
{
"code": 0,
"msg": "ok",
"data": {
"id": 2
}
}
获赞列表
- 获取文章点赞列表
- 接口URL:https://yourdomain/?rest-api=like_list
- 请求方式:GET
- 接口鉴权方式:无需鉴权
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
id | 否 | 文章id |
返回结果
{
"code": 0,
"msg": "ok",
"data": {
"likes": [
{
"id": 1,
"gid": 1,
"poster": "snowsun",
"avatar": "https://oss.emlog.cn/avatar/avatar_y4LueUW71K3rIvxn.png?imageMogr2/thumbnail/200x",
"uid": 0,
"ip": "192.168.65.1",
"agent": "PostmanRuntime/7.41.2",
"date": "约 9 小时前"
}
]
}
}
文章发布
- 文章发布接口,可用 于对接文章发布软件
- 接口URL:https://yourdomain/?rest-api=article_post
- 请求方式:POST
- 接口鉴权方式:【API秘钥鉴权】 或者 【cookie鉴权】
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
title | 必填 | 文章标题 |
content | 必填 | 文章内容 |
excerpt | 否 | 文章摘要 |
cover | 否 | 文章封面 |
author_uid | 否 | 作者的用户ID,可在后台用户管理页面查看 |
sort_id | 否 | 文章分类ID,可在后台分类管理页面查看 |
tags | 否 | 文章标签,多个半角逗号分隔,如:PHP,MySQL |
draft | 否 | 是否发布为草稿,是y, 否n (默认为n) |
post_date | 否 | 发布时间,如:2022-05-03 23:30:16 |
field_keys[] | 否 | 自定义字段名称,如价格:price |
field_values[] | 否 | 自定义字段值,如价格的值:9.9 |
返回结果
{
"code": 0,
"msg": "ok",
"data": {
"article_id": 14
}
}
文章编辑
- 文章编辑接口
- 接口URL:https://yourdomain/?rest-api=article_update
- 请求方式:POST
- 接口鉴权方式:【API秘钥鉴权】 或者 【cookie鉴权】
- 返回格式:JSON
- 请求参数:
参数 | 是否必填 | 描述 |
---|---|---|
id | 必填 | 文章ID |
title | 必填 | 文章标题 |
content | 否 | 文章内容 |
excerpt | 否 | 文章摘要 |
cover | 否 | 文章封面 |
author_uid | 否 | 作者的用户ID,可在后台用户管理页面查看 |
sort_id | 否 | 文章分类ID,可在后台分类管理页面查看 |
tags | 否 | 文章标签,多个半角逗号分隔,如:PHP,MySQL |
draft | 否 | 是否发布为草稿,是y, 否n (默认为n) |
post_date | 否 | 发布时间,如:2022-05-03 23:30:16 |
返回结果
{
"code": 0,
"msg": "ok",
"data": ""
}