Tootear desde Google Sheet
Tags: google, mastodon
Published: 2022-05-22 20:45:52

---
title: Tootear desde Google Sheet
published: true
date: 2022-05-17 00:00:00 UTC
tags: google,mastodon
canonical_url: https://jorge.aguilera.soy/blog/2022/google-sheet-mastodon.html
---

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).

<dl>
<dt>WARNING</dt>
<dd>
<p>No compartas este token pues sirve para tootear en tu nombre</p>
</dd>
</dl>

## 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)
}
```

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/](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ón`Ejecutar`. 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)