Després de revifar aquest blog vaig pensar com podia publicar automàticament a mastodont.cat les entrades que hi escrigui.
Recentment vaig alliberar el codi de nitter2toot, que permet fer tuts a qualsevol servidor Mastodon dels tuits que facin els usuaris de Twitter, gràcies a que Nitterté RSS feeds. Doncs em va venir l’inspiració que podía adaptar el codi de nitter2toot per fer el que he anomenat ghost2toot.
ghost2toot funciona pràcticament igual que nitter2toot però amb algun petit canvi. Per exemple la id del feed no és numèrica com a Nitter si no que és alfanumèrica. Per tant he hagut de canviar el tipus de la columna de la base de dades de ‘bigint’ a ‘varchar’. També he canviat el nom de la taula de la base de dades per raons obvies, de ‘tweets’ a ‘feeds’.
Gràcies a la llibreria ‘feedparser’ de Python, obtenir els feeds d’un RSS feed és tant fàcil com això:
feedparser.parse(url)
url és la url del feed, en el cas d’aquest blog és ‘https://blog.mastodont.cat/rss’. Els feeds que obté feedparser (màxim 20) els guardem en una variable per a poder treballar amb ells:
blogfeeds = feedparser.parse(url)
Les entrades del feed (del blog) es poden veure imprimint ‘blogfeeds.entries’ i gestionar-les és tant fàcil com fer-ho dins un bucle:
for entry in reversed(blogfeeds.entries)
Em sembla genial que a Python es pugui canviar l’ordre d’una ‘list’ com ara (blogfeeds.entries) amb ‘reversed’. Així la primera entrada del blog a tractar és la més antiga. El bucle ‘for in’ navega una a una per totes les entrades del blog, per tant aprofitem-ho guardant les dades de cada una en variables:
title = entry['title']
id = entry['id']
link = entry['link']
published = entry['published']
author = entry['author']
Les variables s’expliquen per sí soles i son les que ens serviran per a fer el tut però mirant prèviament en la base de dades Postgresql si l’entrada ja ha estat publicada. En una pròxima entrada explicaré com es fa.