La recherche publique de Reddit est puissante, mais ses endpoints JSON officiels sont limités en débit, sans pagination et parfois absents. Pour les agents de surveillance, les pipelines de recherche et les systèmes RAG qui ont besoin de données communautaires fraîches, une API de recherche qui gère la couche de collecte fait la différence entre un projet de week-end et un pipeline de production. Ce tutoriel vous guide à travers l'authentification, l'envoi d'une requête de recherche Reddit et le parcours des pages de curseur pour collecter des articles en Python.
Prérequis
- Python 3.8 ou version ultérieure installé
- bibliothèque requests installée (pip install requests)
- Une clé API Scavio provenant de scavio.dev
- Une requête que vous souhaitez rechercher (mot-clé ou expression limitée à un subreddit)
Parcours
Étape 1: Installer la bibliothèque requests
requests est la seule dépendance nécessaire pour ce tutoriel.
pip install requestsÉtape 2: Définir votre clé API
Gardez les identifiants hors du code source en les lisant depuis une variable d'environnement.
import os
API_KEY = os.environ["SCAVIO_API_KEY"]Étape 3: Envoyer la requête de recherche Reddit
POST vers /api/v1/reddit/search avec votre requête et un tri optionnel. Les requêtes Reddit prennent 5 à 15 secondes, donc définissez un délai d'attente client plus long.
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()Étape 4: Parcourir les articles et suivre le curseur
Les articles se trouvent sous data.posts. Lorsque data.nextCursor n'est pas nul, passez-le comme curseur pour récupérer la page suivante.
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}
passExemple 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']}")Exemple 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}`)
);Sortie attendue
{
"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
}
]
}
}