publicar cada post de blog como status de mastodon usando mastodon-bash-utils

index | about | archive | charlas | docs | links

dot | git | img | plt | tty | uml

blog2mastodon.png

Hola Mastodon Chau Pleroma

Por un par de meses tuve la cuenta del pleroma 1 de cyberdelia 2 pero esta instancia murió sin backup, aunque en mi caso no había publicado mucho que digamos…

Tenía pendiente participar del Fediverso 3 en modo escritura y decidí retomar esta vez mediante la instancia rebel.ar [fn:rebel.ar] de Mastodon 4

Esta vez, si bien no tenía muy claro que iba a escribir, quería hacerlo mediante la API de Mastodon, así de esta manera, si se muere esta instancia y no logro exportar los datos antes, contaría un backup local de todo lo que publicaría, y podría republicar nuevamente en el mismo orden en otra instancia e incluso tal vez hasta podría repetir la misma publicación en mas de una instancia.

Hola Mastodon API

Resultó muy simple interactuar con la Mastodon API 5 y como era de esperarse lo hice usando curl, jq y BASH, inicialmente hice pruebas en modo privado hasta que salía algo presentable.

Básicamente, publicar un toot o status es pasar el contenido del estado en la variable STATUS, el idioma STATUS_LANG, la visibilidad (public, unlisted, private, direct), y los IDs de la media que querés adjuntar (imágenes, videos, etc).

curl -s -X POST "$URL_API"          \
  -H "Accept: application/json"     \
  -H "Authorization: Bearer $TOKEN" \
  -F "status=$STATUS"               \
  -F "language=$STATUS_LANG"        \
  -F "visibility=$VISIBILITY"       \
  -F "media_ids[]=$MEDIA_ID"        > "$JSON"

El resultado es un json con toda la metadata, con links directos a cada tag, a las imágenes y mucha información relacionada.

org2mastodon

Ahora que ya tengo un mastodon-statuses-new 6 debía pensar qué iba a publicar y como no soy muy amante del micro-blogging simplemente porque no tengo capacidad para resumir, pensé que tal vez sería una buena idea publicar cada post de mi blog en forma de status de Mastodon.

Entonces surgió org2mastodon 7 que recibe un archivo .org, extrae del header los tags TITLE, DESCRIPTION, KEYWORDS, LANGUAGE y obtiene la primer imagen que este en el archivo o la imagen definida en los tags de OpenGraph 8 y se ocupa de publicar un nuevo status de Mastodon.

Ya estaba muy cerca de salir a publicar a lo pavote, pero surgieron 2 problemas a resolver:

  1. No todos los posts tenían todos los tags necesarios ni imágenes
  2. Cuándo publicar? En que orden? Cómo evitar duplicar posts?

blog2mastodon

La solución vino de la mano de blog2mastodon 9 que revisa mi blog y compara posts publicados en Mastodon con los pendientes de publicación, para sistematizar de alguna manera, se me ocurrió asignar un Tag a cada día de la semana y de esta manera saldría un posible cronograma de publicación, en base al primer Tag definido en KEYWORDS de cada archivo a publicar y es el siguiente:

weekday 1 2 3 4 5 6 7
weekname Monday Tuesday Wednesday Thursday Friday Saturday Sunday
tag Ansible Bash Evento Git GraphViz SysAdmin Blog

Ahora blog2mastodon se ejecuta mediante el cron buscando y validando archivos .org para convertirlos a Mastodon y publicarlos automáticamente sin mi intervención.

Obviamente esto falló varias veces y al principio lo ejecutaba manualmente o a una hora definida en el cron para monitorear comportamiento, pero luego de unos días, comenzó a funcionar solito y solo.

blog2mastodon-alert

blog2mastodon-alert 10 se ocupa de avisarme si hay algo publicable, luego de publicarlo enviándome el la URL y lo más importante, alertándome mediante ntfy.sh [fn:ntfy.sh] si no hay nada para publicar con diferentes niveles de criticidad, entonces en el mejor de los casos solo basta que me ocupe de completar DESCRIPTION, KEYWORDS y verificar si cuenta con una imagen un post, realizar el commit en el repo de mi blog 11 y en algún momente el crontab se ocupará de publicar por mi en Mastodon.

Un ejemplo del log que genera blog2mastodon-alert:

⌂ NTFY_SEND=0 blog2mastodon-alert
No hay cambios locales para guardar
Tu rama está actualizada con 'origin/master'.
warning: redirigiendo a https://gitlab.com/osiux/osiux.gitlab.io.git/
Ya está actualizado.
2023-05-02 09:59:39 blog2mastodon-alert date=2023-05-02 weekday=2 weekname=Tuesday date_published_total=1 tag_total=5 tag_published=5 tag_unpublished=0 priority=Low tag=Bash next=null
2023-05-02 09:59:39 blog2mastodon-alert date=2023-05-03 weekday=3 weekname=Wednesday date_published_total=0 tag_total=4 tag_published=4 tag_unpublished=0 priority=Urgent tag=Evento next=null
2023-05-02 09:59:39 blog2mastodon-alert date=2023-05-04 weekday=4 weekname=Thursday date_published_total=0 tag_total=6 tag_published=4 tag_unpublished=2 priority=Low tag=Git next=2023-02-27-git-auto-commit-and-push-using-crontab.org
2023-05-02 09:59:39 blog2mastodon-alert date=2023-05-05 weekday=5 weekname=Friday date_published_total=0 tag_total=3 tag_published=3 tag_unpublished=0 priority=Urgent tag=GraphViz next=null
2023-05-02 09:59:39 blog2mastodon-alert date=2023-05-06 weekday=6 weekname=Saturday date_published_total=0 tag_total=5 tag_published=5 tag_unpublished=0 priority=Urgent tag=SysAdmin next=null
2023-05-02 09:59:39 blog2mastodon-alert date=2023-05-07 weekday=7 weekname=Sunday date_published_total=0 tag_total=3 tag_published=3 tag_unpublished=0 priority=Urgent tag=Blog next=null
2023-05-02 09:59:39 blog2mastodon-alert date=2023-05-08 weekday=1 weekname=Monday date_published_total=0 tag_total=5 tag_published=5 tag_unpublished=0 priority=Urgent tag=Ansible next=null
2023-05-02 09:59:39 blog2mastodon-alert date=2023-05-09 weekday=2 weekname=Tuesday date_published_total=0 tag_total=5 tag_published=5 tag_unpublished=0 priority=Urgent tag=Bash next=null
2023-05-02 09:59:39 blog2mastodon-alert weekday=0 total=36 published=34 unpublished=2 priority=Low tag=all next=null

first public release

Luego de semanas de usar mastodon-bash-utils 12 en modo developer aprovecho a generar el primer release público! y seguramente estaré compartiendo una review mas detallada de cómo fue realizar 1 mes entero de posts, según el cronograma debería ser el próximo Domingo.

ChangeLog

  • 2023-05-17 08:46 corregir sintaxis y agregar referencia a ntfy.sh en publicar cada post de blog como status de mastodon usando mastodon-bash-utils
  • 2023-05-16 19:51 actualizar TITLE, DESCRIPTION y tags OpenGraph en publicar cada post de blog como status de mastodon usando mastodon-bash-utils
  • 2023-05-16 19:19 agregar imagen y tags OpenGraph a publicar cada post de blog como status de mastodon usando mastodon-bash-utils
  • 2023-05-16 19:31 agregar publicar cada post de blog como status de mastodon usando mastodon-bash-utils

Notas al pie de página: