37 lines
1.7 KiB
Python
37 lines
1.7 KiB
Python
"""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 |