Les discussions sur Reddit fournissent un sentiment utilisateur non filtré sur les produits, marques et services. Ce tutoriel construit un tracker de sentiment qui recherche Reddit pour les mentions de marque via l'endpoint Reddit de Scavio, extrait les thèmes de discussion et suit le sentiment dans le temps. Contrairement à l'API native de Reddit (qui nécessite OAuth et a des limites de taux strictes), la recherche Reddit de Scavio renvoie des résultats structurés avec un simple appel API.
Prérequis
- Python 3.8+ installé
- bibliothèque requests installée
- Une clé API Scavio depuis scavio.dev
- Noms de marque ou de produit à suivre
Parcours
Étape 1: Rechercher sur Reddit les mentions de marque
Interroger l'endpoint Reddit de Scavio pour les mentions de votre marque ou produit.
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def search_reddit(query: str) -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'reddit', 'query': query}, timeout=10)
return resp.json().get('organic', [])Étape 2: Extraire les signaux de sentiment
Analyser les titres et extraits de publications pour les signaux positifs, négatifs et neutres.
POSITIVE = ['love', 'great', 'best', 'amazing', 'recommend', 'switched to', 'works well']
NEGATIVE = ['hate', 'worst', 'terrible', 'broken', 'avoid', 'switched from', 'stopped using']
def classify_sentiment(text: str) -> str:
text_lower = text.lower()
pos = sum(1 for w in POSITIVE if w in text_lower)
neg = sum(1 for w in NEGATIVE if w in text_lower)
if pos > neg: return 'positive'
if neg > pos: return 'negative'
return 'neutral'
def analyze_mentions(results: list) -> dict:
sentiments = {'positive': [], 'negative': [], 'neutral': []}
for r in results:
text = f"{r.get('title', '')} {r.get('snippet', '')}"
sentiment = classify_sentiment(text)
sentiments[sentiment].append({'title': r.get('title', ''), 'url': r.get('link', '')})
return sentimentsÉtape 3: Générer un résumé de sentiment
Calculer les ratios de sentiment et mettre en évidence les discussions notables.
def sentiment_summary(sentiments: dict) -> dict:
total = sum(len(v) for v in sentiments.values())
return {
'total_mentions': total,
'positive_pct': round(len(sentiments['positive']) / max(total, 1) * 100, 1),
'negative_pct': round(len(sentiments['negative']) / max(total, 1) * 100, 1),
'neutral_pct': round(len(sentiments['neutral']) / max(total, 1) * 100, 1),
'top_positive': sentiments['positive'][:3],
'top_negative': sentiments['negative'][:3],
}Étape 4: Exécuter et sauvegarder les rapports quotidiens
Exécuter le tracker quotidiennement et stocker les résultats pour l'analyse des tendances.
import json, datetime
def daily_sentiment(brand: str):
results = search_reddit(brand)
sentiments = analyze_mentions(results)
summary = sentiment_summary(sentiments)
date = datetime.date.today().isoformat()
report = {'date': date, 'brand': brand, **summary}
with open(f'sentiment_{brand}_{date}.json', 'w') as f:
json.dump(report, f, indent=2)
print(f"{brand}: {report['positive_pct']}% positive, {report['negative_pct']}% negative ({report['total_mentions']} mentions)")
return report
daily_sentiment('YourBrand')Exemple Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def reddit_sentiment(brand):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'reddit', 'query': brand}, timeout=10).json()
results = data.get('organic', [])
print(f'{brand}: {len(results)} Reddit mentions found')
return resultsExemple JavaScript
async function redditSentiment(brand) {
const data = 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: 'reddit', query: brand})
}).then(r => r.json());
return data.organic || [];
}Sortie attendue
Daily Reddit sentiment reports with positive/negative/neutral breakdowns and notable discussion highlights.