Hacer una hoja de cálculo de Google que se actualice sola es sencillo, solo requiere del uso de una herramienta un poco más técnica y escondida para el usuario principiante, el Editor de secuencias de comandos.
Vamos a hacer algo muy interesante esta vez, primero obtendremos el número de seguidores de cualquier cuenta pública de Instagram, y después vamos a guardar ese dato como una columna más de nuestra hoja de cálculo. Por último, vamos a lograr que esta acción se repita todos los días, sin interacción de nuestra parte. Esto lo puedes replicar para otras redes sociales, solo debes procesar los datos diferente para cada una.
Extraer los datos que necesitamos de Instagram
Entonces comencemos por algo que ya hemos visto en posts pasados: extraer datos de una página con la fórmula =IMPORTXML()
, es decir, web scraping. Específicamente, vamos a extraer el número de seguidores de una cuenta pública.
Vamos a cualquier cuenta, por ejemplo, la de Google, y vemos que al momento de esta publicación, tiene 10.5 millones de seguidores.
Si analizamos el código fuente (click derecho en cualquier lugar – Ver código fuente), podemos ver que el dato exacto que queremos se encuentra aquí, en la línea 194:
Ahora sí, en nuestra hoja de cálculo, usemos la fórmula =IMPORTXML()
para traer todo esto y luego procesarlo.
=IMPORTXML("https://www.instagram.com/"&A2&"/","//html/head/script[@type='application/ld+json']")
Procesamos y limpiamos los datos de Instagram
En todo eso que nos trajo, está la parte que queremos, entonces vamos a usar un poco de magia de expresiones regulares para obtenerlo (esto también ya lo vimos en otro post, aquí referenciado, por si quieres ahondar en la explicación de por qué funciona):
=VALUE(REGEXEXTRACT(B2,".userInteractionCount.:.(\d+)."))
Lenguaje del código: JavaScript (javascript)
Si le damos un poco de formato y escondemos la columna intermedia o juntamos todo en la misma fórmula, ¡ya tenemos el dato que queríamos, para cualquier cuenta pública de Instagram!
=VALUE(REGEXEXTRACT(importxml("https://www.instagram.com/"&A2&"/","//html/head/script[@type='application/ld+json']"),".userInteractionCount.:.(\d+)."))
Guardar el dato histórico en otra celda
Ahora, este dato va a estar cambiando constantemente, entonces queremos guardarlo en otra celda junto con la fecha en que se tomó la medición. Para esto usaremos un poco de código Apps Script en el Editor de secuencias de comandos:
Una vez aquí, reemplaza el código que ves:
Por este otro, y después deberás ir a Archivo – Guardar, e indicar un nombre de proyecto:
function guardarSeguidores() { var hoja = SpreadsheetApp.getActiveSheet(); var rango = hoja.getDataRange(); var numFilas = rango.getNumRows(); var numColumnas = rango.getNumColumns(); var siguienteColumna = numColumnas + 1; hoja.getRange(1, siguienteColumna).setValue(new Date()); for (var i=2; i <= numFilas; i++) { var numSeguidores = hoja.getRange(i, 2).getValue(); hoja.getRange(i, numColumnas + 1).setValue(numSeguidores); } }
Ahora, para probar la función, da click en el botón de Ejecutar ▶
Y te pedirá que des permisos para ejecutar este código (esto solo será necesario una vez):
Si ahora regresas a la hoja de cálculo, verás que se habrá copiado la columna del número de seguidores en una nueva, pero con la fecha como título. Si la vuelves a ejecutar, lo hará de nuevo, entonces así podrás ir guardando este número fácilmente
Si esperamos un poco a que cambie la cuenta de seguidores, y lo volvemos a hacer, empezaremos a ver un histórico:
Automatizar ejecución de la fórmula
Hasta ahora vamos muy bien, porque esto nos ahorra mucho tiempo de estar buscando, copiando y pegando. Pero vamos a llevarlo un paso más allá, queremos que todos los días se ejecute esta fórmula y se haga esto, sin intervención nuestra. ¿Preguntas que si se puede? ¡Pero claro que se puede!
Vamos primero al menú de Activadores de proyecto activo (en inglés esta función se llama Current project's triggers o simplemente triggers). El icono es como un reloj:
Nos llevará a una nueva página, ahí elegimos la opción de + Añadir activador:
Y lo configuramos así:
- Fuente del evento: según tiempo
- Tipo de activador (trigger): Temporizador por días. Si quieres que sea cada hora, cada semana o cada mes, puedes configurar eso aquí.
Después de unos días, podrás ver cada vez que se ejecutó nuestra función:
Y que además hay un registro de esas ejecuciones (lo encuentras en el menú de Activadores o Triggers):
¡Y es todo! De aquí puedes hacer tus propias gráficas de históricos o usar la información para un reporte.
[followall link="http://bit.ly/2lYjxWl"]
Si tienes dudas, deja un comentario y con gusto te ayudaremos a resolverlas.
No olvides seguirnos en Twitter y Facebook para más tips, trucos y guías de productividad.
¿Quieres tener las herramientas de oficina de Google (G Suite) en tu empresa? ¡Contáctanos!
Alekz es un apasionado de la tecnología y los videojuegos. Además de ser locutor comercial, disfruta de la expresión artística más sastisfactoria y técnica que existe: programar (y pintar algo de pixel art). Fundó Tesel para ayudar a empoderar a las empresas a desarrollar su máximo potencial mediante la tecnología. Es un absoluto nerd de Star Trek.
Alekz es un apasionado de la tecnología y los videojuegos. Además de ser locutor comercial, disfruta de la expresión artística más sastisfactoria y técnica que existe: programar (y pintar algo de pixel art). Fundó Tesel para ayudar a empoderar a las empresas a desarrollar su máximo potencial mediante la tecnología. Es un absoluto nerd de Star Trek.
Hola Alekz.
Está muy bien pero no me funciona
Hola Gabriel. Desafortunadamente Instagram impuso medidas para bloquear el scraping, intentaré actualizar el tutorial para usar otra red que lo permita, porque todo lo demás sigue siendo relevante dado que la página exponga el número públicamente de alguna forma. Igualmente gracias por avisarme, ¡un saludo!
Hola Alekz, cuando crees que podrás actualizar el tutoría para que funcione? Agradecerte el artículo ya que es súper interesante!
excelente tutorial, pero no me funciono, quiza si hay otra forma de hacerlo estaria agradecido, saludos