Créer une insensibilité à la casse
Bonjour,
Je travaille sur un programme de veille technologique. Donc le but de celui ci est de lire les flux RSS et de renvoyer uniquement les informations qui contiennent un des mots clés recherché. Mots clés qui sont recherchés dans le titre et la description du fichier XML. Et viens mon problème : je suis capable de repérer les mots clés mais mon programme est sensible à la casse ce qui posera quelques soucis, des informations pouvant passer à la trappe.
J'ai déjà essayé de contourner le problème en utilisant une regex en l'occurrence IGNORECASE. Mais cela n'a pas très bien marché et a occasionné d'autres erreurs y compris d'encodage. En fait surtout d'encodage. Je précise au passage que je tourne sous python 2.7 et que lire les XML j'utilise le module Universal Feedparser (qui fait ça très bien).
Voilà la partie du code concernée :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
if (rss):
xmldoc = feedparser.parse(rss)
if (xmldoc) :
"""On ouvre le fichier Newsletter.txt qui va récolter le flux. Ce fichier sera ensuite lu par les fonction d'envoi par mail et d'envoir sur le serveur"""
newsletter = open("Newsletter.txt", "w")
"""On cherche premièrement à savoir de quelle source vient le RSS"""
source_title = xmldoc.feed.title
print source_title #Dev
newsletter.write (source_title.encode("utf_8") + "\n" + "\n")
"""Universal Feedparser crée une liste dans qui répertorie chaque article, cette liste est la liste entries[n] qui comprends n+1 entrées (les liste sont numérotées à partir de 0). Python ne peut aller au delà de cette taille n-1. Il faut donc d'abord cherche la taille de la liste avec la fonction len"""
range = 0 #on initialise la variable range qui va servir pour pointer les articles
rangemax = len(xmldoc.entries)
print ("nombre d'article :"), rangemax, ("\n") #dev
"""On initialise une boucle while qui va parcourir la liste pour rechercher titres, description, lien, etc ...."""
while range < rangemax:
post_title = xmldoc.entries[range].title
post_description = xmldoc.entries[range].description
post_link = xmldoc.entries[range].link
keyword = u"Google"
if keyword in post_title:
print post_title.encode("utf_8") #Dev
print post_link, ("\n") #Dev
print ("range:"), range, ("\n") #Dev
newsletter.write (post_title.encode("utf_8") + "\n" + post_link.encode("utf_8") + "\n" + "\n")
elif keyword in post_description:
print post_title.encode("utf_8") #Dev
print post_link, ("\n") #Dev
print ("range:"), range, ("\n") #Dev
newsletter.write (post_title.encode("utf_8") + "\n" + post_link.encode("utf_8") + "\n" + "\n")
range = range+1 #On incrémente le pointeur range qui nous sert aussi de compteur
newsletter.close() |
Je précise que je n'ai pas encore implémenté le multi-source et le multi-keyword. C'est pour ça que c'est encore un peu simple.
Merci beaucoup et bonne journée !