-- Leo's gemini proxy

-- Connecting to gmi.osiux.com:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=es_AR

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


AUTHOR: Osiris Alejandro Gomez

EMAIL: osiux@osiux.com

DATE: 2023-04-30 08:22


[IMG]

[1]


Hola *Mastodon* Chau *Pleroma*


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


Tenía pendiente participar del `Fediverso` ^3[4] 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[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` ^5[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` ^6[7] que recibe un archivo `.gmi`, 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[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` ^8[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    │
╞═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪═════════╪════════╡
│ weeknam │ Monday  │ Tuesday │ Wednesd │ Thursda │ Friday  │ Saturda │ Sunday │
│ e       │         │         │ ay      │ y       │         │ y       │        │
├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┤
│ tag     │ Ansible │ Bash    │ Evento  │ Git     │ GraphVi │ SysAdmi │ Blog   │
│         │         │         │         │         │ z       │ n       │        │
└─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┘

Ahora `blog2mastodon` se ejecuta mediante el `cron` buscando y validando archivos `.gmi` 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[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` ^10[11] 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[12] 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.gmi
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[13] 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`[14] 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`[15] 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`[16] agregar imagen y tags OpenGraph a *publicar cada post de blog como status de mastodon usando `mastodon-bash-utils`*

`2023-05-16 19:31`[17] agregar *publicar cada post de blog como status de mastodon usando `mastodon-bash-utils`*


1: file:img/blog2mastodon.png

2: https://pleroma.social/

3: https://cyberdelia.com.ar/

4: https://fediverse.info/

5: https://docs.joinmastodon.gmi/api/

6: https://gitlab.com/osiux/mastodon-bash-utils/-/raw/develop/mastodon-statuses-new

7: https://gitlab.com/osiux/mastodon-bash-utils/-/raw/develop/org2mastodon

8: https://ogp.me/

9: https://gitlab.com/osiux/mastodon-bash-utils/-/raw/develop/blog2mastodon

10: https://gitlab.com/osiux/mastodon-bash-utils/-/raw/develop/blog2mastodon-alert

11: https://ntfy.sh/

12: https://gitlab.com/osiux/osiux.gitlab.io/

13: https://gitlab.com/osiux/mastodon-bash-utils/

14: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/ac85a947896421b22647e437f0820f0a22ad47af

15: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/5eff6c558b6d882c094da5370b7f32d17ad1a25e

16: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/983c54f1862f2095f6953572733c198cc5af1fc9

17: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/21d086fe86f970ed81b77ba00791f944ccae3aa6

-- Response ended

-- Page fetched on Thu May 2 05:55:37 2024