Reddit est l'endroit où vos utilisateurs parlent de vous sans filtre marketing. Ce tutoriel construit un tracker de mentions de marque qui enregistre chaque publication contenant votre nom de marque et l'écrit dans un CSV que vous pouvez charger dans un outil BI. C'est une alternative légère aux suites d'écoute sociale d'entreprise et coûte 2 crédits par exécution.
Prérequis
- Python 3.8+
- bibliothèque requests
- Une clé API Scavio
- Une liste de mots-clés de marque (noms de produits, fautes d'orthographe, identifiants)
Parcours
Étape 1: Définir les mots-clés à suivre
Inclure les fautes d'orthographe courantes et les noms de produits. Chaque mot-clé est une requête de recherche.
KEYWORDS = ["scavio", "scavio api", "scavio.dev"]Étape 2: Récupérer les publications pour chaque mot-clé
Parcourir les mots-clés, trier par nouveauté et rassembler les publications dans une seule liste.
import os, requests
KEY = os.environ["SCAVIO_API_KEY"]
def search(q):
r = requests.post(
"https://api.scavio.dev/api/v1/reddit/search",
headers={"Authorization": f"Bearer {KEY}"},
json={"query": q, "sort": "new"},
timeout=30,
)
return r.json()["data"]["posts"]
posts = []
for k in KEYWORDS:
posts.extend(search(k))Étape 3: Écrire dans un CSV
Une ligne par publication avec les champs que vous souhaitez suivre dans le temps.
import csv
with open("brand_mentions.csv", "w", newline="") as f:
w = csv.writer(f)
w.writerow(["id", "subreddit", "author", "title", "timestamp", "url"])
for p in posts:
w.writerow([p["id"], p["subreddit"], p["author"], p["title"], p["timestamp"], p["url"]])Étape 4: Planifier l'exécution
Exécuter le script via cron ou GitHub Actions. Ajouter au même CSV au fil du temps pour construire un ensemble de données de tendances.
# crontab -e
# 0 * * * * /usr/bin/python3 /path/to/track_reddit.py >> /var/log/track_reddit.log 2>&1Exemple Python
import os, csv, requests, pathlib
KEY = os.environ["SCAVIO_API_KEY"]
KEYWORDS = ["scavio", "scavio api"]
OUT = pathlib.Path("brand_mentions.csv")
def search(q):
r = requests.post(
"https://api.scavio.dev/api/v1/reddit/search",
headers={"Authorization": f"Bearer {KEY}"},
json={"query": q, "sort": "new"},
timeout=30,
)
r.raise_for_status()
return r.json()["data"]["posts"]
def main():
rows = []
for k in KEYWORDS:
for p in search(k):
rows.append([p["id"], p["subreddit"], p["author"], p["title"], p["timestamp"], p["url"], k])
new_file = not OUT.exists()
with OUT.open("a", newline="") as f:
w = csv.writer(f)
if new_file:
w.writerow(["id", "subreddit", "author", "title", "timestamp", "url", "matched_keyword"])
w.writerows(rows)
print(f"wrote {len(rows)} rows")
if __name__ == "__main__":
main()Exemple JavaScript
import fs from "node:fs";
const KEY = process.env.SCAVIO_API_KEY;
const KEYWORDS = ["scavio", "scavio api"];
const OUT = "brand_mentions.csv";
async function search(q) {
const r = await fetch("https://api.scavio.dev/api/v1/reddit/search", {
method: "POST",
headers: {
Authorization: `Bearer ${KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ query: q, sort: "new" }),
});
return (await r.json()).data.posts;
}
const rows = [];
for (const k of KEYWORDS) {
for (const p of await search(k)) {
rows.push([p.id, p.subreddit, p.author, p.title, p.timestamp, p.url, k]);
}
}
if (!fs.existsSync(OUT)) {
fs.writeFileSync(OUT, "id,subreddit,author,title,timestamp,url,matched_keyword\n");
}
fs.appendFileSync(OUT, rows.map((r) => r.map((v) => JSON.stringify(v)).join(",")).join("\n") + "\n");Sortie attendue
wrote 12 rows
brand_mentions.csv:
id,subreddit,author,title,timestamp,url,matched_keyword
t3_1smxyz1,SaaS,marketer42,"Has anyone used scavio?",2026-04-16T09:12:00+0000,https://...,scavio
t3_1smxyz2,devtools,engineer7,"scavio vs serpapi review",2026-04-16T10:40:00+0000,https://...,scavio