mastodon-bash-utils
=> [IMG]
[1]
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
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:
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
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
text/gemini;lang=es_AR
This content has been proxied by September (ba2dc).