Savoir quand un produit est en rupture de stock sur Amazon mais reste disponible sur Walmart (ou vice versa) est crucial pour les vendeurs d'arbitrage, les revendeurs et les équipes d'approvisionnement. Ce tutoriel construit un suivi de produit multiplateforme qui vérifie la disponibilité et le prix sur Amazon et Walmart via l'API Scavio, enregistre les changements au fil du temps et alerte en cas de changement de statut de stock ou de différences de prix significatives entre les plateformes. Deux appels API par produit par vérification, 0,01 $ au total par produit.
Prérequis
- Python 3.8+ ou Node.js 18+
- Une clé API Scavio depuis scavio.dev
- Bibliothèque requests installée (Python)
- Noms de produits ou identifiants à suivre
Parcours
Étape 1: Définir les produits à suivre
Créez une liste de produits avec des termes de recherche. La même requête sera utilisée pour les recherches Amazon et Walmart.
import os, json, requests
from datetime import datetime
API_KEY = os.environ['SCAVIO_API_KEY']
ENDPOINT = 'https://api.scavio.dev/api/v1/search'
HEADERS = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
PRODUCTS = [
'PlayStation 5 Digital Edition',
'Nintendo Switch OLED',
'Dyson V15 Detect',
]Étape 2: Récupérer les données produit des deux plateformes
Interrogez Amazon et Walmart pour chaque produit. Extrayez le prix, la disponibilité, le titre et l'évaluation du résultat qui correspond le mieux à la requête.
def fetch_product(query, platform):
body = {'platform': platform, 'query': query}
if platform == 'amazon':
body['marketplace'] = 'US'
resp = requests.post(ENDPOINT, headers=HEADERS, json=body).json()
products = resp.get('products', [])
if not products:
return None
p = products[0]
raw_price = str(p.get('price', '')).replace('$', '').replace(',', '')
try:
price = float(raw_price)
except (ValueError, TypeError):
price = None
return {
'title': p.get('title', ''),
'price': price,
'availability': p.get('availability', 'Unknown'),
'rating': p.get('rating', ''),
'platform': platform,
}Étape 3: Comparer les plateformes et détecter les changements
Chargez l'état précédent depuis un fichier JSON, comparez-le avec les données actuelles, et signalez les changements de prix, les changements de stock et les écarts de prix entre plateformes.
def track_products():
state_file = 'product_state.json'
try:
with open(state_file) as f:
prev_state = json.load(f)
except FileNotFoundError:
prev_state = {}
current_state = {}
for product in PRODUCTS:
amazon = fetch_product(product, 'amazon')
walmart = fetch_product(product, 'walmart')
current_state[product] = {'amazon': amazon, 'walmart': walmart,
'checked_at': datetime.now().isoformat()}
prev = prev_state.get(product, {})
for platform, data in [('amazon', amazon), ('walmart', walmart)]:
if not data:
print(f'[MISSING] {product} not found on {platform}')
continue
prev_data = prev.get(platform)
if prev_data and prev_data.get('price') and data['price']:
diff = data['price'] - prev_data['price']
if abs(diff) > 1.0:
direction = 'UP' if diff > 0 else 'DOWN'
print(f'[PRICE {direction}] {product} on {platform}: '
f'${prev_data["price"]} -> ${data["price"]}')
print(f'[{platform.upper()}] {product}: ${data["price"]} - {data["availability"]}')
if amazon and walmart and amazon['price'] and walmart['price']:
gap = abs(amazon['price'] - walmart['price'])
if gap > 10:
cheaper = 'amazon' if amazon['price'] < walmart['price'] else 'walmart'
print(f' GAP: ${gap:.2f} difference, {cheaper} is cheaper')
with open(state_file, 'w') as f:
json.dump(current_state, f, indent=2)
return current_state
track_products()Exemple Python
import os, json, requests
from datetime import datetime
API_KEY = os.environ['SCAVIO_API_KEY']
ENDPOINT = 'https://api.scavio.dev/api/v1/search'
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
PRODUCTS = ['PlayStation 5 Digital Edition', 'Nintendo Switch OLED']
def fetch(query, platform):
body = {'platform': platform, 'query': query}
if platform == 'amazon': body['marketplace'] = 'US'
items = requests.post(ENDPOINT, headers=H, json=body).json().get('products', [])
if not items: return None
raw = str(items[0].get('price', '')).replace('$', '').replace(',', '')
try: price = float(raw)
except ValueError: price = None
return {'title': items[0].get('title', ''), 'price': price,
'availability': items[0].get('availability', 'Unknown')}
def track():
for p in PRODUCTS:
amz = fetch(p, 'amazon')
wmt = fetch(p, 'walmart')
for name, data in [('Amazon', amz), ('Walmart', wmt)]:
if data:
print(f'{name}: {p} -> ${data["price"]} ({data["availability"]})')
else:
print(f'{name}: {p} -> not found')
if amz and wmt and amz['price'] and wmt['price']:
gap = abs(amz['price'] - wmt['price'])
if gap > 5:
print(f' Price gap: ${gap:.2f}')
track()Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { 'x-api-key': API_KEY, 'Content-Type': 'application/json' };
const PRODUCTS = ['PlayStation 5 Digital Edition', 'Nintendo Switch OLED'];
async function fetchProduct(query, platform) {
const body = { platform, query };
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 items = data.products || [];
if (!items[0]) return null;
const price = parseFloat(String(items[0].price || '').replace(/[$,]/g, ''));
return { title: items[0].title, price: isNaN(price) ? null : price,
availability: items[0].availability || 'Unknown' };
}
async function track() {
for (const p of PRODUCTS) {
const amz = await fetchProduct(p, 'amazon');
const wmt = await fetchProduct(p, 'walmart');
console.log(`Amazon: ${p} -> $${amz?.price} (${amz?.availability})`);
console.log(`Walmart: ${p} -> $${wmt?.price} (${wmt?.availability})`);
if (amz?.price && wmt?.price) {
const gap = Math.abs(amz.price - wmt.price);
if (gap > 5) console.log(` Price gap: $${gap.toFixed(2)}`);
}
}
}
track().catch(console.error);Sortie attendue
[AMAZON] PlayStation 5 Digital Edition: $449.99 - In Stock
[WALMART] PlayStation 5 Digital Edition: $449.99 - In Stock
[AMAZON] Nintendo Switch OLED: $349.99 - In Stock
[WALMART] Nintendo Switch OLED: $339.99 - In Stock
GAP: $10.00 difference, walmart is cheaper
[PRICE DOWN] Dyson V15 Detect on amazon: $649.99 -> $599.99