Script d’alerte RSS
Je vous partage un petit script python qui permet de vous alerter par mail quand il détecte un mot clé dans un flux RSS.
Vous aurez besoin de python3 ainsi que de la librairie feedparser.
Toutes les variables à changer sont dans l’entête du fichier.
De base le script va aller chercher le flux rss et pour chaque entrée datant de moins de 2 heures, va chercher si un des mots de la liste keywords est présent dans le titre, si c’est le cas il l’ajoute au corps du mail qui sera envoyé.
Il y a un mode –debug qui permet d’avoir un résultat sur la console pour s’assurer que le script fonctionne.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
rss-alert.py: search rss for keywords and alert via email
"""
from feedparser import parse
from re import search
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import datetime
import urllib.request, urllib.error, urllib.parse
import logging
import argparse
# Variable
fromaddr = "XXX@gmail.com"
toaddr = "XXX@gmail.com"
server_smtp = "smtp.gmail.com"
server_smtp_password = "XXX"
lstfound="Liste : "
now = datetime.datetime.now()
fluxrss = "URL"
keywords = ["WORD1","WORD2","WORD3","ETC"]
countfound=0
# Get argument --debug
parser = argparse.ArgumentParser()
parser.add_argument("--debug", help="increase output verbosity", action="store_true")
args = parser.parse_args()
# Create logger object for redirect output to console
logger = logging.getLogger()
logger.setLevel(logging.DEBUG if args.debug else logging.INFO)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
logger.addHandler(stream_handler)
# Example : logger.debug('Hello') logger.debug('Testing %s', 'foo')
# Accept cookie and user-agent mozilla
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor())
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
response = opener.open(fluxrss)
def mail_me(mail_body):
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Object of mail"
msg.attach(MIMEText(lstfound, 'plain'))
server = smtplib.SMTP(server_smtp, 587)
server.starttls()
server.login(fromaddr, server_smtp_password)
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
d = parse(response)
for entry in d.entries:
date = entry.published_parsed
#logger.debug(entry.title)
if date.tm_year == now.year and date.tm_mon == now.month and date.tm_mday == now.day and date.tm_hour > now.hour-3:
for word in keywords:
if search(r'\b'+word.lower()+r'\b', entry.title.lower()):
logger.debug(entry.published_parsed)
logger.debug(entry.title)
lstfound = lstfound + "\n" + entry.title + " : " + entry.link
countfound+=1
logger.debug(countfound)
if countfound > 0:
mail_me(lstfound)
Sinon, tu peux aussi regarder du côté de RSS-Fusion, par Erase : https://rss-fusion.green-effect.fr
Les sources sont dispos ici : https://framagit.org/Erase/RSS-Fusion-Demo
L’outil ne mail pas, mais te crées à la volée un flux RSS à partir d’un ou plusieurs flux en entrée, et les filtres suivants conditions, très utile.