Initial commit with translated description
This commit is contained in:
63
SKILL.md
Normal file
63
SKILL.md
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
---
|
||||||
|
name: baidu-search
|
||||||
|
description: "使用百度AI搜索引擎(BDSE)进行网络搜索。"
|
||||||
|
metadata: { "openclaw": { "emoji": "🔍︎", "requires": { "bins": ["python3"], "env":["BAIDU_API_KEY"]},"primaryEnv":"BAIDU_API_KEY" } }
|
||||||
|
---
|
||||||
|
|
||||||
|
# Baidu Search
|
||||||
|
|
||||||
|
Search the web via Baidu AI Search API.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
### API Key Configuration
|
||||||
|
This skill requires a **BAIDU_API_KEY** to be configured in OpenClaw.
|
||||||
|
|
||||||
|
If you don't have an API key yet, please visit:
|
||||||
|
**https://console.bce.baidu.com/ai-search/qianfan/ais/console/apiKey**
|
||||||
|
|
||||||
|
For detailed setup instructions, see:
|
||||||
|
[references/apikey-fetch.md](references/apikey-fetch.md)
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 skills/baidu-search/scripts/search.py '<JSON>'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Request Parameters
|
||||||
|
|
||||||
|
| Param | Type | Required | Default | Description |
|
||||||
|
|-------|------|----------|---------|-------------|
|
||||||
|
| query | str | yes | - | Search query |
|
||||||
|
| count | int | no | 10 | Number of results to return, range 1-50 |
|
||||||
|
| freshness | str | no | Null | Time range, two formats: format one is ”YYYY-MM-DDtoYYYY-MM-DD“, and format two includes pd, pw, pm, and py, representing the past 24 hours, past 7 days, past 31 days, and past 365 days respectively |
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Basic search
|
||||||
|
python3 scripts/search.py '{"query":"人工智能"}'
|
||||||
|
|
||||||
|
# Freshness first format "YYYY-MM-DDtoYYYY-MM-DD" example
|
||||||
|
python3 scripts/search.py '{
|
||||||
|
"query":"最新新闻",
|
||||||
|
"freshness":"2025-09-01to2025-09-08"
|
||||||
|
}'
|
||||||
|
|
||||||
|
# Freshness second format pd、pw、pm、py example
|
||||||
|
python3 scripts/search.py '{
|
||||||
|
"query":"最新新闻",
|
||||||
|
"freshness":"pd"
|
||||||
|
}'
|
||||||
|
|
||||||
|
# set count, the number of results to return
|
||||||
|
python3 scripts/search.py '{
|
||||||
|
"query":"旅游景点",
|
||||||
|
"count": 20,
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
Fully functional.
|
||||||
6
_meta.json
Normal file
6
_meta.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"ownerId": "kn7akgt520t01vgs2tzx7yk6m180kt26",
|
||||||
|
"slug": "baidu-search",
|
||||||
|
"version": "1.1.3",
|
||||||
|
"publishedAt": 1773828934466
|
||||||
|
}
|
||||||
58
references/apikey-fetch.md
Normal file
58
references/apikey-fetch.md
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# Baidu API Key Setup Guide (OpenClaw)
|
||||||
|
|
||||||
|
## BAIDU_API_KEY Not Configured
|
||||||
|
|
||||||
|
When the `BAIDU_API_KEY` environment variable is not set, follow these steps:
|
||||||
|
|
||||||
|
### 1. Get API Key
|
||||||
|
Visit: **https://console.bce.baidu.com/ai-search/qianfan/ais/console/apiKey**
|
||||||
|
|
||||||
|
- Log in to your Baidu Cloud account
|
||||||
|
- Create an application or view existing API keys
|
||||||
|
- Copy your **API Key** (only API Key is needed)
|
||||||
|
|
||||||
|
### 2. Configure OpenClaw
|
||||||
|
Edit the OpenClaw configuration file: `~/.openclaw/openclaw.json`
|
||||||
|
|
||||||
|
Add or merge the following structure:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"skills": {
|
||||||
|
"entries": {
|
||||||
|
"baidu-search": {
|
||||||
|
"env": {
|
||||||
|
"BAIDU_API_KEY": "your_actual_api_key_here"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Replace `"your_actual_api_key_here"` with your actual API key.
|
||||||
|
|
||||||
|
### 3. Verify Configuration
|
||||||
|
```bash
|
||||||
|
# Check JSON format
|
||||||
|
cat ~/.openclaw/openclaw.json | python -m json.tool
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Restart OpenClaw
|
||||||
|
```bash
|
||||||
|
openclaw gateway restart
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Test
|
||||||
|
```bash
|
||||||
|
cd ~/.openclaw/workspace/skills/baidu-search
|
||||||
|
python3 scripts/search.py '{"query": "test search"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
- Ensure `~/.openclaw/openclaw.json` exists with correct JSON format
|
||||||
|
- Confirm API key is valid and Baidu AI Search service is activated
|
||||||
|
- Check account balance on Baidu Cloud
|
||||||
|
- Restart OpenClaw after configuration changes
|
||||||
|
|
||||||
|
**Recommended**: Use OpenClaw configuration file for centralized management
|
||||||
102
scripts/search.py
Normal file
102
scripts/search.py
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
import sys
|
||||||
|
import json
|
||||||
|
import requests
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
|
||||||
|
def baidu_search(api_key, requestBody: dict):
|
||||||
|
url = "https://qianfan.baidubce.com/v2/ai_search/web_search"
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Authorization": "Bearer %s" % api_key,
|
||||||
|
"X-Appbuilder-From": "openclaw",
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 使用POST方法发送JSON数据
|
||||||
|
response = requests.post(url, json=requestBody, headers=headers)
|
||||||
|
response.raise_for_status()
|
||||||
|
results = response.json()
|
||||||
|
if "code" in results:
|
||||||
|
raise Exception(results["message"])
|
||||||
|
datas = results["references"]
|
||||||
|
keys_to_remove = {"snippet"}
|
||||||
|
for item in datas:
|
||||||
|
for key in keys_to_remove:
|
||||||
|
if key in item:
|
||||||
|
del item[key]
|
||||||
|
return datas
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
print("Usage: python baidu_search.py <Json>")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
query = sys.argv[1]
|
||||||
|
parse_data = {}
|
||||||
|
try:
|
||||||
|
parse_data = json.loads(query)
|
||||||
|
print(f"success parse request body: {parse_data}")
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
print(f"JSON parse error: {e}")
|
||||||
|
|
||||||
|
if "query" not in parse_data:
|
||||||
|
print("Error: query must be present in request body.")
|
||||||
|
sys.exit(1)
|
||||||
|
count = 10
|
||||||
|
search_filter = {}
|
||||||
|
if "count" in parse_data:
|
||||||
|
count = int(parse_data["count"])
|
||||||
|
if count <= 0:
|
||||||
|
count = 10
|
||||||
|
elif count > 50:
|
||||||
|
count = 50
|
||||||
|
current_time = datetime.now()
|
||||||
|
end_date = (current_time + timedelta(days=1)).strftime("%Y-%m-%d")
|
||||||
|
pattern = r'\d{4}-\d{2}-\d{2}to\d{4}-\d{2}-\d{2}'
|
||||||
|
if "freshness" in parse_data:
|
||||||
|
if parse_data["freshness"] in ["pd", "pw", "pm", "py"]:
|
||||||
|
if parse_data["freshness"] == "pd":
|
||||||
|
start_date = (current_time - timedelta(days=1)).strftime("%Y-%m-%d")
|
||||||
|
if parse_data["freshness"] == "pw":
|
||||||
|
start_date = (current_time - timedelta(days=6)).strftime("%Y-%m-%d")
|
||||||
|
if parse_data["freshness"] == "pm":
|
||||||
|
start_date = (current_time - timedelta(days=30)).strftime("%Y-%m-%d")
|
||||||
|
if parse_data["freshness"] == "py":
|
||||||
|
start_date = (current_time - timedelta(days=364)).strftime("%Y-%m-%d")
|
||||||
|
search_filter = {"range": {"page_time": {"gte": start_date, "lt": end_date}}}
|
||||||
|
elif re.match(pattern, parse_data["freshness"]):
|
||||||
|
start_date = parse_data["freshness"].split("to")[0]
|
||||||
|
end_date = parse_data["freshness"].split("to")[1]
|
||||||
|
search_filter = {"range": {"page_time": {"gte": start_date, "lt": end_date}}}
|
||||||
|
else:
|
||||||
|
print(f"Error: freshness ({parse_data['freshness']}) must be pd, pw, pm, py, or match {pattern}.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# We will pass these via env vars for security
|
||||||
|
api_key = os.getenv("BAIDU_API_KEY")
|
||||||
|
|
||||||
|
if not api_key:
|
||||||
|
print("Error: BAIDU_API_KEY must be set in environment.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
request_body = {
|
||||||
|
"messages": [
|
||||||
|
{
|
||||||
|
"content": parse_data["query"],
|
||||||
|
"role": "user"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"search_source": "baidu_search_v2",
|
||||||
|
"resource_type_filter": [{"type": "web", "top_k": count}],
|
||||||
|
"search_filter": search_filter
|
||||||
|
}
|
||||||
|
try:
|
||||||
|
results = baidu_search(api_key, request_body)
|
||||||
|
print(json.dumps(results, indent=2, ensure_ascii=False))
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error: {str(e)}")
|
||||||
|
sys.exit(1)
|
||||||
Reference in New Issue
Block a user