通过替换端点 URL、从查询参数身份验证切换到 x-api-key 标头以及更新响应解析器以匹配 Scavio 的 JSON 结构,从 Brave Search API 迁移到 Scavio。对于大多数代码库,迁移通常需要不到 30 分钟。 Scavio 通过单个 API 密钥覆盖 Google、Amazon、YouTube、Reddit 和 Walmart,从而无需单独的提供商帐户。本教程将详细介绍 Python 和 JavaScript 中所需的确切代码更改。
前置条件
- 使用 Brave Search API 的现有代码库
- 来自 scavio.dev 的 Scavio API 密钥
- Python 3.8+ 或 Node.js 18+
- 基本熟悉 HTTP 请求库
操作指南
步骤 1: 映射请求格式
Brave 使用带有查询参数和订阅令牌标头的 GET。 Scavio 使用带有 JSON 正文和 x-api-key 标头的 POST。替换请求调用。
import requests, os
# BEFORE: Brave Search
# resp = requests.get('https://api.search.brave.com/res/v1/web/search',
# headers={'X-Subscription-Token': BRAVE_KEY},
# params={'q': 'best crm 2026'})
# AFTER: Scavio
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'platform': 'google', 'query': 'best crm 2026'})
data = resp.json()步骤 2: 更新响应解析
Brave 在 web.results 下返回结果。 Scavio 将它们返回到organic_results 下。相应地更新您的解析器。
# BEFORE: Brave response parsing
# results = data.get('web', {}).get('results', [])
# for r in results:
# title = r['title']
# url = r['url']
# snippet = r.get('description', '')
# AFTER: Scavio response parsing
results = data.get('organic_results', [])
for r in results:
title = r['title']
url = r['link']
snippet = r.get('snippet', '')
print(f'{title} - {url}')步骤 3: 构建兼容性包装器
如果您有许多调用站点,请创建一个包装函数,该函数在后台调用 Scavio 时呈现旧界面。
def brave_compatible_search(query: str, count: int = 10) -> dict:
"""Drop-in replacement for Brave Search API calls."""
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'platform': 'google', 'query': query})
resp.raise_for_status()
scavio_results = resp.json().get('organic_results', [])[:count]
return {
'web': {
'results': [{
'title': r.get('title', ''),
'url': r.get('link', ''),
'description': r.get('snippet', ''),
} for r in scavio_results]
}
}步骤 4: 更新环境变量并测试
将 BRAVE_API_KEY 环境变量替换为 SCAVIO_API_KEY 并运行测试套件以验证结果解析是否正确。
# In your .env or environment:
# Remove: BRAVE_API_KEY=brv_xxx
# Add: SCAVIO_API_KEY=your_scavio_key
# Quick smoke test:
def test_migration():
result = brave_compatible_search('python web frameworks')
items = result['web']['results']
assert len(items) > 0, 'No results returned'
assert items[0]['title'], 'Missing title'
assert items[0]['url'].startswith('http'), 'Invalid URL'
print(f'Migration OK: {len(items)} results')
test_migration()Python 示例
import requests, os
def scavio_search(query, platform='google'):
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'platform': platform, 'query': query})
resp.raise_for_status()
return resp.json().get('organic_results', [])
# Replaces: requests.get('https://api.search.brave.com/...')
results = scavio_search('best crm 2026')
for r in results[:5]:
print(f"{r['title']} -> {r['link']}")JavaScript 示例
async function scavioSearch(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_results || [];
}
// Replaces: fetch('https://api.search.brave.com/...')
const results = await scavioSearch('best crm 2026');
results.slice(0, 5).forEach(r => console.log(`${r.title} -> ${r.link}`));预期输出
A fully migrated codebase where all Brave Search API calls now route through Scavio, with identical output format via a compatibility wrapper.