rss2irc.py

Après un essai infructueux de rss2irc.pl et divers robot irc, j'ai décidé de me coder rapide un annonceur de flux RSS sur un salon IRC en python.
Mise à jour : Les nouvelles versions sont ici => http://www.gnunux.info/rss2irc/ Les difficultés du script :
  • il a fallut faire un thread, en effet il faut veillé au PING irc et à la modification du fichier RSS
  • il faut gérer un nombre maximum d'annonce
  • il faut reconnaitre la dernière annonce faite
Les caractéristiques de ce script :
  • le script annonce au maximum les cinq dernières nouvelles
  • il est nécessaire de créer le répertoire cache et le fichier last (vide)
  • il n'y a pas encore suffisement de code d'erreur
  • pour le quitter, il faut le killer
  • il lit un fichier RSS et non une URL, mais la modification pour ajouté la fonctionnalité est mineur
Bon, je met le script sous licence GPL v2 ou supérieur. A vrai dire, vu ce qu'il fait en ce moment, c'est un peu ridicule.
#!/usr/bin/env python

HOST="irc.freenode.net"
NICK="Bourguinux"
CHAN="#bourguinux"
FICHIER="/home/httpd/html/planet/rss20.xml"
TIME=3600

import sys, socket, string, threading, time, re
irc=socket.socket( )

class myThread(threading.Thread):
  def __init__(self, name=None):
        threading.Thread.__init__(self, target=self.run, name=name, args=() )
        self.start()

  def run(self):
     while 1:
       time.sleep(TIME)
       titles = re.findall('<title>(.*?)</title>',open(FICHIER, 'rb').read())
       last = open("cache/last", 'rb').read()
       for i in [1,2,3,4,5]:
           if(titles[i]==last): break
           irc.send('PRIVMSG %s :Nouveau sur http://gnunux.info/planet : %s\
                    \r\n' % (CHAN, titles[i]))
           open("cache/last", 'wb').write(titles[1])

if __name__=="__main__":
    readbuffer=""
    irc.connect((HOST, 6667))
    irc.send("NICK %s\r\n" % NICK)
    irc.send("USER %s %s bla :%s\r\n" % (NICK, HOST, NICK))
    irc.send("JOIN %s\r\n" % CHAN)
    t2 = myThread("Thread")

    while 1:
        readbuffer=readbuffer+irc.recv(1024)
        temp=string.split(readbuffer, "\n")
        readbuffer=temp.pop( )

        for line in temp:
            line=string.rstrip(line)
            line=string.split(line)
            if(line[0]=="PING"): irc.send("PONG %s\r\n" % line[1])
En espérant que cela serve à quelqu'un un jour ;)

Haut de page