统一规范
地址、鉴权、分页与错误码全站一致,换商品只需替换标识。
开发者文档 · 数据集 API
全站共用一套接口规范:地址格式、鉴权方式、分页与错误处理统一。
任意已购、支持 API 交付的数据集,只需把路径中的 {商品标识} 换成该商品在详情页显示的标识即可。下方提供 curl / Python / JavaScript / Java / Go / C# 示例,也可用 Postman。
地址、鉴权、分页与错误码全站一致,换商品只需替换标识。
购买后申请密钥,请求头携带 X-API-Key,一钥对应一商品。
curl / Python / JS / Java / Go / C# 与 Postman,可直接复制联调。
接口形如 /api/v1/data/{商品标识}/rows。
商品标识可在商品详情页或「我的购买」中查看(金融、医疗、工业等各类数据集通用)。
各列含义以该商品的「字段说明」与数据集介绍为准,本页不绑定某一具体商品。
请求
向数据接口发送 GET 请求。将示例中的 商品标识 替换为你在商品详情页看到的标识。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/data/{商品标识}/rows |
分页查询数据行。查询参数:页码(默认 1)、每页条数(默认 50,最大 200);可选标签筛选 |
| GET | /api/v1/data/{商品标识}/schema |
查询字段说明(列名、类型等,随数据集变化) |
| GET | /api/v1/data/{商品标识}/meta |
查询概况:总行数、列名、来源与许可摘要 |
查询参数英文名:页码 page、每页条数 size、标签筛选 label(可选)。
curl -H "X-API-Key: ds_你的密钥" \ "https://www.dataocean.zhixxing.cn/api/v1/data/商品标识/rows?page=1&size=10"
import requests
API_KEY = "ds_你的密钥"
# 商品标识:在商品详情页或「我的购买」中查看
PRODUCT_CODE = "商品标识"
BASE = f"https://www.dataocean.zhixxing.cn/api/v1/data/{PRODUCT_CODE}"
resp = requests.get(
f"{BASE}/rows",
headers={"X-API-Key": API_KEY},
params={"page": 1, "size": 10}, # 页码、每页条数
timeout=30,
)
resp.raise_for_status()
payload = resp.json()
rows = payload["rows"] # 本页数据行
print("总行数=", payload["total"], "本页条数=", len(rows))
const apiKey = "ds_你的密钥";
// 商品标识:在商品详情页或「我的购买」中查看
const productCode = "商品标识";
const url = new URL(`https://www.dataocean.zhixxing.cn/api/v1/data/${productCode}/rows`);
url.searchParams.set("page", "1"); // 页码
url.searchParams.set("size", "10"); // 每页条数
const resp = await fetch(url, {
headers: { "X-API-Key": apiKey },
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const payload = await resp.json();
console.log("总行数=", payload.total, "本页条数=", payload.rows.length);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
// 商品标识:在商品详情页或「我的购买」中查看
String productCode = "商品标识";
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://www.dataocean.zhixxing.cn/api/v1/data/" + productCode + "/rows?page=1&size=10"))
.header("X-API-Key", "ds_你的密钥")
.GET()
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
// 商品标识:在商品详情页或「我的购买」中查看
productCode := "商品标识"
req, _ := http.NewRequest("GET",
"https://www.dataocean.zhixxing.cn/api/v1/data/"+productCode+"/rows?page=1&size=10", nil)
req.Header.Set("X-API-Key", "ds_你的密钥")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(resp.StatusCode, string(body))
}
using System.Net.Http;
// 商品标识:在商品详情页或「我的购买」中查看
var productCode = "商品标识";
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "ds_你的密钥");
var json = await client.GetStringAsync(
$"https://www.dataocean.zhixxing.cn/api/v1/data/{productCode}/rows?page=1&size=10");
Console.WriteLine(json);
方法选 GET;地址填 https://www.dataocean.zhixxing.cn/api/v1/data/{商品标识}/rows;Headers 增加 X-API-Key = ds_…;Params 增加页码 page、每页条数 size。
响应
成功时返回 HTTP 200,正文为 JSON。行查询大致结构如下(列名随数据集变化):
{
"slug": "商品标识",
"page": 1,
"size": 10,
"total": 1000,
"columns": ["列名甲", "列名乙", "标签列", "..."],
"rows": [
{"列名甲": "…", "列名乙": 1.23, "标签列": 0}
]
}
对应关系:slug → 商品标识;rows → 本页数据行;total → 总行数;
page / size → 页码 / 每页条数;columns → 列名列表。
具体列含义请打开该商品的「字段说明」接口或商品详情中的数据集介绍。
for row in payload["rows"]:
# 按该商品的字段说明读取列,勿写死某一商品的列名
print(row)
# ... 你的业务逻辑
for (const row of payload.rows) {
// 按该商品的字段说明读取列
console.log(row);
// ... 你的业务逻辑
}
// 使用 Jackson / Gson 等将正文解析后:
for (JsonNode row : root.get("rows")) {
// 按字段说明读取列
// ... 你的业务逻辑
}
type RowPayload struct {
Rows []map[string]any `json:"rows"`
}
var payload RowPayload
json.Unmarshal(body, &payload)
for _, row := range payload.Rows {
// 按字段说明读取列
_ = row
}
using System.Text.Json;
using var doc = JsonDocument.Parse(json);
foreach (var row in doc.RootElement.GetProperty("rows").EnumerateArray())
{
// 按字段说明读取列
// ... 你的业务逻辑
}
异常
请根据 HTTP 状态码与返回中的错误码分支处理,避免把错误响应当数据解析。
| HTTP | 错误码 | 含义 | 建议 |
|---|---|---|---|
| 400 | bad_request |
参数非法(如每页条数超过 200) | 检查页码、每页条数、标签筛选 |
| 401 | unauthorized |
缺少、无效或已撤销的 API 密钥 | 重新申请密钥 |
| 403 | forbidden |
未购买、购买过期,或密钥不属于该商品 | 先购买对应数据集 |
| 404 | not_found |
商品或数据包不存在 | 核对商品标识 |
| 429 | rate_limited |
请求过于频繁 | 稍后重试 / 降低请求频率 |
import requests
def fetch_rows(api_key: str, product_code: str, page: int = 1, size: int = 10):
r = requests.get(
f"https://www.dataocean.zhixxing.cn/api/v1/data/{product_code}/rows",
headers={"X-API-Key": api_key},
params={"page": page, "size": size},
timeout=30,
)
if r.status_code == 401:
raise SystemExit("API 密钥无效或已撤销,请到「我的购买」重新申请")
if r.status_code == 403:
raise SystemExit("无购买权限,请先购买该数据集")
if r.status_code == 400:
raise SystemExit(f"参数错误: {r.json()}")
if r.status_code == 429:
raise SystemExit("请求过于频繁,请稍后重试")
r.raise_for_status()
return r.json()
data = fetch_rows("ds_你的密钥", "商品标识")
print(data["rows"][0])
async function fetchRows(apiKey, productCode, page = 1, size = 10) {
const url = new URL(`https://www.dataocean.zhixxing.cn/api/v1/data/${productCode}/rows`);
url.searchParams.set("page", String(page));
url.searchParams.set("size", String(size));
const resp = await fetch(url, { headers: { "X-API-Key": apiKey } });
if (resp.status === 401) throw new Error("API 密钥无效或已撤销");
if (resp.status === 403) throw new Error("无购买权限,请先购买该数据集");
if (resp.status === 400) throw new Error(`参数错误: ${await resp.text()}`);
if (resp.status === 429) throw new Error("请求过于频繁,请稍后重试");
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
return resp.json();
}
const data = await fetchRows("ds_你的密钥", "商品标识");
console.log(data.rows[0]);
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
switch (response.statusCode()) {
case 401 -> throw new IllegalStateException("API 密钥无效或已撤销");
case 403 -> throw new IllegalStateException("无购买权限,请先购买该数据集");
case 400 -> throw new IllegalArgumentException("参数错误: " + response.body());
case 429 -> throw new IllegalStateException("请求过于频繁,请稍后重试");
default -> {
if (response.statusCode() >= 400) {
throw new IllegalStateException("HTTP " + response.statusCode());
}
}
}
System.out.println(response.body());
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
switch resp.StatusCode {
case 401:
panic("API 密钥无效或已撤销")
case 403:
panic("无购买权限,请先购买该数据集")
case 400:
panic(fmt.Sprintf("参数错误: %s", body))
case 429:
panic("请求过于频繁,请稍后重试")
}
if resp.StatusCode >= 400 {
panic(fmt.Sprintf("HTTP %d", resp.StatusCode))
}
fmt.Println(string(body))
var productCode = "商品标识";
using var resp = await client.GetAsync(
$"https://www.dataocean.zhixxing.cn/api/v1/data/{productCode}/rows?page=1&size=10");
var body = await resp.Content.ReadAsStringAsync();
switch ((int)resp.StatusCode)
{
case 401: throw new Exception("API 密钥无效或已撤销");
case 403: throw new Exception("无购买权限,请先购买该数据集");
case 400: throw new Exception($"参数错误: {body}");
case 429: throw new Exception("请求过于频繁,请稍后重试");
}
resp.EnsureSuccessStatusCode();
Console.WriteLine(body);
申请密钥后即可按本页示例发起请求;也可先浏览支持 API 交付的数据产品。