Pour les décisions d'achat, l'enrichissement de catalogue ou l'analyse concurrentielle, la recherche de produits nécessite de collecter des données provenant de multiples sources. Un agent de recherche de produits automatise ce processus en interrogeant Google pour les avis et opinions d'experts, Amazon pour les prix et les retours clients, et Walmart pour des prix alternatifs, puis en synthétisant le tout dans un rapport structuré. Ce tutoriel construit un tel agent en utilisant le point d'accès unifié de l'API Scavio, sans avoir à gérer plusieurs clés API ou limites de débit.
Prérequis
- Python 3.10 ou supérieur
- requests et concurrent.futures disponibles
- Une clé API Scavio
- Compréhension de base de la fusion et du formatage des données
Parcours
Étape 1: Interroger les trois plates-formes simultanément
Utiliser ThreadPoolExecutor pour interroger Google, Amazon et Walmart simultanément pour un nom de produit.
from concurrent.futures import ThreadPoolExecutor
def fetch_all(product: str) -> dict:
queries = {
"google": lambda: search_google(product + " review"),
"amazon": lambda: search_amazon(product),
"walmart": lambda: search_walmart(product),
}
with ThreadPoolExecutor(max_workers=3) as ex:
futures = {name: ex.submit(fn) for name, fn in queries.items()}
return {name: fut.result() for name, fut in futures.items()}Étape 2: Extraire la fourchette de prix d'Amazon et Walmart
Collecter les prix des deux plates-formes de commerce électronique et calculer le min et le max.
def price_range(data: dict) -> dict:
prices = []
for platform in ["amazon", "walmart"]:
for p in data[platform].get("products", [])[:5]:
ps = p.get("price", "")
if ps:
prices.append(float(ps.replace("$", "").replace(",", "")))
return {"min": min(prices) if prices else None, "max": max(prices) if prices else None}Étape 3: Extraire le sentiment des avis Google
Collecter les extraits de résultats organiques de Google qui contiennent des signaux d'avis comme des notes ou des recommandations.
def extract_review_signals(google_data: dict) -> list[str]:
signals = []
for r in google_data.get("organic_results", [])[:5]:
snippet = r.get("snippet", "")
if any(word in snippet.lower() for word in ["recommend", "rating", "review", "best", "worth"]):
signals.append(snippet)
return signalsÉtape 4: Assembler et imprimer le rapport de recherche
Combiner la fourchette de prix, les signaux d'avis et le nombre de produits dans un rapport de recherche formaté.
def research_product(product: str) -> str:
data = fetch_all(product)
pr = price_range(data)
signals = extract_review_signals(data["google"])
lines = [f"Product Research: {product}"]
lines.append(f"Price range: ${pr['min']} — ${pr['max']}")
lines.append("Review signals:")
for s in signals[:3]:
lines.append(f" - {s[:100]}")
return "\n".join(lines)Exemple Python
import os
import requests
from concurrent.futures import ThreadPoolExecutor
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def call(body: dict) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY}, json=body)
r.raise_for_status()
return r.json()
def research(product: str) -> dict:
with ThreadPoolExecutor(max_workers=3) as ex:
g = ex.submit(call, {"query": f"{product} review", "country_code": "us"})
a = ex.submit(call, {"platform": "amazon", "query": product, "marketplace": "US"})
w = ex.submit(call, {"platform": "walmart", "query": product})
return {"google": g.result(), "amazon": a.result(), "walmart": w.result()}
if __name__ == "__main__":
data = research("Sony WH-1000XM5")
amazon_products = data["amazon"].get("products", [])
print(f"Amazon listings: {len(amazon_products)}")
if amazon_products:
print(f"Top Amazon price: {amazon_products[0].get('price')}")
google_count = len(data["google"].get("organic_results", []))
print(f"Google results: {google_count}")Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
async function call(body) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify(body)
});
return res.json();
}
async function research(product) {
const [google, amazon, walmart] = await Promise.all([
call({ query: `${product} review`, country_code: "us" }),
call({ platform: "amazon", query: product, marketplace: "US" }),
call({ platform: "walmart", query: product })
]);
return { google, amazon, walmart };
}
async function main() {
const data = await research("Sony WH-1000XM5");
console.log(`Amazon listings: ${data.amazon.products?.length || 0}`);
console.log(`Google results: ${data.google.organic_results?.length || 0}`);
}
main().catch(console.error);Sortie attendue
Product Research: Sony WH-1000XM5
Price range: $249.99 — $349.00
Review signals:
- The WH-1000XM5 remains our top recommendation for noise-canceling headphones...
- Rated 4.8/5 stars across 50,000+ verified reviews on Amazon...
- Best premium wireless headphones in 2026 according to our testing...