La búsqueda pública de Reddit es potente, pero sus puntos finales JSON oficiales tienen una velocidad limitada, no están paginados y, en ocasiones, faltan. Para los agentes de monitoreo, los procesos de investigación y los sistemas RAG que necesitan datos comunitarios actualizados, una API de búsqueda que maneje la capa de raspado es la diferencia entre un proyecto de fin de semana y un proceso de producción. Este tutorial explica cómo autenticar, enviar una solicitud de búsqueda de Reddit e iterar páginas de cursor para recopilar publicaciones en Python.
Requisitos previos
- Python 3.8 o superior instalado
- solicita biblioteca instalada (solicitudes de instalación de pip)
- Una clave API de Scavio de scavio.dev
- Una consulta que desea buscar (palabra clave o frase con ámbito de subreddit)
Guia paso a paso
Paso 1: Instalar la biblioteca de solicitudes
request es la única dependencia necesaria para este tutorial.
pip install requestsPaso 2: Configure su clave API
Mantenga las credenciales fuera del código fuente leyendo desde una variable de entorno.
import os
API_KEY = os.environ["SCAVIO_API_KEY"]Paso 3: Enviar la solicitud de búsqueda de Reddit
PUBLICAR en /api/v1/reddit/search con su consulta y clasificación opcional. Las solicitudes de Reddit tardan entre 5 y 15 segundos, así que establezca un tiempo de espera más largo para el cliente.
import requests
response = requests.post(
"https://api.scavio.dev/api/v1/reddit/search",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"query": "best python web frameworks 2026", "sort": "new"},
timeout=30,
)
data = response.json()Paso 4: Iterar publicaciones y seguir el cursor
Las publicaciones se encuentran en data.posts. Cuando data.nextCursor no es nulo, páselo como cursor para buscar la página siguiente.
for post in data["data"]["posts"]:
print(f"r/{post['subreddit']} -- {post['title']}")
next_cursor = data["data"].get("nextCursor")
if next_cursor:
# call again with {"query": ..., "cursor": next_cursor}
passEjemplo en Python
import os
import requests
API_KEY = os.environ["SCAVIO_API_KEY"]
ENDPOINT = "https://api.scavio.dev/api/v1/reddit/search"
def search_reddit(query: str, sort: str = "relevance"):
posts, cursor = [], None
while True:
body = {"query": query, "sort": sort}
if cursor:
body["cursor"] = cursor
r = requests.post(
ENDPOINT,
headers={"Authorization": f"Bearer {API_KEY}"},
json=body,
timeout=30,
)
r.raise_for_status()
data = r.json()["data"]
posts.extend(data["posts"])
cursor = data.get("nextCursor")
if not cursor or len(posts) >= 50:
break
return posts
results = search_reddit("fastapi vs django 2026", sort="new")
for p in results[:10]:
print(f"{p['score']:>6} r/{p['subreddit']} {p['title']}")Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const ENDPOINT = "https://api.scavio.dev/api/v1/reddit/search";
async function searchReddit(query, sort = "relevance") {
const posts = [];
let cursor;
while (true) {
const body = { query, sort };
if (cursor) body.cursor = cursor;
const r = await fetch(ENDPOINT, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
const { data } = await r.json();
posts.push(...data.posts);
cursor = data.nextCursor;
if (!cursor || posts.length >= 50) break;
}
return posts;
}
const posts = await searchReddit("fastapi vs django 2026", "new");
posts.slice(0, 10).forEach((p) =>
console.log(`r/${p.subreddit} -- ${p.title}`)
);Salida esperada
{
"data": {
"searchQuery": "fastapi vs django 2026",
"totalResults": 14,
"nextCursor": "eyJjYW5kaWRhdGVzX3JldH...",
"posts": [
{
"position": 0,
"id": "t3_1smb9du",
"title": "FastAPI vs Django in 2026",
"subreddit": "Python",
"author": "python_dev",
"timestamp": "2026-04-15T16:34:40+0000",
"nsfw": false
}
]
}
}