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 ;)