From 40ace87cbf80ab385187bc4ad8d981cbfdbc63ae Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 29 Mar 2026 17:16:10 +0000 Subject: [PATCH] search-searxNG --- usr/bin/search-searxNG | 79 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100755 usr/bin/search-searxNG diff --git a/usr/bin/search-searxNG b/usr/bin/search-searxNG new file mode 100755 index 0000000..5531804 --- /dev/null +++ b/usr/bin/search-searxNG @@ -0,0 +1,79 @@ +#!/usr/bin/env python + +import sys +import subprocess +import time +import random + + +def ensure_package(pkg): + try: + __import__(pkg) + except ImportError: + subprocess.check_call([sys.executable, "-m", "pip", "install", pkg]) + + +ensure_package("requests") + +import requests +import argparse + + +def create_session(): + s = requests.Session() + s.headers.update({ + "User-Agent": "Mozilla/5.0" + }) + return s + + +def recherche_searx(session, base_url, query, n): + url = f"{base_url}/search" + params = { + "q": query, + "format": "json" + } + + try: + r = session.get(url, params=params, timeout=5) + if r.status_code != 200: + return [] + + data = r.json() + results = [] + + for item in data.get("results", [])[:n]: + title = item.get("title") + link = item.get("url") + if title and link: + results.append((title, link)) + + time.sleep(random.uniform(1, 2)) + return results + + except Exception: + return [] + + +def main(argc, argv): + parser = argparse.ArgumentParser() + parser.add_argument("query", type=str) + parser.add_argument("-n", "--number", type=int, default=5) + parser.add_argument("--engine", type=str, default="https://searx.be") + + args = parser.parse_args(argv[1:]) + + session = create_session() + results = recherche_searx(session, args.engine, args.query, args.number) + + if not results: + print("Aucun résultat (instance HS ou bloquée)") + return + + for i, (title, link) in enumerate(results, 1): + print(f"{i}. {title}") + print(link) + + +if __name__ == "__main__": + main(len(sys.argv), sys.argv)