#!/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(): session = requests.Session() session.headers.update({ "User-Agent": "Mozilla/5.0" }) return session def fetch(session, url, params=None, retries=2, timeout=5): for _ in range(retries): try: r = session.get(url, params=params, timeout=timeout) if r.status_code == 200: return r.json() time.sleep(random.uniform(1, 2)) except requests.RequestException: time.sleep(random.uniform(1, 2)) return None def recherche_qwant(session, query, n): url = "https://api.qwant.com/v3/search/web" params = { "q": query, "count": n, "offset": 0, "t": "web", "safesearch": 0, "locale": "en_US" } data = fetch(session, url, params=params) if not data: return [] results = [] items = data.get("data", {}).get("result", {}).get("items", []) for item in items[: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 def extract_text(session, url, max_chars): try: r = session.get(url, timeout=5) text = r.text return (text[:max_chars] + "...") if len(text) > max_chars else text except Exception as e: return f"[Erreur: {e}]" 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("--chars", type=int, default=1000) args = parser.parse_args(argv[1:]) session = create_session() results = recherche_qwant(session, args.query, args.number) for i, (title, link) in enumerate(results, 1): print(f"\n{i}. {title}") print(f"URL: {link}") snippet = extract_text(session, link, args.chars) print(f"Extrait: {snippet}") if __name__ == "__main__": main(len(sys.argv), sys.argv)