8.2 KiB
8.2 KiB
SearXNG API Skills
基本信息
- URL:
https://searxng.erhe.top - API Token:
fGWEFWGrgasegtjt1jUJG - 端口: 通过 Caddy 反向代理
API 调用方法
1. 搜索 API
# 基础搜索
curl "https://searxng.erhe.top/search?q=关键词&token=fGWEFWGrgasegtjt1jUJG"
# JSON 格式返回(推荐)
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG"
2. Python 调用示例
import requests
import json
def search_searxng(query, format_type="json"):
"""
使用 SearXNG 搜索
参数:
query: 搜索关键词
format_type: 返回格式 (json/html/csv/rss)
返回:
dict: 搜索结果
"""
url = "https://searxng.erhe.top/search"
params = {
"q": query,
"format": format_type,
"token": "fGWEFWGrgasegtjt1jUJG"
}
response = requests.get(url, params=params)
if format_type == "json":
return response.json()
else:
return response.text
# 使用示例
results = search_searxng("python 教程")
print(f"找到 {len(results['results'])} 个结果")
for result in results['results'][:5]:
print(f"- {result['title']}: {result['url']}")
3. Claude Code / Agent 调用示例
import urllib.request
import urllib.parse
import json
def search(query):
"""搜索函数"""
base_url = "https://searxng.erhe.top/search"
params = urllib.parse.urlencode({
"q": query,
"format": "json",
"token": "fGWEFWGrgasegtjt1jUJG"
})
url = f"{base_url}?{params}"
with urllib.request.urlopen(url) as response:
data = json.loads(response.read().decode())
return data
# Agent 中使用
results = search("如何在 Linux 中查找文件")
for r in results['results'][:3]:
print(f"标题: {r['title']}")
print(f"链接: {r['url']}\n")
高级搜索
1. 指定语言
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG&language=zh"
语言代码:
zh- 中文en- 英文ja- 日文de- 德文fr- 法文
2. 指定分类
# 图片搜索
curl "https://searxng.erhe.top/search?q=猫&format=json&token=fGWEFWGrgasegtjt1jUJG&categories=images"
# 视频搜索
curl "https://searxng.erhe.top/search?q=教程&format=json&token=fGWEFWGrgasegtjt1jUJG&categories=videos"
# 新闻搜索
curl "https://searxng.erhe.top/search?q=科技&format=json&token=fGWEFWGrgasegtjt1jUJG&categories=news"
分类列表:
general- 通用images- 图片videos- 视频news- 新闻music- 音乐files- 文件it- ITscience- 科学
3. 安全搜索
# 关闭安全搜索 (0)
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG&safesearch=0"
# 适中 (1)
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG&safesearch=1"
# 严格 (2)
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG&safesearch=2"
4. 时间范围
# 最近一天
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG&time_range=day"
# 最近一周
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG&time_range=week"
# 最近一月
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG&time_range=month"
# 最近一年
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG&time_range=year"
JSON 返回格式说明
{
"query": "搜索关键词",
"results": [
{
"title": "结果标题",
"url": "https://example.com",
"content": "结果摘要",
"engine": "搜索引擎名称",
"template": "模板类型",
"publishedDate": "发布日期 (如果有)",
"img_src": "图片URL (如果有)",
"thumbnail": "缩略图URL (如果有)",
"category": "分类"
}
],
"answers": [],
"corrections": [],
"infoboxes": [],
"suggestions": ["建议搜索词"],
"unresponsive_engines": []
}
获取配置信息
# 获取 SearXNG 配置
curl "https://searxng.erhe.top/config&token=fGWEFWGrgasegtjt1jUJG"
完整 Python 示例
#!/usr/bin/env python3
"""
SearXNG API 客户端示例
"""
import requests
import json
import sys
SEARXNG_URL = "https://searxng.erhe.top"
API_TOKEN = "fGWEFWGrgasegtjt1jUJG"
def search(query,
format_type="json",
categories=None,
language="auto",
safesearch=0,
time_range=None):
"""
搜索函数
参数:
query: 搜索关键词
format_type: 返回格式 (json/html/csv/rss)
categories: 分类列表 (images/videos/news/music)
language: 语言代码 (auto/zh/en/ja/de/fr)
safesearch: 安全搜索级别 (0/1/2)
time_range: 时间范围 (day/week/month/year)
返回:
dict: 搜索结果
"""
params = {
"q": query,
"format": format_type,
"token": API_TOKEN,
"language": language,
"safesearch": safesearch
}
if categories:
params["categories"] = categories
if time_range:
params["time_range"] = time_range
response = requests.get(f"{SEARXNG_URL}/search", params=params)
if format_type == "json":
return response.json()
else:
return response.text
def format_results(results, max_results=10):
"""格式化输出结果"""
print(f"\n{'='*60}")
print(f"查询: {results.get('query')}")
print(f"找到 {len(results.get('results', []))} 个结果")
print(f"{'='*60}\n")
for i, result in enumerate(results.get('results', [])[:max_results], 1):
print(f"{i}. {result.get('title', '无标题')}")
print(f" 链接: {result.get('url', '无链接')}")
if result.get('content'):
content = result.get('content', '')[:150]
print(f" 摘要: {content}...")
print(f" 来源: {result.get('engine', '未知')}")
print()
if __name__ == "__main__":
# 示例搜索
if len(sys.argv) > 1:
query = " ".join(sys.argv[1:])
else:
query = "Python 编程"
try:
results = search(query, categories="general")
format_results(results)
except Exception as e:
print(f"搜索失败: {e}")
错误处理
import requests
def safe_search(query):
"""安全的搜索函数,包含错误处理"""
try:
response = requests.get(
"https://searxng.erhe.top/search",
params={
"q": query,
"format": "json",
"token": "fGWEFWGrgasegtjt1jUJG"
},
timeout=10
)
if response.status_code == 200:
return response.json()
elif response.status_code == 403:
return {"error": "API token 无效或缺失"}
else:
return {"error": f"请求失败: {response.status_code}"}
except requests.exceptions.Timeout:
return {"error": "请求超时"}
except requests.exceptions.ConnectionError:
return {"error": "连接失败,请检查网络"}
except Exception as e:
return {"error": str(e)}
快速参考
| 功能 | 命令 |
|---|---|
| 基础搜索 | curl "https://searxng.erhe.top/search?q=关键词&token=fGWEFWGrgasegtjt1jUJG" |
| JSON 返回 | 添加 &format=json |
| 图片搜索 | 添加 &categories=images |
| 中文结果 | 添加 &language=zh |
| 最近一周 | 添加 &time_range=week |
| 获取配置 | curl "https://searxng.erhe.top/config&token=fGWEFWGrgasegtjt1jUJG" |
注意事项
- Token 必须: 所有 API 请求必须包含
token参数 - 返回格式: 推荐使用
format=json获取结构化数据 - 超时处理: 搜索可能需要几秒钟,建议设置超时
- 请求频率: 避免过于频繁的请求,可能触发限制
- 结果数量: 默认返回多个搜索引擎的结果
获取帮助
- SearXNG 主页:
https://searxng.erhe.top - SearXNG 文档:
https://docs.searxng.org