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

· osiux's blog


#+LINK_HOME:   index.html
#+INCLUDE:     header.org

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

Hola Mastodon API #

Resultó muy simple interactuar con la Mastodon API 4 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).

1
2curl -s -X POST "$URL_API"          \
3  -H "Accept: application/json"     \
4  -H "Authorization: Bearer $TOKEN" \
5  -F "status=$STATUS"               \
6  -F "language=$STATUS_LANG"        \
7  -F "visibility=$VISIBILITY"       \
8  -F "media_ids[]=$MEDIA_ID"        > "$JSON"
9

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 5 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 6 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 7 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 8 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 9 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 10 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 #