#!/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)