El análisis de sentimientos en un hilo de Reddit le indica de un vistazo si una comunidad está entusiasmada, escéptica o dividida. Con una única llamada a la API, puede extraer la publicación más todos los comentarios, y con un breve mensaje de LLM puede clasificar cada respuesta y agregarla. Este tutorial utiliza Scavio para la búsqueda y Claude de Anthropic para la clasificación, pero la estructura funciona para cualquier proveedor.
Requisitos previos
- Python 3.10+
- bibliotecas antrópicas y de solicitudes
- Una clave API de Scavio y una clave API de Anthropic
- Una URL del hilo de Reddit para analizar
Guia paso a paso
Paso 1: Recupera el hilo
Extraiga la publicación y todos los comentarios en una sola llamada.
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"]Paso 2: Clasificar cada comentario
Envíe el cuerpo de cada comentario a Claude y solicite una sola etiqueta: positiva, neutral o negativa.
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()Paso 3: Agregar e informar
Ejecute la clasificación sobre comentarios de nivel superior, cuente etiquetas e imprima un resumen.
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))Ejemplo en 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))Ejemplo en 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);Salida esperada
Sentiment on FastAPI vs Django in 2026 -- what the teams are actually using
Counter({'positive': 14, 'neutral': 8, 'negative': 3})