La détection de tendances consiste à identifier les sujets qui gagnent rapidement en popularité dans les recherches et l'engagement avant qu'ils n'atteignent la notoriété grand public. Combiner la vélocité des résultats de recherche Google avec le rythme de publication des vidéos YouTube et leurs vues offre une vue multi-signaux des tendances émergentes. Ce tutoriel construit un agent de détection de tendances qui interroge les deux plateformes via l'API Scavio, score les sujets en fonction de la force du signal, et produit une liste classée des sujets tendance pour un créneau donné.
Prérequis
- Python 3.10 ou supérieur
- bibliothèque requests installée
- Une clé API Scavio
- Compréhension de base de la normalisation et du scoring des données
Parcours
Étape 1: Définir les graines de sujets
Commencez par un ensemble de termes génériques dans votre créneau. L'agent les développera en requêtes de tendances connexes.
SEEDS = ["generative ai", "open source llm", "ai agents 2026"]
NICHE = "artificial intelligence"Étape 2: Recueillir les nombres de résultats de recherche Google
Pour chaque graine, récupérez la SERP Google et notez le nombre de résultats organiques et leurs signaux de récence.
def google_signal(topic: str) -> int:
data = search_google(f"{topic} 2026")
results = data.get("organic_results", [])
# Count results mentioning the current year as recency signal
recent = sum(1 for r in results if "2026" in r.get("title", "") + r.get("snippet", ""))
return recentÉtape 3: Recueillir les métriques vidéo YouTube
Recherchez YouTube pour chaque sujet graine à l'aide du point de terminaison de recherche Scavio et comptez les téléchargements de vidéos récents.
def youtube_signal(topic: str) -> int:
response = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "youtube", "query": topic}
)
videos = response.json().get("videos", [])
return len([v for v in videos if "2026" in v.get("published_at", "")])Étape 4: Scorer et classer les tendances
Combinez les signaux Google et YouTube en un score composite et classez les sujets.
def rank_trends(seeds: list[str]) -> list[dict]:
scored = []
for seed in seeds:
g = google_signal(seed)
y = youtube_signal(seed)
scored.append({"topic": seed, "google": g, "youtube": y, "score": g + y * 2})
return sorted(scored, key=lambda x: x["score"], reverse=True)Exemple Python
import os
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
SEEDS = ["generative ai", "open source llm", "ai agents", "model distillation"]
def search_google(q: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": q, "country_code": "us"})
r.raise_for_status()
return r.json()
def search_youtube(q: str) -> list:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"platform": "youtube", "query": q})
r.raise_for_status()
return r.json().get("videos", [])
def score(seed: str) -> dict:
g_results = search_google(f"{seed} 2026").get("organic_results", [])
y_results = search_youtube(seed)
g_score = sum(1 for r in g_results if "2026" in r.get("title", ""))
y_score = len(y_results)
return {"topic": seed, "score": g_score + y_score * 2}
if __name__ == "__main__":
scores = sorted([score(s) for s in SEEDS], key=lambda x: x["score"], reverse=True)
for s in scores:
print(f"{s['topic']}: {s['score']}")Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
const SEEDS = ["generative ai", "open source llm", "ai agents", "model distillation"];
async function searchGoogle(q) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: q, country_code: "us" })
});
return res.json();
}
async function scoreTopic(seed) {
const data = await searchGoogle(`${seed} 2026`);
const organic = data.organic_results || [];
const gScore = organic.filter(r => (r.title + " " + (r.snippet || "")).includes("2026")).length;
return { topic: seed, score: gScore };
}
async function main() {
const scores = await Promise.all(SEEDS.map(scoreTopic));
scores.sort((a, b) => b.score - a.score).forEach(s => console.log(`${s.topic}: ${s.score}`));
}
main().catch(console.error);Sortie attendue
ai agents: 8
generative ai: 7
open source llm: 5
model distillation: 3
Top trend: ai agents (score: 8)