omni: веб-панель (serve + /api), дайджест, arxiv API-fallback, HF trending unwrap

This commit is contained in:
dev
2026-10-25 19:11:52 +03:00
parent c4d188520f
commit e1368f2a46
6 changed files with 446 additions and 2 deletions

View File

@@ -1,5 +1,6 @@
"""CLI: providers / search / fanout / cards / top / find / stats / export."""
import argparse
import pathlib
import concurrent.futures
import json
import sys
@@ -175,6 +176,26 @@ def cmd_feed(args):
return 0
def cmd_digest(args):
"""Сводка по базе: топ записей по категориям за прогон, в markdown."""
rows = store.top(limit=args.limit * 8)
by_cat = {}
for prov, kind, src, title, sc, price, cur, url in rows:
by_cat.setdefault(src or prov, []).append((sc, title, url))
out = [f"# дайджест omni · {__import__('datetime').date.today()}", ""]
for cat, entries in sorted(by_cat.items(), key=lambda x: -len(x[1])):
out.append(f"## {cat} · {len(entries)}")
for sc, title, url in entries[:args.limit]:
out.append(f"- [{title[:110]}]({url}) · {sc:.2f}")
out.append("")
text = chr(10).join(out)
path = args.out
pathlib.Path(path).parent.mkdir(parents=True, exist_ok=True)
pathlib.Path(path).write_text(text, encoding="utf-8")
print(f"дайджест: {len(by_cat)} категорий, {len(rows)} записей -> {path}")
return 0
def cmd_export(args):
n, path = store.export(args.out, args.fmt, args.limit)
print(f"выгружено {n} записей -> {path}")
@@ -246,6 +267,15 @@ def main(argv=None):
sp.add_argument("--verbose", action="store_true")
sp.set_defaults(fn=cmd_feed)
sp = sub.add_parser("serve", help="веб-панель + JSON API")
sp.add_argument("--port", type=int, default=8077)
sp.set_defaults(fn=lambda a: __import__("omni.serve", fromlist=["serve"]).serve(a.port))
sp = sub.add_parser("digest", help="markdown-дайджест из базы")
sp.add_argument("--limit", type=int, default=8)
sp.add_argument("--out", default="data/digest.md")
sp.set_defaults(fn=cmd_digest)
sp = sub.add_parser("export", help="выгрузка jsonl/csv")
sp.add_argument("--out", default="data/top.jsonl")
sp.add_argument("--fmt", default="jsonl", choices=["jsonl", "csv"])