La comparaison des prix entre Amazon et Walmart aide les acheteurs à économiser de l'argent et les vendeurs à identifier des opportunités de prix. Interroger manuellement les deux plateformes est lent et les données deviennent rapidement obsolètes. Ce tutoriel construit un outil automatisé de comparaison de prix utilisant l'API Scavio qui recherche à la fois sur Amazon et Walmart le même produit, normalise les prix, fait correspondre des articles similaires entre les plateformes et affiche une comparaison côte à côte indiquant quelle plateforme offre la meilleure affaire.
Prérequis
- Python 3.10 ou supérieur
- bibliothèque requests installée
- Une clé API Scavio
- Produits à comparer entre les plateformes
Parcours
Étape 1: Interroger les deux plateformes simultanément
Rechercher sur Amazon et Walmart le même produit simultanément pour réduire la latence.
from concurrent.futures import ThreadPoolExecutor
def search_platform(platform: str, query: str) -> list[dict]:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query, "marketplace": "US"}
)
r.raise_for_status()
return r.json().get("products", [])
def compare(query: str) -> dict:
with ThreadPoolExecutor(max_workers=2) as ex:
a_fut = ex.submit(search_platform, "amazon", query)
w_fut = ex.submit(search_platform, "walmart", query)
return {"amazon": a_fut.result(), "walmart": w_fut.result()}Étape 2: Analyser et normaliser les prix
Extraire les prix des deux plateformes et les convertir en valeurs flottantes pour comparaison.
def parse_price(price_str: str) -> float | None:
if not price_str:
return None
return float(price_str.replace("$", "").replace(",", ""))
def normalize_product(product: dict, platform: str) -> dict:
return {
"platform": platform,
"title": product.get("title", ""),
"price": parse_price(product.get("price", "")),
"price_raw": product.get("price", ""),
"rating": product.get("rating"),
"url": product.get("url", product.get("link", "")),
}Étape 3: Trouver le meilleur prix entre les plateformes
Fusionner les résultats normalisés des deux plateformes et trier par prix pour trouver la meilleure offre.
def best_deals(query: str, top_n: int = 10) -> list[dict]:
data = compare(query)
items = []
for p in data["amazon"][:10]:
items.append(normalize_product(p, "amazon"))
for p in data["walmart"][:10]:
items.append(normalize_product(p, "walmart"))
return sorted(items, key=lambda x: x["price"] or float("inf"))[:top_n]Étape 4: Afficher le tableau de comparaison
Afficher un tableau de comparaison formaté montrant les meilleurs prix de chaque plateforme.
def print_comparison(query: str) -> None:
deals = best_deals(query)
print(f"Price comparison: {query}\n" + "-" * 60)
print(f"{'Platform':<10} {'Price':<10} {'Rating':<8} {'Title'}")
for d in deals:
price = f"${d['price']:.2f}" if d['price'] else 'N/A'
print(f"{d['platform']:<10} {price:<10} {d['rating'] or 'N/A':<8} {d['title'][:40]}")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 search(platform: str, query: str) -> list[dict]:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query, "marketplace": "US"})
r.raise_for_status()
return r.json().get("products", [])
def compare(query: str) -> None:
with ThreadPoolExecutor(max_workers=2) as ex:
a = ex.submit(search, "amazon", query)
w = ex.submit(search, "walmart", query)
items = []
for p in a.result()[:5]:
price = float(p.get("price", "0").replace("$", "").replace(",", "") or 0)
items.append({"src": "amazon", "price": price, "title": p.get("title", ""), "rating": p.get("rating")})
for p in w.result()[:5]:
price = float(p.get("price", "0").replace("$", "").replace(",", "") or 0)
items.append({"src": "walmart", "price": price, "title": p.get("title", ""), "rating": p.get("rating")})
items.sort(key=lambda x: x["price"] or float("inf"))
print(f"{'Source':<10} {'Price':<10} {'Rating':<8} {'Title'}")
for i in items:
print(f"{i['src']:<10} ${i['price']:<9.2f} {i['rating'] or 'N/A':<8} {i['title'][:40]}")
if __name__ == "__main__":
compare("AirPods Pro")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 search(platform, query) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform, query, marketplace: "US" })
});
const data = await res.json();
return (data.products || []).slice(0, 5).map(p => ({
src: platform,
title: p.title,
price: p.price ? parseFloat(p.price.replace(/[$,]/g, "")) : null,
rating: p.rating
}));
}
async function compare(query) {
const [amazon, walmart] = await Promise.all([
search("amazon", query), search("walmart", query)
]);
const all = [...amazon, ...walmart].sort((a, b) => (a.price || Infinity) - (b.price || Infinity));
console.log(`Price comparison: ${query}`);
all.forEach(i => console.log(`${i.src.padEnd(10)} $${i.price?.toFixed(2) || 'N/A'.padEnd(9)} ${i.title?.slice(0, 40)}`));
}
compare("AirPods Pro").catch(console.error);Sortie attendue
Source Price Rating Title
amazon $189.00 4.7 Apple AirPods Pro (2nd Generation)
walmart $189.00 4.7 Apple AirPods Pro 2nd Gen with USB-C
amazon $199.99 4.6 Apple AirPods Pro with MagSafe Case
walmart $199.00 4.5 Apple AirPods Pro 2 Wireless Earbuds
amazon $234.99 4.8 Apple AirPods Pro Premium Bundle