Files
mirosociety/skills/searxng_skills/searxng_skills.md
T
2026-09-27 23:06:24 +08:00

331 lines
8.2 KiB
Markdown

# SearXNG API Skills
## 基本信息
- **URL**: `https://searxng.erhe.top`
- **API Token**: `fGWEFWGrgasegtjt1jUJG`
- **端口**: 通过 Caddy 反向代理
## API 调用方法
### 1. 搜索 API
```bash
# 基础搜索
curl "https://searxng.erhe.top/search?q=关键词&token=fGWEFWGrgasegtjt1jUJG"
# JSON 格式返回(推荐)
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG"
```
### 2. Python 调用示例
```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 调用示例
```python
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. 指定语言
```bash
curl "https://searxng.erhe.top/search?q=关键词&format=json&token=fGWEFWGrgasegtjt1jUJG&language=zh"
```
语言代码:
- `zh` - 中文
- `en` - 英文
- `ja` - 日文
- `de` - 德文
- `fr` - 法文
### 2. 指定分类
```bash
# 图片搜索
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` - IT
- `science` - 科学
### 3. 安全搜索
```bash
# 关闭安全搜索 (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. 时间范围
```bash
# 最近一天
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 返回格式说明
```json
{
"query": "搜索关键词",
"results": [
{
"title": "结果标题",
"url": "https://example.com",
"content": "结果摘要",
"engine": "搜索引擎名称",
"template": "模板类型",
"publishedDate": "发布日期 (如果有)",
"img_src": "图片URL (如果有)",
"thumbnail": "缩略图URL (如果有)",
"category": "分类"
}
],
"answers": [],
"corrections": [],
"infoboxes": [],
"suggestions": ["建议搜索词"],
"unresponsive_engines": []
}
```
## 获取配置信息
```bash
# 获取 SearXNG 配置
curl "https://searxng.erhe.top/config&token=fGWEFWGrgasegtjt1jUJG"
```
## 完整 Python 示例
```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}")
```
## 错误处理
```python
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"` |
## 注意事项
1. **Token 必须**: 所有 API 请求必须包含 `token` 参数
2. **返回格式**: 推荐使用 `format=json` 获取结构化数据
3. **超时处理**: 搜索可能需要几秒钟,建议设置超时
4. **请求频率**: 避免过于频繁的请求,可能触发限制
5. **结果数量**: 默认返回多个搜索引擎的结果
## 获取帮助
- SearXNG 主页: `https://searxng.erhe.top`
- SearXNG 文档: `https://docs.searxng.org`