新時空 API
新時空 API

新時空 API 資訊列表查詢

快速開始:

完整請求(Base URL:https://www.newtimespace.com):

GET https://www.newtimespace.com/api/v1/article/getArticles?language=zh-cn&format=json

無需認證,支持 GET 與 POST(POST 可傳 JSON body)。最簡形式/api/v1/article/getArticles即可返回最新 10 條簡體中文資訊。列表僅返回摘要 summary,不含正文全文;閱讀全文需再調「資訊詳情查詢」接口。響應示例:

{
  "status": "success",
  "articles": [
    {
      "article_id": "1445506",
      "title": "华夏纳指(03086.HK)盘中涨0.20%,平均价60.389港元",
      "summary": "截至2026年9月9日13:51,华夏纳指(03086.HK)上涨0.20%,报60.400港元。",
      "publish_time": "2026-09-09T14:54:55+08:00",
      "url": "https://www.newtimespace.com/zh-cn/etf/1445506.html",
      "category": "ETF"
    }
  ],
  "pagination": { "page": 1, "limit": 10, "total": 28775, "total_pages": 2878 },
  "request_id": "a1b2c3d4e5f60718",
  "server_time": "2026-09-23T09:30:00+08:00",
  "applied_filters": {
    "q": "", "category": "", "category_ids": [], "language": "zh-cn",
    "start_date": "", "end_date": "", "sort": "publish_time", "order": "desc",
    "format": "json", "fields": []
  },
  "warnings": []
}

解析響應

響應爲標準 UTF-8 JSON(不帶 BOM),Content-Type: application/json,可直接 json.loads 解析。每條響應都帶 request_id(與響應頭 X-Request-Id 同值),排障或反饋問題時請一並提供。

import json, urllib.request

raw = urllib.request.urlopen(
    "https://www.newtimespace.com/api/v1/article/getArticles?format=json"
).read()
data = json.loads(raw.decode("utf-8"))
for a in data["articles"]:
    print(a["article_id"], a["publish_time"], a["title"])
print(data["pagination"])  # {'page': 1, 'limit': 10, 'total': 28775, 'total_pages': 2878}

請求參數

参数类型必填描述默认值
qstring否检索关键词,模糊匹配「标题」与「摘要」;建议仅传单个核心词(如「小米」),避免空格与 AND/OR/NOT 运算符''
categorystring否分类名称精确匹配,区分大小写,须与 language 配对(见下)''
languagestring否zh-cn / zh-hk / en,其他值回退 zh-cnzh-cn
start_datestring否起始日期 YYYY-MM-DD(含当天 00:00:00)''
end_datestring否结束日期 YYYY-MM-DD(含当天 23:59:59)''
pageinteger否页码,从 1 开始。超出总页数返回空数组,不报错1
limitinteger否每页数量,1–100;越界返回 HTTP 400(PARAMETER_OUT_OF_RANGE)。建议 10-20 以节省 Token10
sortstring否排序字段:publish_time(发布时间)或 id;兼容旧参数 sortBy(date→publish_time、id→id)publish_time
orderstring否排序方向:desc(倒序)或 asc(升序)desc
fieldsstring否稀疏字段集(逗号分隔),裁剪列表输出以节省 Token。可选 article_id,title,summary,publish_time,url,category;article_id 恒返回;留空返回全部''
formatstring否json / xml,其他值按 json 返回。Accept 请求头不影响格式,请始终显式传json

向後兼容:舊參數 title 會並入 q;舊參數 date 視作單日區間(start_date=end_date=date);舊參數 sortBy 等價於 sort(date→publish_time)。

category 可用值(須與 language 配對)

language可用 category
zh-cnETF、财经、新股、科技、出海、新时空研究院
zh-hkETF、新股、科技、出海。财经、新时空研究院 在 zh-hk 下返回空结果(简体、繁体写法均如此)
enETF、Finance、IPO、Research、Tech、Overseas

不匹配的組合(如 zh-cn 配 IPO)返回 HTTP 200 + 空數組,不報錯;分類值不存在時同樣返回空數組,並在 warnings 中列出該 language 下的合法分類供自我修正。注意:zh-hk 的列表結果中存在 category 爲 財經 / 新時空研究院 的文章,但按這兩個值篩選 zh-hk 時返回空數組——需要這兩類繁體內容時,請用 language=zh-hk 不帶 category 拉取後再按 category 字段自行過濾。

響應字段與信封

articles 數組中每篇文章僅含以下 6 個精簡字段(爲節省 Token 已去除正文全文與冗餘元數據):

字段类型说明
article_idstring文章唯一 ID;调「资讯详情查询」接口时使用此 ID
titlestring标题(已按 language 本地化,zh-hk 自动转繁体)
summarystring摘要/描述,非全文;阅读全文需调详情接口
publish_timestringISO-8601 发布时间,北京时间(GMT+8),如 2026-09-09T14:54:55+08:00
urlstring文章绝对 URL;引用原文直接使用,勿自行拼接
categorystring分类名称(已按 language 本地化)

頂層信封字段:

字段说明
status恒为 "success"(错误响应见下节 RFC 7807 结构)
articles文章数组(见上)
pagination分页对象 { page, limit, total, total_pages }
request_id本次请求追踪 ID(与响应头 X-Request-Id 同值),排障时提供
server_time服务器时间(ISO-8601)
applied_filters服务端实际生效的过滤/排序条件回显(q、category、category_ids、language、start_date、end_date、sort、order、format、fields),供校验参数是否被正确识别
warnings非致命自愈提示数组(如分类未命中列出合法分类、en 摘要缺失回退简体、q 含空格/布尔词建议)
message可选,附加提示(如“未找到符合条件的新闻数据。”)

當 format=xml 時返回文章列表 XML(Content-Type: text/xml),各字段以 CDATA 包裹;注意 XML 僅含文章節點,不含 pagination 與信封字段:

<?xml version="1.0" encoding="UTF-8"?>
<articles>
  <article>
    <article_id><![CDATA[1445506]]></article_id>
    <title><![CDATA[华夏纳指(03086.HK)盘中涨0.20%,平均价60.389港元]]></title>
    <summary><![CDATA[截至2026年9月9日13:51,华夏纳指(03086.HK)上涨0.20%,报60.400港元。]]></summary>
    <publish_time><![CDATA[2026-09-09T14:54:55+08:00]]></publish_time>
    <url><![CDATA[https://www.newtimespace.com/zh-cn/etf/1445506.html]]></url>
    <category><![CDATA[ETF]]></category>
  </article>
</articles>

分頁

pagination 包含 page(當前頁)、limit(每頁數量)、total(符合條件總數)、total_pages(總頁數)。示例: {"page": 1, "limit": 10, "total": 28775, "total_pages": 2878}。

終止條件用 total_pages,不要等空數組。頁碼超出總頁數時接口返回 HTTP 200 + 空數組、不報錯,靠“返回空數組”判斷結束會浪費請求,應以 page >= total_pages 停止翻頁。

空結果與錯誤

搜索無結果 / 組合不匹配 / 頁碼越界時,返回 HTTP 200 + 空數組,按正常結果處理,不要重試:

{ "status": "success", "articles": [], "pagination": { "page": 1, "limit": 10, "total": 0, "total_pages": 0 }, "warnings": [] }

參數錯誤返回 HTTP 400,錯誤響應遵循 RFC 7807(Content-Type: application/problem+json),並保留 code/message 兼容舊客戶端:

{
  "type": "about:blank",
  "title": "Bad Request",
  "status": 400,
  "detail": "limit 参数越界:每页数量必须在 1-100 之间。",
  "error_code": "PARAMETER_OUT_OF_RANGE",
  "request_id": "a1b2c3d4e5f60718",
  "instance": "/api/v1/article/getArticles?limit=200",
  "code": 400,
  "message": "limit 参数越界:每页数量必须在 1-100 之间。"
}
触发条件HTTPerror_code
limit 不在 1–100400PARAMETER_OUT_OF_RANGE
超过每 IP 每 60 秒 60 次429RATE_LIMIT_EXCEEDED(响应携带 Retry-After,按其等待)
服务器内部错误500INTERNAL_SERVER_ERROR

參數錯誤請修正後再請求,不要對相同錯誤參數反復重試;429 時按 Retry-After 等待後重試。

Agent 注意事項

  • 列表仅含摘要:articles 每项只有 summary(摘要),不含正文全文。需要阅读全文时,用列表返回的 article_id 调「资讯详情查询」接口(返回清洗后的极简 Markdown 正文,见 资讯详情查询)。
  • 时间字段为北京时间(GMT+8):publish_time 为 ISO-8601(如 2026-09-09T14:54:55+08:00),已含时区偏移,可直接解析比较。
  • 日期区间过滤:start_date / end_date 为闭区间(含当天);格式错误时该条件失效、返回全部。旧参数 date 等价于 start_date=end_date 的单日过滤。
  • article_id 从结果中读取:使用返回结果中的真实 article_id,不要自行构造。
  • 用 applied_filters 自检:响应回显服务端实际生效的过滤条件,可据此确认参数是否被正确识别(如 category 未命中会返回空数组并在 warnings 列出合法分类)。
  • 限速:每 IP 每 60 秒 60 次;响应不含剩余额度计数头,需自行统计频率;429 时按 Retry-After 等待后重试。
  • 请求方法:支持 GET 与 POST(POST 可传 JSON body);已开放 CORS(Access-Control-Allow-Origin: *),OPTIONS 预检返回 204。
  • 响应不带 BOM:为标准 UTF-8 JSON,直接 json.loads 即可,无需用 utf-8-sig 剥离 BOM。

完整調用示例(搜索 + 翻頁 + 取詳情讀全文)

import json, urllib.request, urllib.parse
BASE = "https://www.newtimespace.com/api/v1/article/getArticles"
def search(keyword, max_pages=3):
    results = []
    for page in range(1, max_pages + 1):
        url = BASE + "?" + urllib.parse.urlencode(
            {"q": keyword, "language": "zh-cn", "format": "json", "page": page})
        raw = urllib.request.urlopen(url).read()
        data = json.loads(raw.decode("utf-8"))
        results += data["articles"]
        if page >= data["pagination"]["total_pages"]:   # 以 total_pages 为终止条件
            break
    return results

for a in search("人工智能"):
    print(a["publish_time"], a["title"])     # publish_time 为 ISO-8601(GMT+8)
    print("  摘要:", a["summary"][:60])       # 列表仅含摘要,非全文
    print("  原文:", a["url"])                # 引用时使用该 url
    # 读全文:用 article_id 调详情接口(返回清洗后的极简 Markdown)
    # GET /api/v1/article/detail?article_ids=%s&format=json" % a["article_id"]