响应格式
同一个搜索资源,六种响应格式。用 format= 选择;默认为 JSON,其他格式也都以 JSON 为参照来说明。
format | Content-Type | 结构 |
|---|---|---|
json | application/json | 一个对象,结果放在数组中。 |
ndjson | application/x-ndjson | 每行一个 JSON 对象。第一行是元数据,标记为 "object":"meta"。 |
xml | application/xml | 以 XML 表示的同一文档,每行结果为一个 <result>。 |
csv | text/csv | 以分号分隔,无表头行。 |
tsv | text/tab-separated-values | 与 CSV 相同,以制表符分隔。 |
txt | text/plain | 每行一个 URL。 |
jsonl 可作为 ndjson 的别名使用。
如何选择
数据量能放进内存时用 json,放不下时用 ndjson:它没有需要等待闭合的外层数组,元数据先于结果行到达,读取方可以在其余数据还在传输时就开始处理第一条结果。csv、tsv 和 txt 适用于电子表格、Shell 管道,以及在不修改解析器的前提下,把脚本从旧版导出 URL 迁移过来。
ndjson
{"object":"meta","query":"\"angular.min.js\"","page":1,"per_page":2,"total":278,"total_pages":139,"returned":2,"truncated":false,"took_ms":2}
{"domain":"imgbox.com","url":"https://imgbox.com/","rank":4187,"ranked":true}
{"domain":"angularjs.org","url":"https://angularjs.org/","rank":12376,"ranked":true}
选择列
json 和 xml 返回全部字段。扁平格式则默认只返回常用字段,因此从旧版导出 URL 迁移过来的脚本无需修改解析器:
| 请求 | 输出 |
|---|---|
format=csv | imgbox.com;4187 |
format=csv&columns=url,rank | https://imgbox.com/;4187 |
format=csv&columns=domain | imgbox.com |
format=txt | https://imgbox.com/ |
format=csv&snippets=1 | imgbox.com;4187;the matching text |
format=csv&header=1 | 第一行为 domain;rank |
format=csv&delimiter=, | imgbox.com,4187 |
columns 适用于所有格式,因此 format=json 搭配 columns=domain 时,返回的对象只包含该字段。
扁平格式的细节
- 只有当值会破坏行结构(包含分隔符、引号或换行符)时才加引号。普通的
domain;rank输出不带引号。 - 按 CSV 规范,带引号的值中的引号需要双写。
- 代码片段是列表,用
...连接后放入同一个单元格。 - 无排名网站的排名单元格为空,这就是
null在此格式中的表示方式。 - 总数无法放进某一行,因此改由
X-Total-Results、X-Returned-Results和X-Truncated响应头提供。所有格式都会发送这些响应头。
这些是新 API 自己的序列化格式,并非旧版导出的重新发布。结构刻意保持了熟悉的样子,但只有旧版 URL 才保证逐字节一致。
格式与错误
csv、tsv 和 txt 只用于表示结果行,因此在 /v1/account 上请求这些格式会返回 400 format_not_available。错误本身以 JSON 返回;如果请求的是 XML,则以 XML 返回。