小红书热搜 API (V1)
接口健康状态
健康 可用 少量可用 基本不可用 暂无数据
正在加载健康状态…
支持使用文档列出的请求参数获取小红书热搜数据。适用于需要小红书热搜数据的应用场景。
能力与响应契约
契约状态: pending — 缺少充分验证的响应证据
使用场景
- 适用于获取小红书热搜数据。
请求参数
| 参数名 | 位置 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
token | query | string | 是 | - | 此 API 服务的访问令牌。 |
searchWord | query | string | 否 | | 搜索关键词。 |
pageNum | query | integer | 否 | 1 | 用于分页的页码。 |
orderBy | query | string | 否 | premium_imp_num | 结果集的排序指标。 可用值: - premium_imp_num:曝光量- premium_good_read_rate:阅读率- premium_read_num:阅读数- premium_engage_num:互动数- premium_engage_rate:互动率- premium_like_num:点赞数- premium_fav_num:收藏数- premium_cmt_num:评论数 |
nd | query | string | 否 | DAY_7 | 时间范围(天)。 可选值: - DAY_3:最近3天- DAY_7:最近7天- DAY_14:最近14天- DAY_30:最近30天 |
代码示例
💡 环境说明
默认使用 https://api.justoneapi.com;可选 http://47.117.133.51:30015。
bash
curl --max-time 120 -X GET 'https://api.justoneapi.com/api/xiaohongshu/hot-search/v1?token=YOUR_API_KEY'text
我想使用 Just One API 提供的“热搜 (V1)”接口。
接入地址: 默认使用 https://api.justoneapi.com;中国大陆用户也可以改用 http://47.117.133.51:30015。
接口路径: /api/xiaohongshu/hot-search/v1?token=YOUR_API_KEY
接口地址: BASE_URL + /api/xiaohongshu/hot-search/v1?token=YOUR_API_KEY
HTTP 方法: GET
身份验证: 在 URL 中传入 token 查询参数。
OpenAPI 定义: https://docs.justoneapi.com/openapi/xiaohongshu-rednote/hot-search-v1-zh.json
请求参数说明:
- token (query): 此 API 服务的访问令牌。 (必填)
- searchWord (query): 搜索关键词。
- pageNum (query): 用于分页的页码。
- orderBy (query): 结果集的排序指标。
可用值:
- `premium_imp_num`:曝光量
- `premium_good_read_rate`:阅读率
- `premium_read_num`:阅读数
- `premium_engage_num`:互动数
- `premium_engage_rate`:互动率
- `premium_like_num`:点赞数
- `premium_fav_num`:收藏数
- `premium_cmt_num`:评论数
- nd (query): 时间范围(天)。
可选值:
- `DAY_3`:最近3天
- `DAY_7`:最近7天
- `DAY_14`:最近14天
- `DAY_30`:最近30天
返回格式: 请根据实际 Content-Type 安全处理 JSON 或文本响应。
响应处理与错误码:
1. 需通过返回体中的 "code" 字段判断业务结果(code 为 0 表示成功)。
2. 超时建议:建议将请求超时时间设置为 120 秒;如果 120 秒偏长,请至少设置为 60 秒,但可能会有少量请求因超时而未接收到结果。
3. 业务码说明:
- 0: 成功
- 100: Token 无效或已失效
- 301: 采集失败,请重试
- 302: 超出速率限制
- 303: 超出每日配额
- 400: 参数错误
- 500: 内部服务器错误
- 600: 权限不足
- 601: 账户余额不足
- 602: TOKEN 限额超限
4. code 601 表示账户共享余额不足。code 602 表示当前 API TOKEN 自身的累计消费上限已达到。TOKEN 限额不是资金划拨,多个 TOKEN 仍共享同一个账户余额。
请帮我用我擅长的编程语言写一个脚本来调用这个接口,并处理返回结果。python
import requests
BASE_URL = "https://api.justoneapi.com" # 可选服务器: "http://47.117.133.51:30015"
url = BASE_URL + "/api/xiaohongshu/hot-search/v1?token=YOUR_API_KEY"
response = requests.get(url, timeout=120)
print(response.status_code)
if response.content:
content_type = response.headers.get("content-type", "").lower()
if "json" in content_type:
try:
print(response.json())
except ValueError:
print(response.text)
elif content_type.startswith("text/") or "xml" in content_type or content_type.split(";", 1)[0].strip() in {"application/javascript", "application/x-www-form-urlencoded", "application/graphql"}:
print(response.text)
else:
with open("response.bin", "wb") as output:
output.write(response.content)
print(f"Saved {len(response.content)} bytes to response.bin")js
const BASE_URL = "https://api.justoneapi.com"; // 可选服务器: "http://47.117.133.51:30015"
const url = BASE_URL + "/api/xiaohongshu/hot-search/v1?token=YOUR_API_KEY";
const response = await fetch(url, {
method: "GET",
signal: AbortSignal.timeout(120000)
});
console.log(response.status);
const responseBytes = await response.arrayBuffer();
if (responseBytes.byteLength) {
const contentType = (response.headers.get("content-type") || "").toLowerCase();
const mediaType = contentType.split(";", 1)[0].trim();
const textual = contentType.startsWith("text/") || contentType.includes("json") || contentType.includes("xml") || ["application/javascript", "application/x-www-form-urlencoded", "application/graphql"].includes(mediaType);
if (textual) {
const responseText = new TextDecoder().decode(responseBytes);
let data = responseText;
if (contentType.includes("json")) {
try { data = JSON.parse(responseText); } catch { /* Keep the raw body. */ }
}
console.log(data);
} else {
console.log(`Received ${responseBytes.byteLength} binary bytes`);
}
}java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
public class Main {
public static void main(String[] args) throws Exception {
final String BASE_URL = "https://api.justoneapi.com"; // 可选服务器: "http://47.117.133.51:30015"
final String url = BASE_URL + "/api/xiaohongshu/hot-search/v1?token=YOUR_API_KEY";
HttpClient client = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(120)).build();
HttpRequest.Builder builder = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(120))
.method("GET", HttpRequest.BodyPublishers.noBody());
HttpRequest request = builder.build();
HttpResponse<byte[]> response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
System.out.println(response.statusCode());
String contentType = response.headers().firstValue("content-type").orElse("").toLowerCase();
String mediaType = contentType.split(";", 2)[0].trim();
if (contentType.startsWith("text/") || contentType.contains("json") || contentType.contains("xml") || mediaType.equals("application/javascript") || mediaType.equals("application/x-www-form-urlencoded") || mediaType.equals("application/graphql")) {
System.out.println(new String(response.body(), StandardCharsets.UTF_8));
} else {
Files.write(Path.of("response.bin"), response.body());
System.out.println("Saved " + response.body().length + " bytes to response.bin");
}
}
}go
package main
import (
"fmt"
"io"
"os"
"strings"
"net/http"
"time"
)
const BASE_URL = "https://api.justoneapi.com" // 可选服务器: "http://47.117.133.51:30015"
func main() {
client := &http.Client{Timeout: 120 * time.Second}
url := BASE_URL + "/api/xiaohongshu/hot-search/v1?token=YOUR_API_KEY"
req, _ := http.NewRequest("GET", url, nil)
resp, _ := client.Do(req)
defer resp.Body.Close()
fmt.Println(resp.StatusCode)
bodyBytes, _ := io.ReadAll(resp.Body)
contentType := strings.ToLower(resp.Header.Get("Content-Type"))
mediaType := strings.TrimSpace(strings.SplitN(contentType, ";", 2)[0])
if strings.HasPrefix(contentType, "text/") || strings.Contains(contentType, "json") || strings.Contains(contentType, "xml") || mediaType == "application/javascript" || mediaType == "application/x-www-form-urlencoded" || mediaType == "application/graphql" {
fmt.Println(string(bodyBytes))
} else {
os.WriteFile("response.bin", bodyBytes, 0600)
fmt.Printf("Saved %d bytes to response.bin\n", len(bodyBytes))
}
}php
<?php
$BASE_URL = 'https://api.justoneapi.com'; // 可选服务器: "http://47.117.133.51:30015"
$url = $BASE_URL . '/api/xiaohongshu/hot-search/v1?token=YOUR_API_KEY';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$contentType = strtolower((string) curl_getinfo($ch, CURLINFO_CONTENT_TYPE));
curl_close($ch);
echo $status . PHP_EOL;
$mediaType = trim(explode(';', $contentType, 2)[0]);
if (str_starts_with($contentType, 'text/') || str_contains($contentType, 'json') || str_contains($contentType, 'xml') || in_array($mediaType, ['application/javascript', 'application/x-www-form-urlencoded', 'application/graphql'], true)) {
echo $response;
} else {
file_put_contents('response.bin', $response);
echo 'Saved ' . strlen($response) . ' bytes to response.bin' . PHP_EOL;
}响应结构
200 · application/json
json
{
"oneOf": [
{
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32",
"enum": [
0
]
},
"message": {
"type": [
"string",
"null"
]
},
"data": {},
"recordTime": {
"type": [
"string",
"null"
]
}
},
"required": [
"code",
"data",
"message",
"recordTime"
]
},
{
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32",
"enum": [
202,
300,
301,
601,
602
]
},
"message": {
"type": [
"string",
"null"
]
},
"data": {},
"recordTime": {
"type": [
"string",
"null"
]
}
},
"required": [
"code",
"data",
"message",
"recordTime"
]
}
]
}400 · application/json
json
{
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32",
"enum": [
0,
100,
101,
202,
300,
301,
302,
303,
400,
404,
500,
600,
601,
602
]
},
"message": {
"type": [
"string",
"null"
]
},
"data": {},
"recordTime": {
"type": [
"string",
"null"
]
},
"requestId": {
"type": "string"
}
},
"required": [
"code",
"data",
"message",
"recordTime"
]
}401 · application/json
json
{
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32",
"enum": [
0,
100,
101,
202,
300,
301,
302,
303,
400,
404,
500,
600,
601,
602
]
},
"message": {
"type": [
"string",
"null"
]
},
"data": {},
"recordTime": {
"type": [
"string",
"null"
]
},
"requestId": {
"type": "string"
}
},
"required": [
"code",
"data",
"message",
"recordTime"
]
}403 · application/json
json
{
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32",
"enum": [
0,
100,
101,
202,
300,
301,
302,
303,
400,
404,
500,
600,
601,
602
]
},
"message": {
"type": [
"string",
"null"
]
},
"data": {},
"recordTime": {
"type": [
"string",
"null"
]
},
"requestId": {
"type": "string"
}
},
"required": [
"code",
"data",
"message",
"recordTime"
]
}429 · application/json
json
{
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32",
"enum": [
0,
100,
101,
202,
300,
301,
302,
303,
400,
404,
500,
600,
601,
602
]
},
"message": {
"type": [
"string",
"null"
]
},
"data": {},
"recordTime": {
"type": [
"string",
"null"
]
},
"requestId": {
"type": "string"
}
},
"required": [
"code",
"data",
"message",
"recordTime"
]
}500 · application/json
json
{
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32",
"enum": [
0,
100,
101,
202,
300,
301,
302,
303,
400,
404,
500,
600,
601,
602
]
},
"message": {
"type": [
"string",
"null"
]
},
"data": {},
"recordTime": {
"type": [
"string",
"null"
]
},
"requestId": {
"type": "string"
}
},
"required": [
"code",
"data",
"message",
"recordTime"
]
}合成响应示例
正在加载响应示例…
