主题
GET /api/keepa/charturl
批量构造 Keepamore 站点上的 Keepa 图表页链接:
https://next.keepamore.com/keepa/product?country={country}&asin={ASIN}该接口仅做本地拼接,不调用任何上游 API。生成的链接需要在浏览器中打开,并满足下列两个条件才能正常显示图表:
- 已登录 Keepamore 账号
- 已安装 Keepamore 浏览器插件(下载地址)
接口
GET https://mcp.keepamore.com/api/keepa/charturl计费
| 项目 | units |
|---|---|
| 任意调用 | 0(免费) |
该接口不消耗 Keepa 额度,也不计入 usage 日志,但仍然需要携带合法的 API Key 完成鉴权。
参数(Query String)
| 名称 | 类型 | 必填 | 默认 | 约束 | 说明 |
|---|---|---|---|---|---|
domain | integer | ✅¹ | — | 1–12 | 站点 ID,参见 domain 映射。也可用 domainId / country 别名 |
asin | string | ✅² | — | 10 位字母数字 | 单个 ASIN |
asins | string[] / csv | ✅² | — | 最多 1000 个 | ASIN 列表。可写 ?asins=A,B,C 或多次 ?asins=A&asins=B |
¹
domain/domainId/country三选一;同时传入时若不一致会返回 400。 ²asin与asins至少传一个;同时传入时合并去重。
响应
json
{
"code": "0000",
"msg": "ok",
"data": {
"country": "us",
"count": 2,
"pluginDownloadUrl": "https://next.keepamore.com/plugin-download",
"notice": "需要登录 Keepamore 账号并安装浏览器插件后访问",
"items": [
{
"asin": "B08N5WRWNW",
"url": "https://next.keepamore.com/keepa/product?country=us&asin=B08N5WRWNW"
},
{
"asin": "B0BSHF7WHW",
"url": "https://next.keepamore.com/keepa/product?country=us&asin=B0BSHF7WHW"
}
]
}
}示例
bash
# 请将 km_xxx 替换为你的 API Key
# 1) 单个 ASIN
curl "https://mcp.keepamore.com/api/keepa/charturl?domain=1&asin=B08N5WRWNW" \
-H "X-API-Key: km_xxx"
# 2) 批量 ASIN(逗号分隔)
curl "https://mcp.keepamore.com/api/keepa/charturl?domain=1&asins=B08N5WRWNW,B0BSHF7WHW,B09JQMJSXY" \
-H "X-API-Key: km_xxx"js
// 请将 km_xxx 替换为你的 API Key
const URL = "https://mcp.keepamore.com/api/keepa/charturl";
const HEADERS = { "X-API-Key": "km_xxx" };
// 1) 单个 ASIN
const r1 = await fetch(`${URL}?domain=1&asin=B08N5WRWNW`, { headers: HEADERS });
console.log(await r1.json());
// 2) 批量 ASIN(多次 ?asins= 写法)
const params = new URLSearchParams({ domain: "1" });
["B08N5WRWNW", "B0BSHF7WHW"].forEach((a) => params.append("asins", a));
const r2 = await fetch(`${URL}?${params}`, { headers: HEADERS });
console.log(await r2.json());python
# 请将 km_xxx 替换为你的 API Key
import requests
URL = "https://mcp.keepamore.com/api/keepa/charturl"
HEADERS = {"X-API-Key": "km_xxx"}
# 1) 单个 ASIN
r1 = requests.get(URL, params={"domain": 1, "asin": "B08N5WRWNW"},
headers=HEADERS, timeout=30)
print(r1.json())
# 2) 批量 ASIN(重复 key 的写法)
r2 = requests.get(URL,
params=[("domain", 1), ("asins", "B08N5WRWNW"), ("asins", "B0BSHF7WHW")],
headers=HEADERS, timeout=30)
print(r2.json())php
<?php
// 请将 km_xxx 替换为你的 API Key
require 'vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client();
$resp = $client->get('https://mcp.keepamore.com/api/keepa/charturl', [
'headers' => ['X-API-Key' => 'km_xxx'],
// Guzzle 会把数组展开为 ?asins=A&asins=B
'query' => ['domain' => 1, 'asins' => ['B08N5WRWNW', 'B0BSHF7WHW']],
'timeout' => 30,
]);
echo $resp->getBody();java
// 请将 km_xxx 替换为你的 API Key(Java 11+ 标准库)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://mcp.keepamore.com/api/keepa/charturl?domain=1&asins=B08N5WRWNW,B0BSHF7WHW"))
.header("X-API-Key", "km_xxx")
.timeout(Duration.ofSeconds(30))
.GET()
.build();
HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(resp.body());go
// 请将 km_xxx 替换为你的 API Key(Go 标准库 net/http)
package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
url := "https://mcp.keepamore.com/api/keepa/charturl?domain=1&asins=B08N5WRWNW,B0BSHF7WHW"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("X-API-Key", "km_xxx")
client := &http.Client{Timeout: 30 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}错误处理
通用错误码定义见 错误码总览。常见情况:
- 缺少
asin/asins、ASIN 数量超过 1000 → HTTP400 - ASIN 格式不合法(非 10 位字母数字)→ HTTP
400 domain/country同时传入但不一致 → HTTP400