La API oficial de Reddit requiere el registro de OAuth, tiene límites de velocidad estrictos y recientemente introdujo niveles pagos que encarecen la recopilación de datos a gran escala. La API de Scavio ofrece una alternativa: consultar publicaciones y comentarios de Reddit a través de un único punto final autenticado que devuelve JSON estructurado con subreddit, autor, puntuación, marcas de tiempo y árboles de comentarios completos. Este tutorial muestra cómo buscar publicaciones de Reddit, recuperar hilos individuales con comentarios y crear un canal de recopilación de datos sin tocar la API oficial de Reddit.
Requisitos previos
- Python 3.8 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Temas o subreddits de los que desea recopilar datos
Guia paso a paso
Paso 1: Buscar publicaciones de Reddit por palabra clave
Utilice el punto final de búsqueda de Scavio Reddit para encontrar publicaciones que coincidan con una palabra clave. Los resultados incluyen título de la publicación, subreddit, autor, puntuación y marca de tiempo.
import os
import requests
API_KEY = os.environ["SCAVIO_API_KEY"]
def search_reddit(query: str, sort: str = "relevance") -> list[dict]:
r = requests.post(
"https://api.scavio.dev/api/v1/reddit/search",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"query": query, "sort": sort},
timeout=30
)
r.raise_for_status()
return r.json()["data"]["posts"]Paso 2: Obtener una publicación completa con comentarios
Dada la URL de una publicación de Reddit, obtenga la publicación completa más todos los comentarios encadenados en una sola llamada.
def fetch_thread(url: str) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/reddit/post",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"url": url},
timeout=30
)
r.raise_for_status()
return r.json()["data"]Paso 3: Extraer datos estructurados de los resultados
Analice publicaciones y comentarios en un formato plano, listo para análisis, con campos relevantes extraídos.
def extract_post_data(post: dict) -> dict:
return {
"id": post.get("id"),
"title": post.get("title"),
"subreddit": post.get("subreddit"),
"author": post.get("author"),
"score": post.get("score"),
"timestamp": post.get("timestamp"),
"url": post.get("url"),
}
def extract_comments(thread: dict) -> list[dict]:
return [{
"author": c.get("author"),
"body": c.get("body"),
"score": c.get("score"),
"depth": c.get("depth"),
} for c in thread.get("comments", [])]Paso 4: Exportar a JSON
Guarde las publicaciones y comentarios recopilados como un conjunto de datos JSON estructurado.
import json
def collect_dataset(query: str, max_threads: int = 5) -> dict:
posts = search_reddit(query, sort="new")
dataset = []
for post in posts[:max_threads]:
thread = fetch_thread(post["url"])
dataset.append({
"post": extract_post_data(post),
"comments": extract_comments(thread),
})
return {"query": query, "threads": dataset}
with open("reddit_data.json", "w") as f:
json.dump(collect_dataset("python web frameworks"), f, indent=2)Ejemplo en Python
import os
import json
import requests
API_KEY = os.environ["SCAVIO_API_KEY"]
def search_reddit(query: str) -> list[dict]:
r = requests.post("https://api.scavio.dev/api/v1/reddit/search",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"query": query, "sort": "new"}, timeout=30)
r.raise_for_status()
return r.json()["data"]["posts"]
def fetch_thread(url: str) -> dict:
r = requests.post("https://api.scavio.dev/api/v1/reddit/post",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"url": url}, timeout=30)
r.raise_for_status()
return r.json()["data"]
if __name__ == "__main__":
posts = search_reddit("best python frameworks 2026")
print(f"Found {len(posts)} posts")
for p in posts[:3]:
print(f" r/{p['subreddit']}: {p['title']}")
thread = fetch_thread(p["url"])
comments = thread.get("comments", [])
print(f" {len(comments)} comments")Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
async function searchReddit(query) {
const r = await fetch("https://api.scavio.dev/api/v1/reddit/search", {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ query, sort: "new" })
});
return (await r.json()).data.posts;
}
async function fetchThread(url) {
const r = await fetch("https://api.scavio.dev/api/v1/reddit/post", {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ url })
});
return (await r.json()).data;
}
async function main() {
const posts = await searchReddit("best python frameworks 2026");
for (const p of posts.slice(0, 3)) {
console.log(`r/${p.subreddit}: ${p.title}`);
const thread = await fetchThread(p.url);
console.log(` ${thread.comments?.length || 0} comments`);
}
}
main().catch(console.error);Salida esperada
Found 14 posts
r/Python: FastAPI vs Django for new projects in 2026
47 comments
r/webdev: What Python framework are you using this year?
23 comments
r/learnpython: Best framework to learn as a beginner?
18 comments