Les équipes de contenu perdent des heures chaque matin à rechercher quoi écrire. Ce tutoriel construit un pipeline automatisé qui s'exécute quotidiennement, recherche les sujets tendance et le contenu des concurrents dans votre niche, identifie les lacunes de contenu et produit des briefs structurés que vos rédacteurs peuvent exécuter immédiatement. Le pipeline utilise l'API Scavio pour la recherche à 0,005 $/requête, ce qui fait qu'un brief quotidien complet avec 5 sujets coûte environ 0,050 $.
Prérequis
- Python 3.9+ installé
- bibliothèque requests installée
- Une clé API Scavio provenant de scavio.dev
- Une niche de contenu définie et une liste de concurrents
Parcours
Étape 1: Définissez votre niche de contenu et vos requêtes de départ
Configurez les sujets et les concurrents à surveiller quotidiennement. Le pipeline effectuera des recherches sur ceux-ci pour trouver de nouvelles opportunités de contenu.
import os, requests, json, time
from datetime import datetime
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
URL = 'https://api.scavio.dev/api/v1/search'
NICHE = 'developer tools and APIs'
SEED_QUERIES = [
'developer tools trending 2026',
'new API launches this week',
'developer productivity tools',
]
COMPETITOR_DOMAINS = ['competitor1.com', 'competitor2.com']Étape 2: Recherchez le contenu tendance et les angles des concurrents
Exécutez les requêtes de départ et les recherches de contenu concurrent. Extrayez les titres, les angles et les données People Also Ask comme opportunités de contenu.
def search_trends(queries: list) -> list:
all_results = []
for q in queries:
resp = requests.post(URL, headers=H,
json={'query': q, 'country_code': 'us', 'num_results': 5})
data = resp.json()
results = data.get('organic_results', [])
paa = data.get('people_also_ask', [])
all_results.append({
'query': q,
'results': [{'title': r['title'], 'url': r['link'], 'snippet': r.get('snippet', '')} for r in results],
'people_also_ask': [p.get('question', '') for p in paa],
})
time.sleep(0.3)
return all_results
def check_competitors(domains: list) -> list:
competitor_content = []
for domain in domains:
resp = requests.post(URL, headers=H,
json={'query': f'site:{domain}', 'country_code': 'us', 'num_results': 5})
results = resp.json().get('organic_results', [])
competitor_content.extend([{'domain': domain, 'title': r['title'], 'url': r['link']} for r in results])
time.sleep(0.3)
return competitor_content
trends = search_trends(SEED_QUERIES)
print(f'Trend data: {sum(len(t["results"]) for t in trends)} results from {len(SEED_QUERIES)} queries')Étape 3: Générez des briefs de contenu structurés
Analysez les données de recherche pour identifier les meilleures opportunités de contenu et produisez des briefs structurés avec titre, angle, mots-clés et plan.
def generate_briefs(trends: list, num_briefs: int = 5) -> list:
# Collect all titles and PAA questions as potential angles
angles = []
for t in trends:
for r in t['results']:
angles.append({'title': r['title'], 'source': t['query'], 'snippet': r['snippet']})
for q in t['people_also_ask']:
angles.append({'title': q, 'source': f'PAA: {t["query"]}', 'snippet': ''})
# Deduplicate by title similarity (simple approach)
seen_words = set()
unique_angles = []
for a in angles:
words = frozenset(a['title'].lower().split()[:5])
if words not in seen_words:
seen_words.add(words)
unique_angles.append(a)
briefs = []
for a in unique_angles[:num_briefs]:
brief = {
'title': a['title'],
'angle': a['snippet'][:150] if a['snippet'] else 'Based on trending search data',
'source_query': a['source'],
'suggested_format': 'tutorial' if 'how' in a['title'].lower() else 'listicle' if any(w in a['title'].lower() for w in ['top', 'best']) else 'analysis',
}
briefs.append(brief)
print(f'Daily Content Brief - {datetime.now().strftime("%Y-%m-%d")}')
print('=' * 60)
for i, b in enumerate(briefs, 1):
print(f'\n{i}. {b["title"]}')
print(f' Format: {b["suggested_format"]}')
print(f' Angle: {b["angle"][:80]}')
print(f' Source: {b["source_query"]}')
return briefs
briefs = generate_briefs(trends)Exemple Python
import os, requests, time
from datetime import datetime
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
def daily_brief(niche, num_topics=5):
queries = [f'{niche} trending 2026', f'{niche} news this week', f'best {niche} tools']
all_titles = []
for q in queries:
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'query': q, 'country_code': 'us', 'num_results': 5})
for r in resp.json().get('organic_results', []):
all_titles.append(r['title'])
time.sleep(0.3)
print(f'Content Brief - {datetime.now().strftime("%Y-%m-%d")}')
for i, title in enumerate(all_titles[:num_topics], 1):
print(f' {i}. {title[:60]}')
print(f'Cost: ${len(queries) * 0.005:.3f}')
daily_brief('developer tools')Exemple JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
async function dailyBrief(niche) {
const queries = [`${niche} trending 2026`, `${niche} news`, `best ${niche}`];
const titles = [];
for (const q of queries) {
const resp = 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: q, country_code: 'us', num_results: 5 })
});
const results = (await resp.json()).organic_results || [];
titles.push(...results.map(r => r.title));
}
console.log(`Content Brief - ${new Date().toISOString().slice(0, 10)}`);
titles.slice(0, 5).forEach((t, i) => console.log(` ${i + 1}. ${t.slice(0, 60)}`));
}
dailyBrief('developer tools');Sortie attendue
Daily Content Brief - 2026-05-16
============================================================
1. Top 10 Developer Productivity Tools for 2026
Format: listicle
Angle: A roundup of the most impactful developer tools released this year
Source: developer tools trending 2026
2. How to Build AI-Powered API Testing Pipelines
Format: tutorial
Angle: Emerging pattern of using LLMs to generate and run API tests
Source: new API launches this week
3. MCP Ecosystem: The New Standard for Tool Integration
Format: analysis
Angle: Model Context Protocol adoption is accelerating across AI tools
Source: developer tools trending 2026