Les outils d'analyse YouTube (vidIQ, TubeBuddy) facturent entre 8 et 40 dollars par mois pour l'analyse des chaînes. Pour les développeurs et les créateurs axés sur les données, une API de recherche fournit les données brutes nécessaires pour créer des analyses personnalisées : ce pour quoi les concurrents se classent, où se trouvent les lacunes de contenu et quels mots-clés ont une faible concurrence.
Prérequis
- Python 3.8+
- Une clé API Scavio
- Chaînes cibles ou mots-clés à analyser
Parcours
Étape 1: Rechercher du contenu de chaîne
Trouver toutes les vidéos d'une chaîne spécifique qui se classent pour des mots-clés cibles.
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
def channel_keywords(channel_name: str, keywords: list) -> dict:
results = {'channel': channel_name, 'rankings': []}
for kw in keywords:
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'youtube', 'query': kw}, timeout=10)
for i, v in enumerate(resp.json().get('organic', [])):
if channel_name.lower() in v.get('channel', '').lower():
results['rankings'].append({
'keyword': kw, 'position': i + 1,
'title': v.get('title', ''), 'views': v.get('views', '')
})
break
return resultsÉtape 2: Trouver des lacunes de contenu
Identifier les mots-clés pour lesquels aucune vidéo forte n'existe (faible nombre de vues ou peu de résultats).
def find_content_gaps(keywords: list, view_threshold: int = 10000) -> list:
gaps = []
for kw in keywords:
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'youtube', 'query': kw}, timeout=10)
videos = resp.json().get('organic', [])
# Gap conditions: few results OR top results have low views
if len(videos) < 5:
gaps.append({'keyword': kw, 'reason': 'few_videos', 'video_count': len(videos)})
elif videos and all(int(v.get('views','0').replace(',','') or '0') < view_threshold for v in videos[:3]):
gaps.append({'keyword': kw, 'reason': 'low_competition', 'top_views': videos[0].get('views','')})
return gapsÉtape 3: Analyse des concurrents
Comparez le classement des mots-clés de votre chaîne par rapport à ceux de vos concurrents.
def competitor_comparison(your_channel: str, competitor: str, keywords: list) -> dict:
your_ranks = channel_keywords(your_channel, keywords)
their_ranks = channel_keywords(competitor, keywords)
comparison = []
for kw in keywords:
your_pos = next((r['position'] for r in your_ranks['rankings'] if r['keyword'] == kw), None)
their_pos = next((r['position'] for r in their_ranks['rankings'] if r['keyword'] == kw), None)
comparison.append({
'keyword': kw,
'your_position': your_pos,
'their_position': their_pos,
'winning': 'you' if (your_pos and their_pos and your_pos < their_pos) else
'them' if (their_pos and (not your_pos or their_pos < your_pos)) else 'neither'
})
return {
'you': your_channel, 'competitor': competitor,
'you_winning': sum(1 for c in comparison if c['winning'] == 'you'),
'them_winning': sum(1 for c in comparison if c['winning'] == 'them'),
'details': comparison
}Exemple Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
def yt_rank(keyword, channel):
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'youtube', 'query': keyword}).json()
for i, v in enumerate(r.get('organic',[])):
if channel.lower() in v.get('channel','').lower():
return i + 1
return NoneExemple JavaScript
async function ytRank(keyword, channel) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'youtube', query: keyword})
});
const results = (await r.json()).organic || [];
const idx = results.findIndex(v => v.channel?.toLowerCase().includes(channel.toLowerCase()));
return idx >= 0 ? idx + 1 : null;
}Sortie attendue
A YouTube channel analyzer that tracks keyword rankings, finds content gaps, and compares performance against competitors using search API data.