De nombreuses applications ont besoin de données provenant de plusieurs plateformes de recherche : Google pour le contexte web, Amazon pour les prix des produits, YouTube pour le contenu vidéo et Walmart pour les alternatives de vente au détail. Gérer quatre intégrations API distinctes — chacune avec une authentification, des limites de débit et des schémas de réponse différents — est complexe et coûteux. L'API Scavio fournit un point d'accès unique qui unifie les quatre plateformes sous une interface cohérente. Ce tutoriel construit une fonction de recherche unifiée qui interroge les quatre plateformes et renvoie un ensemble de résultats normalisés.
Prérequis
- Python 3.10 ou supérieur
- bibliothèque requests installée
- Une clé API Scavio
- Compréhension de base de la programmation concurrente en Python
Parcours
Étape 1: Définir les configurations de requête par plateforme
Créez une fonction utilitaire qui construit le corps de requête correct pour chaque plateforme à partir d'une seule chaîne de requête.
def platform_body(platform: str, query: str) -> dict:
base = {"platform": platform, "query": query}
if platform == "google":
return {"query": query, "country_code": "us"}
if platform == "amazon":
return {**base, "marketplace": "US"}
return baseÉtape 2: Distribuer les requêtes en parallèle
Interrogez les quatre plateformes simultanément en utilisant ThreadPoolExecutor pour minimiser la latence.
from concurrent.futures import ThreadPoolExecutor
PLATFORMS = ["google", "amazon", "youtube", "walmart"]
def search_all(query: str) -> dict:
def fetch(platform):
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json=platform_body(platform, query))
r.raise_for_status()
return r.json()
with ThreadPoolExecutor(max_workers=4) as ex:
futs = {p: ex.submit(fetch, p) for p in PLATFORMS}
return {p: f.result() for p, f in futs.items()}Étape 3: Extraire le nombre de résultats par plateforme
Construisez un résumé indiquant le nombre de résultats renvoyés par chaque plateforme pour la requête.
def summarize(results: dict) -> dict:
return {
"google": len(results["google"].get("organic_results", [])),
"amazon": len(results["amazon"].get("products", [])),
"youtube": len(results["youtube"].get("videos", [])),
"walmart": len(results["walmart"].get("products", [])),
}Étape 4: Afficher un résumé unifié
Affichez le nombre de résultats et le premier élément de chaque plateforme.
results = search_all("portable bluetooth speaker")
counts = summarize(results)
for platform, count in counts.items():
print(f"{platform}: {count} results")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 body(platform: str, query: str) -> dict:
if platform == "google": return {"query": query, "country_code": "us"}
if platform == "amazon": return {"platform": platform, "query": query, "marketplace": "US"}
return {"platform": platform, "query": query}
def search_all(query: str) -> dict:
def fetch(p):
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY}, json=body(p, query))
r.raise_for_status()
return r.json()
with ThreadPoolExecutor(max_workers=4) as ex:
futs = {p: ex.submit(fetch, p) for p in ["google", "amazon", "youtube", "walmart"]}
return {p: f.result() for p, f in futs.items()}
if __name__ == "__main__":
data = search_all("portable bluetooth speaker")
print(f"Google: {len(data['google'].get('organic_results', []))} results")
print(f"Amazon: {len(data['amazon'].get('products', []))} products")
print(f"YouTube: {len(data['youtube'].get('videos', []))} videos")
print(f"Walmart: {len(data['walmart'].get('products', []))} products")Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
function body(platform, query) {
if (platform === "google") return { query, country_code: "us" };
if (platform === "amazon") return { platform, query, marketplace: "US" };
return { platform, query };
}
async function fetchPlatform(platform, query) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify(body(platform, query))
});
return [platform, await res.json()];
}
async function searchAll(query) {
const platforms = ["google", "amazon", "youtube", "walmart"];
const results = await Promise.all(platforms.map(p => fetchPlatform(p, query)));
return Object.fromEntries(results);
}
searchAll("portable bluetooth speaker").then(data => {
console.log(`Google: ${data.google.organic_results?.length || 0} results`);
console.log(`Amazon: ${data.amazon.products?.length || 0} products`);
console.log(`YouTube: ${data.youtube.videos?.length || 0} videos`);
console.log(`Walmart: ${data.walmart.products?.length || 0} products`);
}).catch(console.error);Sortie attendue
Google: 10 results
Amazon: 20 products
YouTube: 10 videos
Walmart: 16 products
Top Amazon: JBL Flip 6 Portable Speaker — $79.95
Top Walmart: Anker Soundcore 3 — $35.99