Crea un feed RSS 2.0 rápidamente con Python

2020-05-11

Índice

  1. Inicio
  2. Instalación
  3. Creación del feed
  4. Generar el feed
  5. Añadir entradas al feed
  6. Todo junto
  7. Referencia:

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… 🐧

Referencia:


Ingrese la dirección de su instancia


Más publicaciones como este

Docker: Servidor TT-RSS

2020-02-06 | #docker #raspberry #rss

Índice Creación del contenedor Normalmente, cuando utilizo un contenedor suelo utilizar el que se proporciona de manera oficial, pero si no lo encuentro me gusta utilizar los de Linuxserver, como en el caso de Tiny Tiny RSS (TT-RSS).

Continuar leyendo 