DEV Community

Jorge Eψ=Ĥψ
Jorge Eψ=Ĥψ

Posted on • Originally published at jorge.aguilera.soy on

Tootear desde Google Sheet

A estas alturas no creo que haga mucha falta explicar qué es Mastodon pero por si acaso simplemente decir que es una aplicación para el microblogging similar a Twitter aunque con algunas (muchas) diferencias.

A diferencia de Twitter un usuario de Mastodon lo primero que tiene que elegir es a qué instancia quiere pertenecer, entiendo instancia como una "comunidad", "grupo de usuarios con algo en común", y es esa instancia la que se federa con otras instancias tejiendo una red de instancias de tal forma que el toot (equivalente a tweet) se puede propagar entre la red.

El API de Mastodon es bastante simple (aunque totalmente funcinoal) y con un simple POST podemos enviar toots.

En este post vamos a ver cómo mantener en una hoja de Google Sheet una lista de refranes preparados que se enviarán de forma aleatoria cada día a una hora determinada por nosotros

Mastodon

Una vez que estás dado de alta en una instancia puedes crear un API Token desde tu perfil, en opciones de Desarrollo

Crear una nueva aplicación con el nombre que quieras y marcando la opción de write

Te generará una token (una cadena de caracteres y simbolos raros).

WARNING

No compartas este token pues sirve para tootear en tu nombre

Google Sheet

La estructura de la hoja va a ser supersimple:

  • en la primera fila tendremos una cabecera con dos columnnas, Estado y Refrán

  • en las siguientes filas vamos a escribir tantos refranes como queremos, uno por fila dejando la primera columna vacía si queremos que el refrán se envíe o con el texto "NO ENVIAR" si por alguna razón no queremos que sea enviado

Estado Refrán
Perro ladrador, poco mordedor

Script

En el menú de Google Sheet seleccionamos Extensiones, Apps Script y se nos abrirá una ventana nueva

De forma predeterminada te habrá escrito un par de líneas de código a modo de ejemplo que no nos interesa. Las borramos y las sustituimos por este código:

var instancia = 'mastodon.madrid';
var bootToken = '1d04U1Wnc0h-xxxxxxXXXX-_YYYY';

function sendMastodon() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  const rows = sheet.getRange(2,1,100,2).getValues()
  var candidates = []
  for( var r=0; r<rows.length; r++){
    const row = rows[r];
    if( row[0].toString() !== ""){
      continue;
    }
    if( row[1].toString().trim().length == 0){
      continue;
    }
    candidates.push(row[1])
  }

  const toot = candidates[Math.floor(Math.random() * candidates.length)];

  var payload = {
    'status': toot,
  }
  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload),
    'headers': {
      'Authorization': `Bearer ${bootToken}`
    },
    'muteHttpExceptions':true
  };
  Logger.log(payload)

  var url = `https://${instancia}/api/v1/statuses`;
  const resp = UrlFetchApp.fetch(url, options);
  Logger.log(resp)
}
Enter fullscreen mode Exit fullscreen mode

En las dos primeras tienes que personalizar con los datos de tu usuario:

  • la instancia es el nombre del servidor (por ejemplo mi servidor es https://mastodon.madrid/ así que la variable es mastodon.madrid)

  • el token que generamos al principio

Básicamente el script lo que hace es recuperar las 100 primeras filas y filtrar aquellas que la primera columna está "limpia" (si tuviera texto no se envia) y la segunda columna tiene algo (el refran a enviar)

Una vez filtrados los refranes posibles se elige una de forma aleatoria y se prepara un POST para enviar

  • el payload es un json con un solo campo status que contiene el toot

  • headers contiene una autorizacion con el token

Probando

Para probar que todo está bien ejecutaremos el script (que nos pedirá permisos para poder ejecutar en nuestra cuenta)

Simplemente nos aseguraremos que la funcion sendMastodon se encuentra en el listbox del menú superior, junto al botónEjecutar. Pulsaremos el botón Ejecutar y si todo ha ido bien habremos envíado un toot a nuestra instancia

Scheduler

Podemos pulsar el botón ejecutar tantas veces como queramos pero para hacerlo de forma desatendida usaremos la capacidad de planificar una llamada que nos ofrece Google Sheet:

En el menú vertical de la izquierda buscaremos Activadores (icono de un reloj despertador) y crearemos un nuevo activador

  • seleccionamos la funcion sendMastodon

  • fuente de evento Según tiempo

  • temporizador por dias

  • a las 09:00

(obviamente tú seleccionarás la frecuencia y hora a la que quieres ejecutarlo, esto es un ejemplo)

Top comments (0)