Lesson completed!
-

Leccion 9 / 21 · Conectá tu Instagram (Meta MCP)

Buildeá tu propio puller

Max Techera
Siguiente

Buildeá tu propio puller

La Opción A era el MCP — rápido, código de otro. La Opción B sos vos pidiéndole a Claude Code que escriba un script chico que le pegue a la Graph API directo y guarde tus reels en disco. Misma data, código tuyo, ningún server externo con tu token.

Acordate del reframe: esto no lo escribís vos. Describís el script y el output, y Claude Code lo buildeaa. Es la skill de vibe coding del Capítulo 1 aplicada a una tarea real.

El prompt de build

Pegá esto en Claude Code, tal cual:

Escribí un script Python `pull_mine.py` que llame a la Instagram Graph API
GET /v25.0/{media-id}/insights para mis últimos 30 reels. Traé estos campos:
views, reach, ig_reels_avg_watch_time (convertí de ms a segundos), saved, shares, comments, likes,
total_interactions, reels_skip_rate. El token está en $IG_TOKEN. Guardá cada reel como
data/mine/<id>.json. Rate-limit 1 req/seg y cacheá las respuestas crudas en cache/.

Eso es todo. Claude escribe pull_mine.py, lo corrés, y data/mine/ se llena con un archivo JSON por reel.

Qué hace cada pieza de ese prompt

Releé el prompt con estas notas y vas a entender la API sin clavarte en la documentación:

  • GET /v25.0/{media-id}/insights — el endpoint. Para cada reel (identificado por su media-id), devuelve las métricas de ese reel. La versión v25.0 es una versión estable de la Graph API.
  • La lista de camposviews, reach, ig_reels_avg_watch_time, saved, shares, comments, likes, total_interactions, reels_skip_rate. Estos son los nombres exactos de los campos de Meta. Pedilos explícitos o te da los defaults.
  • ig_reels_avg_watch_time en ms → segundos — Meta devuelve el avg watch time en milisegundos. La conversión está señalada en el prompt para que los números se lean en segundos, como vos los pensás.
  • data/mine/<id>.json — un archivo por reel. Este es el modelo de almacenamiento de todo el sistema: archivos, no un chat. Es por eso que tu data compounde en vez de evaporarse.

Por qué importan las líneas de rate-limit y cache

Dos líneas de ese prompt parecen aburridas pero te ahorran dolor real:

  • Rate-limit 1 req/seg — Meta throttlea a los que llaman agresivo. Una request por segundo te mantiene bien por debajo del límite así el script no queda bloqueado a mitad de corrida.
  • cacheá las respuestas crudas en cache/ — cachear las respuestas crudas significa que volver a correr el script no cuesta nada y nunca vuelve a martillar la API. Podés iterar cómo procesás la data sin volver a traerla.
Dato:

Todo aterriza en data/mine/ como JSON plano que es tuyo. Los capítulos siguientes buildean el dashboard y el analizador de formato directo arriba de estos archivos — nada de lo de acá es descartable. Es la misma carpeta a la que escribe el camino del MCP, así que el resto del sistema no le importa qué opción elegiste.

Knowledge check

¿A qué endpoint de la Graph API le pega el puller para las métricas de cada reel?

Lo que te llevás

No necesitás el MCP — pedile a Claude Code que buildee pull_mine.py, que le pega a GET /v25.0/{media-id}/insights, pide los campos exactos de Meta (convirtiendo ig_reels_avg_watch_time de ms a segundos), rate-limita a 1 req/seg, y guarda cada reel en data/mine/<id>.json. Misma data que el MCP, código que controlás.

Compartir