Volver al blog
data-engineering

Lector de RSS/Atom desde línea de comandos inspirado en Taskwarrior, sincronizado con Git

Un lenguaje de programación basado en línea de comandos con funciones de lectura de feeds y sincronización en Git.

8 de marzo de 20265 min
rssatomtaskwarriorgitcli

Introducción

En el mundo del desarrollo de software, la gestión eficiente de información es crucial. Las fuentes de noticias como RSS y Atom feeds son herramientas valiosas para mantenerse actualizado con las últimas noticias y actualizaciones en diversos campos. Sin embargo, la gestión manual de estos feeds puede ser tediosa y poco eficiente. En este artículo, exploraremos un proyecto llamado blogtato, una CLI (Interfaz de Línea de Comandos) para leer feeds RSS/Atom inspirada en Taskwarrior y sincronizada usando Git.

¿Qué es blogtato?

blogtato es una herramienta de línea de comandos diseñada para leer feeds RSS y Atom. Su inspiración proviene de Taskwarrior, una herramienta de gestión de tareas altamente personalizable y potente. La principal ventaja de blogtato es que permite la sincronización de feeds entre múltiples dispositivos utilizando Git, lo que facilita la gestión de información en entornos multiplataforma.

Instalación y Configuración

Requisitos

Antes de instalar blogtato, asegúrate de tener los siguientes requisitos cumplidos:

  • Python 3.8+: blogtato está escrito en Python y requiere una versión reciente.
  • Git: Para la sincronización de feeds.
  • feedparser: Una biblioteca Python para analizar feeds RSS y Atom.
  • requests: Una biblioteca Python para realizar solicitudes HTTP.

Instalación

Puedes instalar blogtato utilizando pip:

pip install blogtato

Si prefieres instalar desde el repositorio de GitHub, puedes hacerlo de la siguiente manera:

git clone https://github.com/kantord/blogtato.git
cd blogtato
pip install .

Configuración Inicial

Después de instalar blogtato, debes configurarlo para que pueda acceder a tus feeds y sincronizarlos con Git.

  1. Crear el archivo de configuración:

    blogtato init
    

    Esto creará un directorio .blogtato en tu directorio home con un archivo config.yaml y un directorio feeds.

  2. Configurar feeds: Edita el archivo config.yaml para agregar tus feeds. Por ejemplo:

    feeds:
      - url: https://example.com/rss.xml
        name: Example Feed
      - url: https://another-example.com/atom.xml
        name: Another Example Feed
    
  3. Inicializar el repositorio Git:

    cd ~/.blogtato
    git init
    git add .
    git commit -m "Initial commit"
    git remote add origin <your-git-repo-url>
    git push -u origin main
    

Uso Básico

Leer Feeds

Para leer los feeds configurados, simplemente ejecuta:

blogtato read

Esto mostrará una lista de los artículos más recientes de todos los feeds configurados. Puedes navegar por los artículos y marcarlos como leídos.

Marcar Artículos como Leídos

Para marcar un artículo como leído, usa el comando mark seguido del ID del artículo:

blogtato mark <article_id>

Sincronización con Git

La sincronización con Git es automática cada vez que realizas cambios en los feeds o marcas artículos como leídos. Sin embargo, puedes forzar la sincronización manualmente con:

blogtato sync

Características Avanzadas

Personalización de la Interfaz

blogtato permite personalizar la interfaz de línea de comandos. Puedes modificar el archivo config.yaml para cambiar el formato de salida, el número de artículos mostrados, y otros ajustes.

Por ejemplo, para cambiar el formato de salida de los artículos:

output_format: "{title} - {author} ({published})"

Integración con Otros Servicios

blogtato puede integrarse con otros servicios mediante la extensión de su funcionalidad. Por ejemplo, puedes escribir scripts personalizados para enviar notificaciones a Slack cuando se publique un nuevo artículo en un feed específico.

Ejemplo de Script de Notificación

import requests
from blogtato import FeedManager

def send_slack_notification(article):
    url = "https://slack.com/api/chat.postMessage"
    headers = {
        "Authorization": f"Bearer {SLACK_BOT_TOKEN}",
        "Content-Type": "application/json"
    }
    data = {
        "channel": "#news",
        "text": f"New article: {article.title} - {article.author} ({article.published})"
    }
    response = requests.post(url, headers=headers, json=data)
    if response.status_code != 200:
        raise ValueError(f"Request to Slack returned an error {response.status_code}, the response is:\n{response.text}")

if __name__ == "__main__":
    manager = FeedManager()
    new_articles = manager.get_new_articles()
    for article in new_articles:
        send_slack_notification(article)

Desarrollo y Contribución

blogtato es un proyecto de código abierto y acepta contribuciones de la comunidad. Si deseas contribuir, sigue estos pasos:

  1. Clona el repositorio:

    git clone https://github.com/kantord/blogtato.git
    cd blogtato
    
  2. Crea una rama para tu función o corrección:

    git checkout -b feature/your-feature
    
  3. Realiza tus cambios y prueba:

    pytest
    
  4. Envía un pull request:

    git add .
    git commit -m "Add your feature"
    git push origin feature/your-feature
    

Conclusión

blogtato es una herramienta poderosa y flexible para la gestión de feeds RSS y Atom. Su integración con Git facilita la sincronización entre múltiples dispositivos, y su diseño inspirado en Taskwarrior ofrece una experiencia de usuario familiar y eficiente. Ya sea para mantenerse al día con las últimas noticias o para gestionar feeds específicos de tu industria, blogtato es una opción sólida y altamente recomendable.

Si necesitas asistencia técnica o consultoría para implementar soluciones similares en tu organización, no dudes en visitar https://www.mgatc.com para servicios de consultoría especializados.

Escrito por Mariano Gobea Alcoba