omni-parse: 12 провайдеров, sqlite+fts5, simhash-дедуп, фильтр релевантности
This commit is contained in:
37
omni/providers/treg.py
Normal file
37
omni/providers/treg.py
Normal file
@@ -0,0 +1,37 @@
|
||||
"""treg.to: публичного поискового API нет, работаем только со своим токеном.
|
||||
|
||||
Провайдер существует, чтобы в общем списке было видно: источник требует доступ,
|
||||
а не молча отсутствует. Если TREG_TOKEN задан и у аккаунта есть веб-поиск,
|
||||
провайдер отдаст результаты, иначе сразу скажет причину.
|
||||
"""
|
||||
import urllib.parse
|
||||
|
||||
from .. import config, net
|
||||
from ..model import Item
|
||||
|
||||
UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/141.0.0.0 Safari/537.36"}
|
||||
|
||||
|
||||
def available(name="treg"):
|
||||
if not config.KEYS.get("TREG_TOKEN"):
|
||||
return False, "нужен TREG_TOKEN (публичного поиска нет)"
|
||||
return True, "токен есть"
|
||||
|
||||
|
||||
def search_treg(query, limit=10):
|
||||
tok = config.KEYS.get("TREG_TOKEN")
|
||||
if not tok:
|
||||
return []
|
||||
# основной путь: внутренний поиск по каталогу моделей/задач
|
||||
url = f"https://treg.to/api/search?q={urllib.parse.quote(query)}&limit={min(limit, 20)}"
|
||||
r = net.get(url, headers={**UA, "Authorization": f"Bearer {tok}"}, json_mode=True)
|
||||
d = r.json() or {}
|
||||
rows = d.get("results") or d.get("data") or []
|
||||
out = []
|
||||
for x in rows[:limit]:
|
||||
if not isinstance(x, dict):
|
||||
continue
|
||||
out.append(Item("treg", "result", url=x.get("url") or x.get("link") or "https://treg.to",
|
||||
title=x.get("title") or x.get("name") or "", text=(x.get("description") or "")[:1500],
|
||||
score=float(x.get("score") or 0)))
|
||||
return out
|
||||
Reference in New Issue
Block a user