Suivre un produit sur Amazon, Walmart et Google Shopping nécessite traditionnellement trois API. Une seule API couvrant toutes les plateformes vous permet de construire un tracker unifié qui détecte les écarts de prix entre plateformes et alerte en cas de baisse. Ce tutoriel en construit un en utilisant l'API Scavio à 0,005 $ par vérification de plateforme -- suivre un produit sur trois plateformes coûte 0,015 $ par cycle.
Prérequis
- Python 3.8+ ou Node.js 18+
- Une clé API Scavio depuis scavio.dev
- bibliothèque requests installée
- Produits à suivre
Parcours
Étape 1: Définir les produits et les plateformes
Configurer les produits avec des requêtes de recherche spécifiques à chaque plateforme.
import os, json, requests
from datetime import datetime
API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
PRODUCTS = [
{'name': 'Sony WH-1000XM5', 'queries': {
'amazon': 'Sony WH-1000XM5 headphones',
'walmart': 'Sony WH-1000XM5',
}},
{'name': 'AirPods Pro 2', 'queries': {
'amazon': 'Apple AirPods Pro 2nd generation',
'walmart': 'AirPods Pro 2',
}},
]Étape 2: Récupérer les prix de chaque plateforme
Interroger chaque plateforme et extraire les données de prix.
def fetch_price(query, platform):
body = {'query': query, 'platform': platform, 'country_code': 'us'}
if platform == 'amazon': body['marketplace'] = 'US'
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H, json=body).json()
items = data.get('products', data.get('shopping_results', []))
if not items: return None
raw = str(items[0].get('price', '')).replace('$', '').replace(',', '')
try: price = float(raw)
except: price = None
return {'title': items[0].get('title', ''), 'price': price, 'platform': platform}Étape 3: Comparer les prix et détecter les écarts
Trouver la plateforme la moins chère et alerter en cas d'écarts de prix significatifs.
def track_all():
for product in PRODUCTS:
print(f"\n{product['name']}:")
prices = {}
for platform, query in product['queries'].items():
r = fetch_price(query, platform)
if r and r['price']:
prices[platform] = r['price']
print(f" {platform}: ${r['price']:.2f}")
else:
print(f" {platform}: not found")
if len(prices) >= 2:
cheapest = min(prices, key=prices.get)
gap = max(prices.values()) - min(prices.values())
print(f" Best: {cheapest} (${prices[cheapest]:.2f}), gap: ${gap:.2f}")
if gap > 10: print(f" ALERT: ${gap:.2f} price gap!")
credits = sum(len(p['queries']) for p in PRODUCTS)
print(f'\nCost: ${credits * 0.005:.3f}')
track_all()Étape 4: Stocker l'historique et détecter les tendances
Ajouter les résultats à un fichier JSON pour l'analyse des tendances dans le temps.
def save_and_trend(product_name, prices, path='price_log.jsonl'):
entry = {'product': product_name, 'prices': prices, 'ts': datetime.now().isoformat()}
with open(path, 'a') as f: f.write(json.dumps(entry) + '\n')
history = []
with open(path) as f:
for line in f:
h = json.loads(line)
if h['product'] == product_name: history.append(h)
if len(history) >= 2:
for p in prices:
prev = history[-2]['prices'].get(p)
curr = prices[p]
if prev and curr:
diff = curr - prev
if abs(diff) > 1:
d = 'UP' if diff > 0 else 'DOWN'
print(f" {p} trend: ${prev:.2f} -> ${curr:.2f} ({d})")
# Call after track_all with actual pricesExemple Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
def price(query, platform):
body = {'query': query, 'platform': platform, 'country_code': 'us'}
if platform == 'amazon': body['marketplace'] = 'US'
items = requests.post('https://api.scavio.dev/api/v1/search', headers=H, json=body).json().get('products', [])
if not items: return None
try: return float(str(items[0].get('price', '')).replace('$', '').replace(',', ''))
except: return None
for name, q in [('Sony XM5', 'Sony WH-1000XM5'), ('AirPods Pro', 'AirPods Pro 2')]:
print(f'{name}:')
for p in ['amazon', 'walmart']:
pr = price(q, p)
print(f' {p}: ${pr:.2f}' if pr else f' {p}: N/A')Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { 'x-api-key': API_KEY, 'Content-Type': 'application/json' };
async function getPrice(query, platform) {
const body = { query, platform, country_code: 'us' };
if (platform === 'amazon') body.marketplace = 'US';
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify(body)
}).then(r => r.json());
const item = (data.products || [])[0];
if (!item) return null;
const p = parseFloat(String(item.price || '').replace(/[$,]/g, ''));
return isNaN(p) ? null : p;
}
async function track() {
for (const [name, q] of [['Sony XM5', 'Sony WH-1000XM5'], ['AirPods', 'AirPods Pro 2']]) {
console.log(`${name}:`);
for (const p of ['amazon', 'walmart']) {
const pr = await getPrice(q, p);
console.log(` ${p}: ${pr ? `$${pr.toFixed(2)}` : 'N/A'}`);
}
}
}
track().catch(console.error);Sortie attendue
Sony WH-1000XM5:
amazon: $298.00
walmart: $278.00
Best: walmart ($278.00), gap: $20.00
ALERT: $20.00 price gap!
AirPods Pro 2:
amazon: $189.99
walmart: $189.99
Best: amazon ($189.99), gap: $0.00
Cost: $0.020