新时空 API
资讯列表查询仅返回摘要 summary,不含正文全文。以下场景调用本详情接口:
article_id 必须来自资讯列表查询的真实返回,不要自行构造或猜测。
完整地址(Base URL:https://www.newtimespace.com),无需认证,支持 GET 与 POST(POST 可传 JSON body)。详情接口始终以 JSON 返回:
# 单篇
GET /api/v1/article/detail?article_ids=1445506
# 多篇(逗号分隔,中英文逗号均可,一次最多 10 条)
GET /api/v1/article/detail?article_ids=1445506,1444676
# 切换语言版本(article_id 跨语言通用)
GET /api/v1/article/detail?article_ids=1445506&language=en
| 参数 | 类型 | 必填 | 描述 | 默认值 |
|---|---|---|---|---|
article_ids | string | 是 | 文章 ID,逗号分隔(中英文逗号均可,如 1024,1025),单次最多 10 条;兼容别名 articleIds,POST 亦可传 JSON 数组 | '' |
language | string | 否 | 输出语言:zh-cn(简体,默认)、zh-hk(繁体)、en(英文);未知值回退 zh-cn | zh-cn |
apikey | string | 否 | 调用方标识,用于请求日志记录 | '' |
顶层字段为 status、data、request_id、server_time、applied_filters、warnings。data 恒为数组(即使只命中 1 条也是数组),无需再判断对象/数组双形态:
| 情况 | data | 行为 |
|---|---|---|
| 命中 1 条 | 数组(1 个元素) | data 仍为数组,直接遍历即可 |
| 命中多条 | 数组 | 返回命中的文章,单次最多 10 条 |
| 全部不存在 | 空数组 [] | HTTP 200 + status=success,没有 404、没有 error |
| 混入无效 ID | 跟随命中数 | 无效 ID 被跳过,只返回命中的文章 |
data 数组中每篇文章含以下 6 个字段:
| 字段 | 类型 | 说明 |
|---|---|---|
article_id | string | 文章唯一 ID |
title | string | 标题(已按 language 本地化,zh-hk 自动转繁体) |
author | string | 作者 |
publish_time | string | ISO-8601 发布时间,北京时间(GMT+8) |
content | string | 清洗后的极简 Markdown 正文(已剔除脚本/样式/图片噪音,非 HTML) |
word_count | integer | 正文字符数(UTF-8) |
详情响应不含 url / category / summary 字段;如需引用原文链接 url,请从资讯列表查询的返回中获取。
{
"status": "success",
"data": [
{
"article_id": "1445506",
"title": "华夏纳指(03086.HK)盘中涨0.20%,平均价60.389港元",
"author": "冯佳敏",
"publish_time": "2026-09-09T14:54:55+08:00",
"content": "### 核心要点\n截至2026年9月9日13:51,华夏纳指(03086.HK)上涨0.20%,报60.400港元……(已清洗为极简 Markdown)",
"word_count": 1280
}
],
"request_id": "a1b2c3d4e5f60718",
"server_time": "2026-09-23T09:30:00+08:00",
"applied_filters": { "language": "zh-cn", "article_ids": [1445506] },
"warnings": []
}
字段使用要点:
参数错误返回 HTTP 400,错误响应遵循 RFC 7807(Content-Type: application/problem+json),并保留 code/message 兼容旧客户端:
{
"type": "about:blank",
"title": "Bad Request",
"status": 400,
"detail": "缺少必要参数: article_ids。请提供至少一个整数 ID。",
"error_code": "INVALID_PARAMETER",
"request_id": "a1b2c3d4e5f60718",
"instance": "/api/v1/article/detail",
"code": 400,
"message": "缺少必要参数: article_ids。请提供至少一个整数 ID。"
}
| 触发条件 | HTTP | error_code |
|---|---|---|
| 未传 article_ids 或解析后为空 | 400 | INVALID_PARAMETER |
| 一次超过 10 条 ID | 400 | PARAMETER_EXCEEDED_LIMIT |
| 超过每 IP 每 60 秒 60 次 | 429 | RATE_LIMIT_EXCEEDED(携带 Retry-After,按其等待) |
| 服务器内部错误 | 500 | INTERNAL_SERVER_ERROR |
超过 10 个 ID 时拆分为多批请求(如 25 个按 10 + 10 + 5 分三次);参数错误修正后再请求,不要对相同错误参数反复重试。
"data": [],按“未找到”处理即可,不要重试。import json, urllib.request
BASE = "https://www.newtimespace.com/api/v1/article/detail"
def fetch(ids):
# 批量取文,自动按 10 个拆批,返回文章对象列表
out = []
for i in range(0, len(ids), 10):
url = BASE + "?article_ids=" + ",".join(map(str, ids[i:i+10]))
raw = urllib.request.urlopen(url).read()
data = json.loads(raw.decode("utf-8"))
out += data["data"] # data 恒为数组,直接合并
return out
for a in fetch(["1445506", "1444676", "99999999999"]): # 无效 ID 会被跳过
print(a["article_id"], a["publish_time"], a["title"])
print(" 字数:", a["word_count"])
print(" 正文(Markdown):", a["content"][:120])