L'analyse des sentiments sur un fil Reddit vous indique d'un coup d'œil si une communauté est enthousiaste, sceptique ou divisée. Avec un seul appel API, vous pouvez récupérer le post et tous les commentaires, et avec une courte invite LLM, vous pouvez classer chaque réponse et agréger. Ce tutoriel utilise Scavio pour la récupération et Claude d'Anthropic pour la classification, mais la structure fonctionne pour n'importe quel fournisseur.
Prérequis
- Python 3.10+
- bibliothèques anthropic et requests
- Une clé API Scavio et une clé API Anthropic
- Une URL de fil Reddit à analyser
Parcours
Étape 1: Récupérer le fil
Récupérez le post et tous les commentaires en un seul appel.
import os, requests
resp = requests.post(
"https://api.scavio.dev/api/v1/reddit/post",
headers={"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}"},
json={"url": "https://www.reddit.com/r/Python/comments/1smb9du/"},
timeout=30,
)
comments = resp.json()["data"]["comments"]Étape 2: Classer chaque commentaire
Envoyez le corps de chaque commentaire à Claude et demandez une seule étiquette : positif, neutre ou négatif.
from anthropic import Anthropic
client = Anthropic()
def classify(text: str) -> str:
msg = client.messages.create(
model="claude-opus-4-6",
max_tokens=10,
messages=[{"role": "user", "content": f"One word: positive, neutral, or negative?\n\n{text}"}],
)
return msg.content[0].text.strip().lower()Étape 3: Agréger et rapporter
Exécutez la classification sur les commentaires de premier niveau, comptez les étiquettes et imprimez un résumé.
from collections import Counter
top_level = [c for c in comments if c["depth"] == 0][:25]
labels = [classify(c["body"]) for c in top_level]
print(Counter(labels))Exemple Python
import os, requests
from collections import Counter
from anthropic import Anthropic
SCAVIO_KEY = os.environ["SCAVIO_API_KEY"]
client = Anthropic()
def fetch_thread(url: str):
r = requests.post(
"https://api.scavio.dev/api/v1/reddit/post",
headers={"Authorization": f"Bearer {SCAVIO_KEY}"},
json={"url": url},
timeout=30,
)
r.raise_for_status()
return r.json()["data"]
def classify(text: str) -> str:
msg = client.messages.create(
model="claude-opus-4-6",
max_tokens=10,
messages=[{"role": "user", "content": f"One word: positive, neutral, or negative?\n\n{text}"}],
)
return msg.content[0].text.strip().lower()
data = fetch_thread("https://www.reddit.com/r/Python/comments/1smb9du/")
top = [c for c in data["comments"] if c["depth"] == 0][:25]
labels = [classify(c["body"]) for c in top]
print("Sentiment on", data["post"]["title"])
print(Counter(labels))Exemple JavaScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
async function fetchThread(url) {
const r = await fetch("https://api.scavio.dev/api/v1/reddit/post", {
method: "POST",
headers: {
Authorization: `Bearer ${SCAVIO_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ url }),
});
return (await r.json()).data;
}
async function classify(text) {
const msg = await client.messages.create({
model: "claude-opus-4-6",
max_tokens: 10,
messages: [{ role: "user", content: `One word: positive, neutral, or negative?\n\n${text}` }],
});
return msg.content[0].text.trim().toLowerCase();
}
const data = await fetchThread("https://www.reddit.com/r/Python/comments/1smb9du/");
const top = data.comments.filter((c) => c.depth === 0).slice(0, 25);
const labels = await Promise.all(top.map((c) => classify(c.body)));
const counts = labels.reduce((a, l) => ({ ...a, [l]: (a[l] ?? 0) + 1 }), {});
console.log(counts);Sortie attendue
Sentiment on FastAPI vs Django in 2026 -- what the teams are actually using
Counter({'positive': 14, 'neutral': 8, 'negative': 3})