Crea un feed RSS 2.0 rápidamente con Python
2020-05-11
Índice
Inicio
Si necesitas crear un feed RSS par atu sitio web, puedes crear uno muy fácilmente con el modulo de Python feedgen.
Este módulo se puede utilizar para generar fuentes web en formato ATOM y RSS. Tiene soporte para extensiones. Por ejemplo incluye, una extensión para producir Podcasts.
Instalación
Yo la he realizado mediante pip aunque puede que tu distribución lo incluya como un paquete preconpilado
pip install feedgen
Creación del feed
Para generar el feed, creamos un fichero python, por ejemplo genfeed.py, y simplemente se instancia la clase FeedGenerator e insertamos los datos de nuestro sitio:
fg = FeedGenerator()
fg.id("https://elblogdelazaro.org/documentacin/rss.xml")
fg.title('Documentación El Blog de Lázaro')
fg.author({'name': 'Carlos M.', 'email': 'hefistion.at.com'})
fg.link(href='https://elblogdelazaro.org', rel='alternate')
fg.icon('https://elblogdelazaro.org/documentacion/images/favicon.ico')
fg.logo('https://elblogdelazaro.org/documentacion/images/favicon.png')
fg.rights('cc-by NC 4.0')
fg.subtitle('Documentación de El Blog de Lázaro')
fg.link(href='https://elblogdelazaro.org/documentacion/', rel='self')
fg.language('es')
Generar el feed
Me voy a centrar en generar el feed en formato RSS aunque el modulo feedgen tambión permite generar el feed en formato Atom, tan solo debemos de añdir anuestro añadimos a nuestro fichero feddgen.py
fg.rss_file('rss.xml')
Esto vuelca la salida al fichero rss.xml
, es el nombre que me gusta a mi, tu puedes llamarlo como prefieras.
Añadir entradas al feed
Para añadir entradas al feed lo haremos con el objeto FeedEntry
fe = fg.add_entry()
fe.id('https://elblogdelazaro.org/posts/2020-04-23-mi-nueva-configuracion-de-emacs/')
fe.title('Mi (nueva) configuración de Emacs')
fe.content('''He cambiado la forma trabajar con mi fichero de configuración
de Emacs. Antes lo tenia en un solo fichero org. Pero esta configuración
tenia demasiadas cosas que no entendía/necesitaba ya que cuando lo hice me
limite a copiar y pegar de internet aquellas cosas que iba necesitando,
incluyendo funciones y paquetes innecesarios para mi flujo de trabajo.
''')
fe.summary(u'''He cambiado la forma trabajar con mi fichero de configuración
de Emacs…''')
fe.link(href='https://elblogdelazaro.org/posts/2020-04-23-mi-nueva-configuracion-de-emacs/', rel='alternate')
fe.author(name='Carlos M.', email='hefistion.at.mail.com')
Todo junto
Veamos ahora como trabaja todo junto, fichero viene a ser el siguiente:
import sys
from feedgen.feed import FeedGenerator
USAGE = '''
Usage: python -m feedgen [OPTION]
Use one of the following options:
File options:
<file>.rss -- Generate RSS test teed
Stdout options:
rss -- Generate RSS test output
'''
def print_enc(s):
'''Print function compatible with both python2 and python3 accepting strings
and byte arrays.
'''
if sys.version_info[0] >= 3:
print(s.decode('utf-8') if isinstance(s, bytes) else s)
else:
print(s)
def main():
if len(sys.argv) != 2 or not (
sys.argv[1].endswith('rss')
print(USAGE)
exit()
arg = sys.argv[1]
# Feed
fg = FeedGenerator()
fg.id("https://elblogdelazaro.org/documentacin/rss.xml")
fg.title('Documentación El Blog de Lázaro')
fg.author({'name': 'Carlos M.', 'email': 'hefistion.at.com'})
fg.link(href='https://elblogdelazaro.org', rel='alternate')
fg.icon('https://elblogdelazaro.org/documentacion/images/favicon.ico')
fg.logo('https://elblogdelazaro.org/documentacion/images/favicon.png')
fg.rights('cc-by NC 4.0')
fg.subtitle('Documentación de El Blog de Lázaro')
fg.link(href='https://elblogdelazaro.org/documentacion/', rel='self')
fg.language('es')
# Entradas
# 1
fe = fg.add_entry()
fe.id('https://elblogdelazaro.org/posts/2020-04-23-mi-nueva-configuracion-de-emacs/')
fe.title('Mi (nueva) configuración de Emacs')
fe.content('''He cambiado la forma trabajar con mi fichero de configuración
de Emacs. Antes lo tenia en un solo fichero org. Pero esta configuración
tenia demasiadas cosas que no entendía/necesitaba ya que cuando lo hice me
limite a copiar y pegar de internet aquellas cosas que iba necesitando,
incluyendo funciones y paquetes innecesarios para mi flujo de trabajo.
''')
fe.summary(u'''He cambiado la forma trabajar con mi fichero de configuración
de Emacs…''')
fe.link(href='https://elblogdelazaro.org/posts/2020-04-23-mi-nueva-configuracion-de-emacs/', rel='alternate')
fe.author(name='Carlos M.', email='hefistion.at.mail.com')
# 2
fe = fg.add_entry()
fe.id('https://elblogdelazaro.org/posts/2020-04-27-ocultar-usuario-libvirt-qemu-user-en-pantalla-de-login-en-linux-mint-19_3/')
fe.title('Ocultar usuario libvirt-qemu en pantalla de login en Linux Mint 19.3')
fe.content('''Si has instalado virt-manager en Linux Mint 19.3 y Cinnamon
como entorno de escritorio seguramente tambión tendrás LightDM como gestor
de inicio de sesión, habrás notado que en tu pantalla de inicio de sesión
ahora tendrás a un nuevo usuario llamado **libvirt-qemu**.
''')
fe.summary(u'''Si has instalado virt-manager en Linux Mint 19.3''')
fe.link(href='https://elblogdelazaro.org/posts/2020-04-27-ocultar-usuario-libvirt-qemu-user-en-pantalla-de-login-en-linux-mint-19_3/', rel='alternate')
fe.author(name='Carlos M.', email='hefistion.at.gmail.com')
# Creamos el fichero
fg.rss_file('rss.xml')
# Imprime por pantalla
# print_enc(fg.rss_str(pretty=True))
if __name__ == '__main__':
main()
Espero que te haya gustado, pasa un buen día… 🐧