Coverage for agentos/marketplace/skills/wikipedia/wikipedia.py: 5%

39 statements  

« prev     ^ index     » next       coverage.py v7.14.3, created at 2026-07-06 08:01 +0800

1""" 

2wikipedia — Wikipedia 搜索与摘要获取(无需 API Key)。 

3 

4Category: knowledge 

5""" 

6 

7 

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 

11 

12 if not query: 

13 return "[wikipedia] 需要 query 参数" 

14 

15 base = f"https://{lang}.wikipedia.org/w/api.php" 

16 

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) 

34 

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}'" 

56 

57 return f"[wikipedia] 未知操作: {action}, 支持: search/summary/page" 

58 except Exception as e: 

59 return f"[wikipedia] 查询失败: {e}" 

60 

61 

62__all__ = ["run"]