Google 自定义搜索引擎免费套餐仅限 50 个域名,并于 2027 年 1 月完全关闭。如果您的应用依赖 Google CSE 进行免费搜索,则您现在需要一个迁移计划。本教程构建一个后备层,该层首先尝试现有的 Google CSE,然后在 Google 返回错误或超出限制时路由到 Scavio。最后一步完全放弃了谷歌。 Scavio 每次查询的费用为 0.005 美元,免费套餐每月涵盖 250 个积分。
前置条件
- Python 3.9+ 或 Node.js 18+
- 现有的 Google CSE 集成
- 来自 scavio.dev 的 Scavio API 密钥
- 请求库 (Python) 或 fetch (Node.js)
操作指南
步骤 1: 审核您当前的 Google CSE 使用情况
在迁移之前,测量您发送的查询数量以及您使用的参数。这决定了成本并有助于将 Google CSE 字段映射到 Scavio 字段。
import os
# Your existing Google CSE config
GOOGLE_CSE_KEY = os.environ.get('GOOGLE_CSE_KEY', '')
GOOGLE_CSE_CX = os.environ.get('GOOGLE_CSE_CX', '')
# Typical Google CSE call for reference
# GET https://www.googleapis.com/customsearch/v1
# ?key=KEY&cx=CX&q=QUERY&num=10
#
# Returns: items[].title, items[].link, items[].snippet
# Map Google CSE fields to Scavio fields:
field_map = {
'items[].title': 'organic_results[].title',
'items[].link': 'organic_results[].link',
'items[].snippet': 'organic_results[].snippet',
'items[].pagemap': 'not available (use scrape instead)',
'searchInformation.totalResults': 'not available',
}
for google_field, scavio_field in field_map.items():
print(f' {google_field:40s} -> {scavio_field}')步骤 2: 构建双提供商搜索功能
创建一个搜索功能,首先尝试 Google CSE,并在出现任何错误、速率限制或空结果时回退到 Scavio。
import requests, os, time
GOOGLE_KEY = os.environ.get('GOOGLE_CSE_KEY', '')
GOOGLE_CX = os.environ.get('GOOGLE_CSE_CX', '')
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
def search_google_cse(query: str, num: int = 10) -> list:
if not GOOGLE_KEY or not GOOGLE_CX:
return []
resp = requests.get('https://www.googleapis.com/customsearch/v1',
params={'key': GOOGLE_KEY, 'cx': GOOGLE_CX, 'q': query, 'num': num},
timeout=10)
if resp.status_code != 200:
print(f'Google CSE error: {resp.status_code}')
return []
items = resp.json().get('items', [])
return [{'title': r['title'], 'link': r['link'],
'snippet': r.get('snippet', '')} for r in items]
def search_scavio(query: str, num: int = 10) -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us', 'num_results': num})
resp.raise_for_status()
return [{'title': r['title'], 'link': r['link'],
'snippet': r.get('snippet', '')} for r in resp.json().get('organic_results', [])]
def search(query: str, num: int = 10) -> dict:
start = time.time()
results = search_google_cse(query, num)
if results:
return {'results': results, 'provider': 'google_cse',
'latency_ms': int((time.time() - start) * 1000), 'cost': 0}
results = search_scavio(query, num)
return {'results': results, 'provider': 'scavio',
'latency_ms': int((time.time() - start) * 1000), 'cost': 0.005}步骤 3: 并行测试两个提供商
通过两个提供商运行相同的查询,以验证 Scavio 在切换之前返回相同的结果。
test_queries = [
'best CRM software 2026',
'python web scraping tutorial',
'react server components explained',
]
for query in test_queries:
google_results = search_google_cse(query, 5)
scavio_results = search_scavio(query, 5)
print(f'Query: {query}')
print(f' Google CSE: {len(google_results)} results')
print(f' Scavio: {len(scavio_results)} results')
if scavio_results:
print(f' Top Scavio: {scavio_results[0]["title"][:60]}')
print()步骤 4: 直接替换:完全删除 Google CSE
验证后,仅将您的搜索功能替换为 Scavio。这是您的迁移后状态——不依赖 Google。
import requests, os
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
def search(query: str, num: int = 10) -> list:
"""Drop-in replacement for Google CSE. Same return format."""
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us', 'num_results': num})
resp.raise_for_status()
return [{'title': r['title'], 'link': r['link'],
'snippet': r.get('snippet', '')} for r in resp.json().get('organic_results', [])]
# Usage is identical to before:
results = search('best CRM software 2026')
for r in results:
print(f'{r["title"]}: {r["link"]}')
print(f'Cost: $0.005 per query, 250 free/month')Python 示例
import requests, os
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
def search(query, num=10):
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us', 'num_results': num})
resp.raise_for_status()
return [{'title': r['title'], 'link': r['link'], 'snippet': r.get('snippet', '')}
for r in resp.json().get('organic_results', [])]
results = search('best CRM software 2026')
for r in results:
print(f'{r["title"]}: {r["link"]}')JavaScript 示例
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
async function search(query, num = 10) {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query, country_code: 'us', num_results: num })
});
const data = await resp.json();
return (data.organic_results || []).map(r => ({
title: r.title, link: r.link, snippet: r.snippet || ''
}));
}
search('best CRM software 2026').then(results =>
results.forEach(r => console.log(`${r.title}: ${r.link}`)));预期输出
Query: best CRM software 2026
Google CSE: 0 results
Scavio: 10 results
Top Scavio: Best CRM Software of 2026 - Forbes Advisor
Cost: $0.005 per query, 250 free/month