添加百度搜索

This commit is contained in:
朱潮 2026-03-21 18:40:01 +08:00
parent 43a77b3015
commit ace37fbec2
3 changed files with 160 additions and 0 deletions

View File

@ -0,0 +1,52 @@
---
name: baidu-search
description: Search the web using Baidu AI Search Engine (BDSE). Use for live information, documentation, or research topics.
metadata: { "openclaw": { "emoji": "🔍︎", "requires": { "bins": ["python3"], "env":["BAIDU_API_KEY"]},"primaryEnv":"BAIDU_API_KEY" } }
---
# Baidu Search
Search the web via Baidu AI Search API.
## 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.

View File

@ -0,0 +1,6 @@
{
"ownerId": "kn7akgt520t01vgs2tzx7yk6m180kt26",
"slug": "baidu-search",
"version": "1.1.2",
"publishedAt": 1773394754557
}

View 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)