v1.0.4: 基本搜索功能 - 按网址/标题/任务名子串匹配查找已爬内容, 支持跳转预览
This commit is contained in:
@@ -443,6 +443,69 @@ def api_task_probe(tid):
|
||||
return jsonify(result)
|
||||
|
||||
|
||||
# ---------------- API: 搜索 ----------------
|
||||
|
||||
@app.route("/api/search")
|
||||
def api_search():
|
||||
"""基本搜索: 对任务名/网址/标题做子串匹配 (仅遍历本地内存数据, 轻量)"""
|
||||
q = (request.args.get("q") or "").strip()
|
||||
if not q:
|
||||
return jsonify({"q": q, "count": 0, "results": []})
|
||||
ql = q.lower()
|
||||
results = []
|
||||
seen = set()
|
||||
for task in store.load_tasks():
|
||||
if task.get("deleted_at"):
|
||||
continue # 回收站任务不参与搜索
|
||||
auto = task.get("auto") or {}
|
||||
task_hit = (
|
||||
ql in (task.get("name") or "").lower()
|
||||
or any(ql in u.lower() for u in task.get("urls", []))
|
||||
or ql in ((auto.get("seed_url") or "").lower())
|
||||
)
|
||||
for run in store.get_runs(task["id"]):
|
||||
for r in run.get("results", []):
|
||||
url = r.get("url") or ""
|
||||
title = r.get("title") or ""
|
||||
if ql not in url.lower() and ql not in title.lower():
|
||||
continue
|
||||
key = (task["id"], run.get("id"), url)
|
||||
if key in seen:
|
||||
continue
|
||||
seen.add(key)
|
||||
results.append({
|
||||
"type": "page",
|
||||
"task_id": task["id"],
|
||||
"task_name": task.get("name", ""),
|
||||
"mode": task.get("mode", ""),
|
||||
"run_id": run.get("id", ""),
|
||||
"run_status": run.get("status", ""),
|
||||
"url": url,
|
||||
"title": title,
|
||||
"status": r.get("status", ""),
|
||||
"crawl_time": r.get("crawl_time", ""),
|
||||
"html_file": r.get("html_file", ""),
|
||||
"txt_file": r.get("txt_file", ""),
|
||||
"meta_file": r.get("meta_file", ""),
|
||||
"images": len(r.get("images", []) or []),
|
||||
})
|
||||
if len(results) >= 100:
|
||||
break
|
||||
if len(results) >= 100:
|
||||
break
|
||||
if task_hit and len(results) < 100:
|
||||
results.append({
|
||||
"type": "task",
|
||||
"task_id": task["id"],
|
||||
"task_name": task.get("name", ""),
|
||||
"mode": task.get("mode", ""),
|
||||
"urls_count": len(task.get("urls", [])),
|
||||
"created_at": task.get("created_at", ""),
|
||||
"seed_url": auto.get("seed_url", ""),
|
||||
})
|
||||
return jsonify({"q": q, "count": len(results), "results": results})
|
||||
|
||||
|
||||
# ---------------- API: 运行记录与文件 ----------------
|
||||
|
||||
@app.route("/api/runs/<rid>")
|
||||
|
||||
Reference in New Issue
Block a user