Brave Search API 于 2026 年 2 月取消了免费套餐,现在对带有强制归因的查询收取 5 美元/1K 的费用。如果您的项目依赖于零成本 Brave 搜索,本教程将引导您以最少的代码更改迁移到 Scavio(每月 250 个免费积分,无需归属)。
前置条件
- 现有的 Brave Search API 集成
- 来自 scavio.dev 的 Scavio API 密钥(免费注册)
操作指南
步骤 1: 比较 API 形状
Brave 使用带有查询参数和订阅密钥标头的 GET。 Scavio 使用带有 JSON 正文和 x-api-key 标头的 POST。将现有查询参数映射到新格式。
# Brave (old)
curl -H 'X-Subscription-Token: BRAVE_KEY' \
'https://api.search.brave.com/res/v1/web/search?q=python+web+framework'
# Scavio (new)
curl -X POST https://api.scavio.dev/api/v1/search \
-H 'x-api-key: SCAVIO_KEY' \
-H 'Content-Type: application/json' \
-d '{"platform": "google", "query": "python web framework"}'步骤 2: 更新Python代码
将 Brave HTTP 调用替换为 Scavio 的 POST 端点。
import requests, os
# Old Brave code:
# resp = requests.get('https://api.search.brave.com/res/v1/web/search',
# headers={'X-Subscription-Token': os.environ['BRAVE_KEY']},
# params={'q': query})
# results = resp.json()['web']['results']
# New Scavio code:
def search(query: str) -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'},
json={'platform': 'google', 'query': query}, timeout=10)
return resp.json().get('organic', [])步骤 3: 更新 JavaScript 代码
将 Brave fetch 调用替换为 Scavio 的 POST 端点。
// Old Brave code:
// const resp = await fetch(`https://api.search.brave.com/res/v1/web/search?q=${q}`, {
// headers: {'X-Subscription-Token': process.env.BRAVE_KEY}
// });
// New Scavio code:
async function search(query) {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'google', query})
});
return (await resp.json()).organic || [];
}步骤 4: 映射响应字段
将 Brave 响应字段映射到 Scavio 等效项。
# Brave response field -> Scavio equivalent:
# result.title -> result['title']
# result.url -> result['link']
# result.description -> result['snippet']
# result.age -> result['date'] (if available)
# result.extra_snippets -> (not available, use snippet)
# Normalize function:
def normalize_result(r: dict) -> dict:
return {
'title': r.get('title', ''),
'url': r.get('link', ''),
'description': r.get('snippet', ''),
}步骤 5: 更新 MCP 配置(如果适用)
如果您使用的是 Brave MCP,请更换为 Scavio MCP。
// In claude_desktop_config.json or .cursor/mcp.json:
// Remove Brave MCP:
// "brave-search": { "command": "npx", "args": ["@anthropic/mcp-brave-search"] }
// Add Scavio MCP:
{
"mcpServers": {
"scavio": {
"url": "https://mcp.scavio.dev/mcp",
"headers": { "x-api-key": "your_scavio_api_key" }
}
}
}步骤 6: 删除归属要求
勇敢地在您的项目中注明所需的归属,以获得免费积分。 Scavio 不需要注明出处。
# Remove from your README/about page:
# 'Powered by Brave Search API' (no longer needed)
# Scavio free tier (250 credits/month) has no attribution requirement.
# You may credit Scavio if you want, but it is not required.Python 示例
import requests, os
def search_scavio(query: str, platform: str = 'google') -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'},
json={'platform': platform, 'query': query}, timeout=10)
return [{'title': r['title'], 'url': r.get('link',''), 'snippet': r.get('snippet','')}
for r in resp.json().get('organic', [])]JavaScript 示例
async function searchScavio(query, platform = 'google') {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform, query})
});
const data = await resp.json();
return (data.organic || []).map(r => ({title: r.title, url: r.link, snippet: r.snippet}));
}预期输出
A migrated search integration that works with Scavio instead of Brave, with 250 free credits/month and no attribution requirement.