La surveillance des prix sur les ASIN Amazon est essentielle pour les vendeurs en ligne, les chasseurs de bonnes affaires et les équipes de veille commerciale. Le scraping direct des pages produits Amazon déclenche rapidement la détection de bots et nécessite une maintenance constante. L'API Scavio fournit un endpoint produit stable qui renvoie le prix actuel, la note, le nombre d'avis et la disponibilité pour tout ASIN. Ce tutoriel construit un script de polling qui vérifie une liste d'ASIN, compare les prix par rapport à des références stockées et imprime une alerte lorsque le prix descend en dessous d'un seuil configuré.
Prérequis
- Python 3.8 ou supérieur
- bibliothèque requests installée
- Une clé API Scavio
- Une liste d'ASIN Amazon à surveiller
Parcours
Étape 1: Définissez votre liste de surveillance d'ASIN
Créez un dictionnaire associant les ASIN à des seuils de prix cibles. Le script alertera lorsque le prix en direct atteint ou descend en dessous du seuil.
WATCHLIST = {
"B09G9FPHY6": {"name": "Echo Dot 5th Gen", "threshold": 35.0},
"B07FZ8S74R": {"name": "Fire TV Stick 4K", "threshold": 25.0},
}Étape 2: Récupérez le prix actuel d'un ASIN
Envoyez une requête POST à l'endpoint Scavio avec platform=amazon et l'ASIN comme requête. La réponse inclut un champ price sous l'objet product.
def get_amazon_price(asin: str) -> dict:
response = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": asin, "marketplace": "US"}
)
response.raise_for_status()
return response.json()Étape 3: Comparez le prix par rapport au seuil
Extrayez le prix actuel de la réponse et comparez-le au seuil stocké. Gérez les prix manquants ou None de manière élégante.
def check_price(asin: str, meta: dict, data: dict) -> None:
product = data.get("product", {})
price_str = product.get("price", "")
if not price_str:
return
price = float(price_str.replace("$", "").replace(",", ""))
if price <= meta["threshold"]:
print(f"ALERT: {meta['name']} is ${price} (threshold ${meta['threshold']})")Étape 4: Exécutez la boucle de surveillance
Itérez sur tous les ASIN, récupérez les prix et vérifiez les seuils. Pause entre les polls pour respecter les limites de débit.
import time
while True:
for asin, meta in WATCHLIST.items():
data = get_amazon_price(asin)
check_price(asin, meta, data)
print("Cycle complete. Sleeping 3600s...")
time.sleep(3600)Exemple Python
import os
import time
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
WATCHLIST = {
"B09G9FPHY6": {"name": "Echo Dot 5th Gen", "threshold": 35.0},
"B07FZ8S74R": {"name": "Fire TV Stick 4K", "threshold": 25.0},
}
def get_price(asin: str) -> float | None:
r = requests.post(
ENDPOINT,
headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": asin, "marketplace": "US"}
)
r.raise_for_status()
price_str = r.json().get("product", {}).get("price", "")
if price_str:
return float(price_str.replace("$", "").replace(",", ""))
return None
def monitor():
for asin, meta in WATCHLIST.items():
price = get_price(asin)
if price and price <= meta["threshold"]:
print(f"[ALERT] {meta['name']}: ${price}")
else:
print(f"[OK] {meta['name']}: ${price}")
if __name__ == "__main__":
while True:
monitor()
time.sleep(3600)Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
const WATCHLIST = {
"B09G9FPHY6": { name: "Echo Dot 5th Gen", threshold: 35.0 },
"B07FZ8S74R": { name: "Fire TV Stick 4K", threshold: 25.0 },
};
async function getPrice(asin) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform: "amazon", query: asin, marketplace: "US" })
});
const data = await res.json();
const priceStr = data?.product?.price || "";
return priceStr ? parseFloat(priceStr.replace(/[$,]/g, "")) : null;
}
async function monitor() {
for (const [asin, meta] of Object.entries(WATCHLIST)) {
const price = await getPrice(asin);
if (price !== null && price <= meta.threshold) {
console.log(`[ALERT] ${meta.name}: $${price}`);
} else {
console.log(`[OK] ${meta.name}: $${price}`);
}
}
}
monitor().catch(console.error);Sortie attendue
{
"product": {
"asin": "B09G9FPHY6",
"title": "Echo Dot (5th Gen)",
"price": "$29.99",
"original_price": "$49.99",
"rating": "4.7",
"reviews_count": 284521,
"availability": "In Stock",
"marketplace": "US"
}
}