init: Search Hub - 统一多搜索引擎聚合服务

This commit is contained in:
2026-05-09 18:46:05 +08:00
commit 81d726179c
27 changed files with 3179 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
"""SearXNG 搜索源 — 自托管元搜索引擎"""
import time
import requests
from providers.base import BaseProvider, SearchResult
class SearXNGProvider(BaseProvider):
name = 'searxng'
display_name = 'SearXNG'
needs_api_key = False
enabled = True
priority = 30
def __init__(self, config: dict):
super().__init__(config)
sc = config.get('searxng', {})
self.base_url = (sc.get('base_url') or 'http://localhost:8888').rstrip('/')
def is_available(self) -> bool:
return True
def search(self, query: str, max_results: int = 10) -> list:
url = f'{self.base_url}/search'
params = {
'q': query,
'format': 'json',
'language': 'zh-CN',
'categories': 'general',
'pageno': 1,
}
try:
resp = requests.get(url, params=params, timeout=15,
headers={'User-Agent': 'SearchHub/1.0',
'Accept': 'application/json'})
if resp.status_code != 200:
return []
data = resp.json()
results = []
for item in data.get('results', []):
published = item.get('publishedDate', '')
if published:
try:
published = published.replace('T', ' ').split('+')[0].split('Z')[0]
except Exception:
pass
results.append(SearchResult(
title=item.get('title', ''),
url=item.get('url', ''),
content=item.get('content', ''),
score=item.get('score', 0.5),
source=self.name,
published_date=published,
))
return results[:max_results]
except requests.exceptions.RequestException:
return []