Crea un feed RSS 2.0 rápidamente con Python

5 minutos de lectura

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

1pip 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:

 1fg = FeedGenerator()
 2fg.id("https://elblogdelazaro.org/documentacin/rss.xml")
 3fg.title('Documentación El Blog de Lázaro')
 4fg.author({'name': 'Carlos M.', 'email': 'hefistion.at.com'})
 5fg.link(href='https://elblogdelazaro.org', rel='alternate')
 6fg.icon('https://elblogdelazaro.org/documentacion/images/favicon.ico')
 7fg.logo('https://elblogdelazaro.org/documentacion/images/favicon.png')
 8fg.rights('cc-by NC 4.0')
 9fg.subtitle('Documentación de El Blog de Lázaro')
10fg.link(href='https://elblogdelazaro.org/documentacion/', rel='self')
11fg.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

1fg.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

 1fe = fg.add_entry()
 2fe.id('https://elblogdelazaro.org/posts/2020-04-23-mi-nueva-configuracion-de-emacs/')
 3fe.title('Mi (nueva) configuración de Emacs')
 4fe.content('''He cambiado la forma trabajar con mi fichero de configuración
 5 de Emacs. Antes lo tenia en un solo fichero org. Pero esta configuración
 6  tenia demasiadas cosas que no entendía/necesitaba ya que cuando lo hice me
 7   limite a copiar y pegar de internet aquellas cosas que iba necesitando,
 8   incluyendo funciones y paquetes innecesarios para mi flujo de trabajo.
 9      ''')
10fe.summary(u'''He cambiado la forma trabajar con mi fichero de configuración
11 de Emacs…''')
12fe.link(href='https://elblogdelazaro.org/posts/2020-04-23-mi-nueva-configuracion-de-emacs/', rel='alternate')
13fe.author(name='Carlos M.', email='hefistion.at.mail.com')

Todo junto

Veamos ahora como trabaja todo junto, fichero viene a ser el siguiente:

 1import sys
 2from feedgen.feed import FeedGenerator
 3
 4USAGE = '''
 5Usage: python -m feedgen [OPTION]
 6Use one of the following options:
 7File options:
 8  <file>.rss       -- Generate RSS test teed
 9Stdout options:
10  rss              -- Generate RSS test output
11'''
12
13
14def print_enc(s):
15    '''Print function compatible with both python2 and python3 accepting strings
16    and byte arrays.
17    '''
18    if sys.version_info[0] >= 3:
19      print(s.decode('utf-8') if isinstance(s, bytes) else s)
20    else:
21      print(s)
22
23
24def main():
25    if len(sys.argv) != 2 or not (
26	  sys.argv[1].endswith('rss')
27      print(USAGE)
28      exit()
29
30    arg = sys.argv[1]
31
32    # Feed
33    fg = FeedGenerator()
34    fg.id("https://elblogdelazaro.org/documentacin/rss.xml")
35    fg.title('Documentación El Blog de Lázaro')
36    fg.author({'name': 'Carlos M.', 'email': 'hefistion.at.com'})
37    fg.link(href='https://elblogdelazaro.org', rel='alternate')
38    fg.icon('https://elblogdelazaro.org/documentacion/images/favicon.ico')
39    fg.logo('https://elblogdelazaro.org/documentacion/images/favicon.png')
40    fg.rights('cc-by NC 4.0')
41    fg.subtitle('Documentación de El Blog de Lázaro')
42    fg.link(href='https://elblogdelazaro.org/documentacion/', rel='self')
43    fg.language('es')
44
45    # Entradas
46    # 1
47    fe = fg.add_entry()
48    fe.id('https://elblogdelazaro.org/posts/2020-04-23-mi-nueva-configuracion-de-emacs/')
49    fe.title('Mi (nueva) configuración de Emacs')
50    fe.content('''He cambiado la forma trabajar con mi fichero de configuración
51     de Emacs. Antes lo tenia en un solo fichero org. Pero esta configuración
52      tenia demasiadas cosas que no entendía/necesitaba ya que cuando lo hice me
53       limite a copiar y pegar de internet aquellas cosas que iba necesitando,
54       incluyendo funciones y paquetes innecesarios para mi flujo de trabajo.
55	  ''')
56    fe.summary(u'''He cambiado la forma trabajar con mi fichero de configuración
57     de Emacs…''')
58    fe.link(href='https://elblogdelazaro.org/posts/2020-04-23-mi-nueva-configuracion-de-emacs/', rel='alternate')
59    fe.author(name='Carlos M.', email='hefistion.at.gmail.com')
60
61    # 2
62    fe = fg.add_entry()
63    fe.id('https://elblogdelazaro.org/posts/2020-04-27-ocultar-usuario-libvirt-qemu-user-en-pantalla-de-login-en-linux-mint-19_3/')
64    fe.title('Ocultar usuario libvirt-qemu en pantalla de login en Linux Mint 19.3')
65    fe.content('''Si has instalado virt-manager en Linux Mint 19.3 y Cinnamon
66    como entorno de escritorio seguramente también tendrás LightDM como gestor
67    de inicio de sesión, habrás notado que en tu pantalla de inicio de sesión
68    ahora tendrás a un nuevo usuario llamado **libvirt-qemu**.
69	  ''')
70    fe.summary(u'''Si has instalado virt-manager en Linux Mint 19.3''')
71    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')
72    fe.author(name='Carlos M.', email='hefistion.at.gmail.com')
73
74    # Creamos el fichero
75    fg.rss_file('rss.xml')
76
77# Imprime por pantalla
78#   print_enc(fg.rss_str(pretty=True))
79
80if __name__ == '__main__':
81    main()

Espero que te haya gustado, pasa un buen día… :penguin:

Referencia: