Une recherche de produit qui ne vérifie qu'une seule plateforme passe à côté de l'image complète. Un produit peut être tendance sur TikTok mais avoir de mauvais avis sur Google, ou être très bien noté en ligne mais inconnu sur les réseaux sociaux. Ce tutoriel construit un agent de recherche multiplateforme qui combine la recherche web, les données TikTok et la couverture YouTube en un rapport unifié d'intelligence produit. Coût total par produit : 3 recherches + 1 requête TikTok = $0.020.
Prérequis
- Python 3.9+ installé
- bibliothèque requests installée
- Une clé API Scavio provenant de scavio.dev
Parcours
Étape 1: Créer des fonctions de recherche spécifiques à chaque plateforme
Créez des fonctions de recherche distinctes pour le web, TikTok et YouTube. Chacune renvoie des résultats normalisés avec des métadonnées spécifiques à la plateforme.
import requests, os, time
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
SEARCH_URL = 'https://api.scavio.dev/api/v1/search'
TT_URL = 'https://api.scavio.dev/api/v1/tiktok'
def search_web(query: str) -> list:
resp = requests.post(SEARCH_URL,
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us', 'num_results': 10})
return [{'title': r['title'], 'url': r['link'], 'snippet': r.get('snippet', ''),
'platform': 'web'} for r in resp.json().get('organic_results', [])]
def search_youtube(query: str) -> list:
resp = requests.post(SEARCH_URL,
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': f'site:youtube.com {query} review',
'country_code': 'us', 'num_results': 5})
return [{'title': r['title'].replace(' - YouTube', ''), 'url': r['link'],
'snippet': r.get('snippet', ''), 'platform': 'youtube'}
for r in resp.json().get('organic_results', [])
if 'youtube.com' in r.get('link', '')]
def search_tiktok(query: str) -> list:
resp = requests.post(f'{TT_URL}/search/videos',
headers={'Authorization': f'Bearer {SCAVIO_KEY}',
'Content-Type': 'application/json'},
json={'keyword': query, 'count': 10, 'cursor': 0})
videos = resp.json().get('data', {}).get('videos', [])
return [{'title': v.get('desc', '')[:80], 'author': v.get('author', {}).get('uniqueId', ''),
'plays': v.get('stats', {}).get('playCount', 0),
'likes': v.get('stats', {}).get('diggCount', 0),
'platform': 'tiktok'} for v in videos]
print('Platform search functions ready')Étape 2: Construire le pipeline de recherche multiplateforme
Recherchez un produit sur les trois plateformes et compilez les résultats en un rapport unifié.
def research_product(product_name: str) -> dict:
print(f'Researching: {product_name}\n')
# Web search: reviews and pricing
web_results = search_web(f'{product_name} review 2026')
time.sleep(0.3)
# YouTube: video reviews
yt_results = search_youtube(product_name)
time.sleep(0.3)
# TikTok: social buzz
tt_results = search_tiktok(product_name)
# Analyze web sentiment
web_text = ' '.join(r['snippet'] for r in web_results).lower()
positive_signals = sum(1 for w in ['best', 'excellent', 'recommend', 'love', 'great']
if w in web_text)
negative_signals = sum(1 for w in ['worst', 'avoid', 'terrible', 'scam', 'overpriced']
if w in web_text)
# Analyze TikTok engagement
tt_total_plays = sum(v.get('plays', 0) for v in tt_results)
tt_total_likes = sum(v.get('likes', 0) for v in tt_results)
tt_creators = len(set(v.get('author', '') for v in tt_results))
return {
'product': product_name,
'web': {'results': len(web_results), 'positive': positive_signals,
'negative': negative_signals, 'top_result': web_results[0]['title'] if web_results else ''},
'youtube': {'videos': len(yt_results),
'top_video': yt_results[0]['title'] if yt_results else ''},
'tiktok': {'videos': len(tt_results), 'total_plays': tt_total_plays,
'total_likes': tt_total_likes, 'unique_creators': tt_creators},
'credits_used': 3, # 1 web + 1 youtube + 1 tiktok
'cost': 0.015
}Étape 3: Générer le rapport d'intelligence produit
Formatez les données multiplateformes en un rapport lisible avec des informations spécifiques à chaque plateforme.
def product_report(data: dict):
print(f'Product Intelligence Report: {data["product"]}')
print('=' * 50)
# Web presence
web = data['web']
sentiment = 'positive' if web['positive'] > web['negative'] else 'negative' if web['negative'] > web['positive'] else 'neutral'
print(f'\nWeb Search ({web["results"]} results):')
print(f' Sentiment: {sentiment} ({web["positive"]} positive, {web["negative"]} negative)')
if web['top_result']:
print(f' Top result: {web["top_result"][:50]}')
# YouTube coverage
yt = data['youtube']
print(f'\nYouTube ({yt["videos"]} videos found):')
if yt['top_video']:
print(f' Top review: {yt["top_video"][:50]}')
# TikTok buzz
tt = data['tiktok']
print(f'\nTikTok ({tt["videos"]} videos):')
print(f' Total plays: {tt["total_plays"]:,}')
print(f' Total likes: {tt["total_likes"]:,}')
print(f' Unique creators: {tt["unique_creators"]}')
# Overall assessment
tiktok_buzz = 'high' if tt['total_plays'] > 100000 else 'medium' if tt['total_plays'] > 10000 else 'low'
print(f'\nOverall:')
print(f' Web sentiment: {sentiment}')
print(f' TikTok buzz: {tiktok_buzz}')
print(f' YouTube coverage: {"good" if yt["videos"] >= 3 else "limited"}')
print(f' Cost: ${data["cost"]:.3f} ({data["credits_used"]} API calls)')
# Research a product
data = research_product('Stanley Quencher tumbler')
product_report(data)Exemple Python
import requests, os, time
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
SEARCH = 'https://api.scavio.dev/api/v1/search'
TT = 'https://api.scavio.dev/api/v1/tiktok'
def research(product):
# Web
web = requests.post(SEARCH, headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': f'{product} review 2026', 'country_code': 'us', 'num_results': 5}).json()
# YouTube
yt = requests.post(SEARCH, headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': f'site:youtube.com {product} review', 'country_code': 'us', 'num_results': 3}).json()
# TikTok
tt = requests.post(f'{TT}/search/videos', headers={'Authorization': f'Bearer {SCAVIO_KEY}',
'Content-Type': 'application/json'}, json={'keyword': product, 'count': 10, 'cursor': 0}).json()
web_count = len(web.get('organic_results', []))
yt_count = len([r for r in yt.get('organic_results', []) if 'youtube' in r.get('link', '')])
tt_plays = sum(v.get('stats', {}).get('playCount', 0) for v in tt.get('data', {}).get('videos', []))
print(f'{product}: web={web_count}, youtube={yt_count}, tiktok_plays={tt_plays:,}')
research('Stanley Quencher tumbler')Exemple JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
async function research(product) {
const web = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `${product} review 2026`, country_code: 'us', num_results: 5 })
}).then(r => r.json());
const yt = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `site:youtube.com ${product} review`, country_code: 'us', num_results: 3 })
}).then(r => r.json());
const tt = await fetch('https://api.scavio.dev/api/v1/tiktok/search/videos', {
method: 'POST', headers: { 'Authorization': `Bearer ${SCAVIO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ keyword: product, count: 10, cursor: 0 })
}).then(r => r.json());
const plays = (tt.data?.videos || []).reduce((s, v) => s + (v.stats?.playCount || 0), 0);
console.log(`${product}: web=${(web.organic_results||[]).length}, tiktok_plays=${plays.toLocaleString()}`);
}
research('Stanley Quencher tumbler');Sortie attendue
Researching: Stanley Quencher tumbler
Product Intelligence Report: Stanley Quencher tumbler
==================================================
Web Search (10 results):
Sentiment: positive (3 positive, 0 negative)
Top result: Stanley Quencher H2.0 Review 2026 - Best Tumb
YouTube (4 videos found):
Top review: Stanley Quencher vs YETI Rambler - Honest Rev
TikTok (10 videos):
Total plays: 2,450,000
Total likes: 185,000
Unique creators: 8
Overall:
Web sentiment: positive
TikTok buzz: high
YouTube coverage: good
Cost: $0.015 (3 API calls)