Reddit es donde tus usuarios hablan de ti sin filtro de marketing. Este tutorial crea un rastreador de menciones de marca que registra cada publicación que contiene su marca y la escribe en un CSV que puede cargar en una herramienta de BI. Es una alternativa ligera a las suites de escucha social empresarial y cuesta 2 créditos por ejecución.
Requisitos previos
- Python 3.8+
- solicita biblioteca
- Una clave API de Scavio
- Una lista de palabras clave de marca (nombres de productos, errores ortográficos, identificadores)
Guia paso a paso
Paso 1: Definir las palabras clave a seguir
Incluya errores ortográficos comunes y nombres de productos. Cada palabra clave es una solicitud de búsqueda.
KEYWORDS = ["scavio", "scavio api", "scavio.dev"]Paso 2: Obtener publicaciones para cada palabra clave
Recorra las palabras clave, ordene por nuevas y recopile las publicaciones en una sola lista.
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))Paso 3: Escribir en CSV
Una fila por publicación con los campos que desea que sean tendencia a lo largo del tiempo.
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"]])Paso 4: Agendarlo
Ejecute el script en cron o GitHub Actions. Agregue el mismo CSV a lo largo del tiempo para crear un conjunto de datos de tendencias.
# crontab -e
# 0 * * * * /usr/bin/python3 /path/to/track_reddit.py >> /var/log/track_reddit.log 2>&1Ejemplo en 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()Ejemplo en 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");Salida esperada
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