Coverage for agentos/marketplace/skills/wikipedia/wikipedia.py: 5%
39 statements
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-04 16:20 +0800
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-04 16:20 +0800
1"""
2wikipedia — Wikipedia 搜索与摘要获取(无需 API Key)。
4Category: knowledge
5"""
8def run(action: str, query: str = "", lang: str = "zh") -> str:
9 """Wikipedia 查询工具。action: search/summary/page。lang: zh/en/ja 等。"""
10 import urllib.request, urllib.parse, json, re
12 if not query:
13 return "[wikipedia] 需要 query 参数"
15 base = f"https://{lang}.wikipedia.org/w/api.php"
17 try:
18 if action == "search":
19 params = urllib.parse.urlencode({
20 "action": "query", "list": "search", "srsearch": query,
21 "format": "json", "srlimit": 10
22 })
23 url = f"{base}?{params}"
24 req = urllib.request.Request(url, headers={"User-Agent": "AgentOS/1.0"})
25 with urllib.request.urlopen(req, timeout=10) as resp:
26 data = json.loads(resp.read())
27 results = data.get("query",{}).get("search",[])
28 if not results:
29 return f"[wikipedia] 未找到 '{query}' 相关条目"
30 lines = [f"Wikipedia 搜索结果 ({len(results)} 条):"]
31 for i, r in enumerate(results):
32 lines.append(f" {i+1}. {r['title']} - {r.get('snippet','')[:80]}...")
33 return "\n".join(lines)
35 if action in ("summary", "page"):
36 # Get page extract
37 params = urllib.parse.urlencode({
38 "action": "query", "prop": "extracts", "exintro": "1",
39 "explaintext": "1", "titles": query, "format": "json",
40 "exchars": "2000" if action == "summary" else "5000"
41 })
42 url = f"{base}?{params}"
43 req = urllib.request.Request(url, headers={"User-Agent": "AgentOS/1.0"})
44 with urllib.request.urlopen(req, timeout=10) as resp:
45 data = json.loads(resp.read())
46 pages = data.get("query",{}).get("pages",{})
47 for pid, page in pages.items():
48 if pid == "-1":
49 return f"[wikipedia] 页面 '{query}' 不存在"
50 title = page.get("title","")
51 extract = page.get("extract","")
52 if not extract:
53 return f"[wikipedia] 页面 '{title}' 无内容"
54 return f"=== {title} ===\n\n{extract}"
55 return f"[wikipedia] 未找到 '{query}'"
57 return f"[wikipedia] 未知操作: {action}, 支持: search/summary/page"
58 except Exception as e:
59 return f"[wikipedia] 查询失败: {e}"
62__all__ = ["run"]