Telegram Bot RSS: Python Script

2 minuto(s) de lectura

Debian

Esta entrada voy a compartir un sencillo Script de Python creado por Ljubiša Moćić que he readaptado para darle un nuevo formato.

Dicho script nos va a publicar las noticias de un feed RSS de forma automática en nuestro Telegram.

NOTA: El token de referencia del post no tiene validez, haz de usar tu propio bot u otro token conocido.

Para configurarlo sobre nuestra base Debian seguimos este mini-tutorial.

Crear Bot Telegram

  • Creamos conversación con @BotFather

NOTA: Usar solo Bot Oficial de Telegram

Telegram

  • Creamos nuevo bot con el comando /newbot, le asignamos un nombre y obtendremos un Token

Telegram

  • Anotamos Token obtenido para posterior uso

1579933052:AAH-SwCYA_u7Jx5OZiTBM8VPZN1kkkveCvk

Script Python Telegram

En primer lugar creamos las carpetas donde alojar el proyecto:

mkdir -p $HOME/scripts && \
cd $HOME/scripts

Actualizamos repositorios y satisfacemos dependencias de sistema:

sudo apt-get update && \
sudo apt-get -y install python3-pip && \
sudo pip3 install requests feedparser

Ahora vamos a crear el fichero script lanzando el siguiente comando:

cat << EOF > $HOME/scripts/botrss.py
#!/usr/bin/env python3
#! python3
# -*- coding: utf-8 -*-
#
# https://lordpedal.github.io
# Modificado por Lordpedal
#
# Idea original: https://github.com/ljmocic
# Gist original: https://gist.github.com/ljmocic/ec013451ff8bbb51f308d79975d7fdb4

# Librerias Python
from datetime import timedelta, datetime
from dateutil import parser
from pprint import pprint
from time import sleep
import time
import requests
import feedparser

# Variables Script
TOKEN_BOT = '1579933052:AAH-SwCYA_u7Jx5OZiTBM8VPZN1kkkveCvk' # Bot @Overspeed_Bot
CONTACTO_ID = '79593223' # ID Telegram: Consultar @Lordpedalbot
RSS_URL = 'https://lordpedal.github.io/lordpedal/feed.xml' # Lordpedal RSS

# Formato Mensaje
# - Habilitada escritura Markdown (parse_mode=Markdown)
#       - Alternativa HTML a Markdown (parse_mode=HTML)
#
# - Deshabilitada vista previa enlaces (disable_web_page_preview=true)
#       - Alternativa para habilitar vista previa (disable_web_page_preview=false)
#
def send_message(message):
    requests.get(f'https://api.telegram.org/bot{TOKEN_BOT}/sendMessage?chat_id={CONTACTO_ID}&parse_mode=Markdown&disable_web_page_preview=true&text={message}')

# Estructura Mensaje
def main():
    rss_feed = feedparser.parse(RSS_URL)

    for entry in rss_feed.entries:

        parsed_date = parser.parse(entry.published)
        parsed_date = (parsed_date - timedelta(hours=1)).replace(tzinfo=None)
        now_date = datetime.utcnow()

        published_30_minutes_ago = now_date - parsed_date <= timedelta(minutes=30)
        if published_30_minutes_ago:
            send_message('*Noticias Random*\n' + (time.strftime("_%d/%m/20%y_")) + '\n\n' + '*' + entry.title + '*' + '\n\n' + 'Enlace noticia: ' + entry.links[0].href)
            print(entry.links[0].href)

# Iniciar Script
if __name__ == "__main__":
    while(True):
        main()
        sleep(30 * 60)
#------------------------------------------------------------
# Another fine release by Lordpedal
#------------------------------------------------------------
EOF

Vamos a repasar los principales parámetros a modificar para adaptarlos a nuestro sistema y configuración especifica:

Parámetro Función
TOKEN_BOT = '1579933052:AAH-SwCYA_u7Jx5OZiTBM8VPZN1kkkveCvk' Sustituir por Token de bot generador Telegram
CONTACTO_ID = '79593223' Sustituir ID , Consultar @Lordpedalbot para obtener
RSS_URL = 'https://lordpedal.github.io/lordpedal/feed.xml' Sustituir lista Feed de Noticias

Una vez configurado, programamos el sistema para que el script sea ejecutado al arrancar el sistema, tras darle permisos de ejecución:

chmod +x ~/scripts/botrss.py && crontab -e

Y añadimos al final el fichero:

@reboot /usr/bin/python3 ~/scripts/botrss.py >/dev/null 2>&1

Guardamos, salimos del editor y reiniciamos el sistema para disfrutar la nueva configuración:

sudo reboot

Telegram

Y listo!