Skip to content

论坛帖子搜索接口

用于根据关键词搜索帖子,支持按分类、板块筛选,可指定搜索范围(标题、内容、标签等),包含分页查询及签名验证机制。

请求地址 GET / POST

http
https://nobase.cn/api/bbs/post_search

请求参数

参数名位置类型必选说明
appidquerystring✅ 是应用唯一标识,从开发者中心获取
keywordquerystring✅ 是搜索关键词,不可为空
signaturequerystring✅ 是应用签名,与后台配置一致,用于验证请求合法性
classquerystring❌ 否帖子分类,不填则不限制分类
uidquerystring❌ 否板块ID,不填则不限制板块
pagequeryint❌ 否页码,默认1(第一页)
limitqueryint❌ 否每页条数,默认10条
search_typequerystring❌ 否搜索范围,默认default;可选值:default(标题+内容)、title(仅标题)、content(仅内容)、label(仅标签)、username(仅用户名)

返回示例

成功响应(搜索到帖子)

json
{
  "code": 200,
  "msg": "success",
  "data": {
    "posts": [
      {
        "id": "3001",
        "username": "dev_user",
        "icon": "https://example.com/avatar/dev.png",
        "nickname": "开发爱好者",
        "title": "PHP数据库操作技巧",
        "content": "分享几个PHP操作MySQL的实用技巧...",
        "post_like": 18,
        "post_see": 245,
        "comment": 6,
        "label": "PHP,数据库",
        "classification": "技术",
        "uid": "board_tech",
        "other": "扩展信息",
        "release_time": "2025-10-17 09:15:00",
        "up_time": "2025-10-17 10:20:00"
      },
      // 更多帖子...
    ],
    "pagination": {
      "total": 32,
      "page": 1,
      "limit": 10,
      "totalPage": 4
    },
    "search_info": {
      "keyword": "PHP",
      "search_type": "default",
      "class": "技术",
      "uid": "all"
    }
  }
}

失败响应(参数问题)

json
{
  "code": 204,
  "msg": "fail",
  "data": "接口参数错误:缺少appid"
}
json
{
  "code": 204,
  "msg": "fail",
  "data": "接口参数错误:缺少搜索关键词keyword"
}

失败响应(无匹配结果)

json
{
  "code": 404,
  "msg": "fail",
  "data": "未找到匹配'Java'的帖子数据"
}

失败响应(签名/状态异常)

json
{
  "code": 402,
  "msg": "fail",
  "data": "用户访问被限制:签名校验失败!"
}
json
{
  "code": 404,
  "msg": "fail",
  "data": "应用审核中!"
}
json
{
  "code": 407,
  "msg": "fail",
  "data": "该板块不存在!"
}

返回数据结构

参数名类型说明
codenumber状态码:200=搜索成功;204=参数缺失/错误;402=签名失败;404=资源不存在/状态异常/无匹配结果;407=板块不存在/应用配置不存在
msgstring状态描述:success=成功,fail=失败
dataobject/string响应数据:成功时为包含搜索结果的对象;失败时为错误原因字符串

data.posts 字段说明(帖子列表)

字段名类型说明
idstring帖子唯一标识
usernamestring发帖用户账号
iconstring用户头像URL
nicknamestring用户昵称
titlestring帖子标题
contentstring帖子内容
post_likenumber帖子点赞数
post_seenumber帖子浏览量
commentnumber帖子评论数
labelstring帖子标签,多标签用逗号分隔
classificationstring帖子分类
uidstring帖子所属板块ID
otherstring附加信息
release_timestring发布时间(格式:YYYY-MM-DD HH:MM:SS)
up_timestring最后更新时间(格式:YYYY-MM-DD HH:MM:SS)

data.pagination 字段说明(分页信息)

字段名类型说明
totalnumber匹配搜索条件的帖子总条数
pagenumber当前页码
limitnumber每页条数
totalPagenumber总页数(ceil(total/limit))

data.search_info 字段说明(搜索条件)

字段名类型说明
keywordstring搜索关键词
search_typestring搜索范围类型
classstring筛选的分类(all表示不限制)
uidstring筛选的板块(all表示不限制)

代码示例

javascript
// 搜索关键词“教程”,限制分类为“技术”
const params = new URLSearchParams({
  appid: "your_app_id",
  keyword: "教程",
  class: "技术",
  search_type: "default", // 默认搜索标题+内容
  page: 1,
  limit: 15,
  signature: "your_signature"
});

fetch("https://nobase.cn/api/bbs/post_search", {
  method: "POST",
  body: params,
  headers: { "Content-Type": "application/x-www-form-urlencoded" }
})
.then(res => res.json())
.then(res => {
  if (res.code === 200) {
    console.log("搜索结果:", res.data.posts);
    console.log("分页信息:", res.data.pagination);
    console.log("搜索条件:", res.data.search_info);
  } else {
    console.error("搜索失败:", res.data);
  }
});
python
import requests

# 搜索标签包含“Python”的帖子,不限制板块和分类
params = {
    "appid": "your_app_id",
    "keyword": "Python",
    "search_type": "label",  # 仅搜索标签
    "page": 2,
    "limit": 10,
    "signature": "your_signature"
}

response = requests.get(
    "https://nobase.cn/api/bbs/post_search",
    params=params,
    timeout=8
)
res_data = response.json()
if res_data["code"] == 200:
    print(f"找到{res_data['data']['pagination']['total']}条结果:", res_data["data"]["posts"])
else:
    print("搜索错误:", res_data["data"])

核心逻辑说明

1. 验证流程

  1. 参数校验:检查appidkeywordsignature是否存在,缺失则返回204错误;
  2. 应用与开发者校验:通过appid查询应用信息,验证开发者账号的存在性及匹配性,不存在或不匹配返回404;
  3. 签名校验:结合请求参数及动态获取的开发者标识验证signature,失败返回402;
  4. 状态校验
    • 开发者账号状态需为“正常”,应用不可处于“停用”或“审核中”状态;
    • 开发者VIP未逾期,否则返回逾期提示(如“已逾期(1天)”)。

2. 搜索规则

  • 基础筛选:仅搜索状态为“正常”(state=1)或“直接发布”(state=4)的帖子;
  • 条件组合
    • 若传递class,仅返回该分类下的帖子;
    • 若传递uid,仅返回该板块下的帖子(需验证板块存在性,否则返回407);
  • 搜索范围:根据search_type决定匹配字段:
    • default:匹配标题或内容(模糊搜索);
    • title:仅匹配标题(模糊搜索);
    • content:仅匹配内容(模糊搜索);
    • label:仅匹配标签(模糊搜索);
    • username:仅匹配发帖用户名(模糊搜索);
  • 分页处理:通过pagelimit计算起始位置((page-1)*limit),默认按ID正序排列。

3. 结果返回逻辑

  • 成功时返回包含posts(匹配的帖子列表)、pagination(分页信息)和search_info(搜索条件)的对象;
  • 无匹配结果时返回“未找到匹配'关键词'的帖子数据”(404状态);
  • 帖子列表包含完整信息(所属板块、分类、互动数据等),便于前端展示筛选条件。

注意事项

  1. 参数规范

    • keyword不可为空或仅含空白字符,建议前端做长度限制(如1-50字符);
    • search_type仅支持指定值,传入其他值将自动按default处理;
    • 分页参数pagelimit需为正整数,否则使用默认值。
  2. 搜索性能

    • 大范围搜索(不限制classuid)可能耗时较长,建议前端添加加载状态提示;
    • 频繁搜索相同关键词时,可考虑前端缓存结果,减少接口调用。
  3. 模糊搜索规则

    • 所有搜索均为模糊匹配(关键词前后自动加通配符),如搜索“PHP”会匹配“PHP教程”“学PHP”等;
    • 标签搜索匹配整个标签(如标签“PHP,教程”可匹配关键词“PHP”或“教程”)。
  4. 权限限制

    • 接口仅返回当前应用及所属开发者下的帖子,无法跨应用搜索;
    • uid指定的板块不属于当前应用,将返回“该板块不存在”(407状态)。
  5. 扩展说明

    • search_info字段可用于前端展示当前搜索条件,方便用户调整筛选参数;
    • 如需精确匹配(而非模糊搜索),需额外开发定制逻辑。