From 4f0744ab2418b116d6e0a3e25eb558774a8bedb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=C3=A9munaire?= Date: Wed, 11 Apr 2012 17:33:57 +0200 Subject: [PATCH] Some code refactoring (use of class instead of tuples) --- atom.py | 17 +++- birthday.py | 5 +- events.py | 5 +- message.py | 7 +- nemubot.py | 3 +- qd.py | 223 ++++++++++++++++++++++++++--------------- server.py | 12 +-- watchWebsite.py | 261 +++++++++++++++++++++++++++++------------------- 8 files changed, 333 insertions(+), 200 deletions(-) diff --git a/atom.py b/atom.py index 66acebd..a06f54a 100755 --- a/atom.py +++ b/atom.py @@ -18,8 +18,18 @@ class AtomEntry: except: print (node.getElementsByTagName("updated")[0].firstChild.nodeValue[:10]) self.updated = time.localtime () - self.summary = node.getElementsByTagName("summary")[0].firstChild.nodeValue - self.link = node.getElementsByTagName("link")[0].getAttribute ("href") + if len(node.getElementsByTagName("summary")) > 0: + self.summary = node.getElementsByTagName("summary")[0].firstChild.nodeValue + else: + self.summary = None + if len(node.getElementsByTagName("link")) > 0: + self.link = node.getElementsByTagName("link")[0].getAttribute ("href") + else: + self.link = None + if len (node.getElementsByTagName("category")) > 1: + self.category = node.getElementsByTagName("category")[0].getAttribute ("term") + else: + self.category = None if len (node.getElementsByTagName("link")) > 1: self.link2 = node.getElementsByTagName("link")[1].getAttribute ("href") else: @@ -42,6 +52,8 @@ class Atom: def diff (self, other): differ = list () for k in other.entries.keys (): + if self.updated is None and k not in self.entries: + self.updated = entry.updated if k not in self.entries and other.entries[k].updated >= self.updated: differ.append (other.entries[k]) return differ @@ -62,3 +74,4 @@ if __name__ == "__main__": print (b.updated) diff = a.diff (b) + print (diff) diff --git a/birthday.py b/birthday.py index 926c896..6f8fdf4 100644 --- a/birthday.py +++ b/birthday.py @@ -1,6 +1,7 @@ # coding=utf-8 import re +import sys from datetime import datetime from datetime import date from xml.dom.minidom import parse @@ -44,7 +45,7 @@ def load_module(datas_path): BIRTHDAYS = {} filename = datas_path + "/birthdays.xml" - print ("Loading birthdays ...",) + sys.stdout.write ("Loading birthdays ... ") dom = parse(filename) xmlparse (dom.getElementsByTagName('birthdays')[0]) print ("done (%d loaded)" % len(BIRTHDAYS)) @@ -53,7 +54,7 @@ def load_module(datas_path): def save_module(): """Save the dates""" global filename - print ("Saving birthdays ...",) + sys.stdout.write ("Saving birthdays ... ") impl = getDOMImplementation() newdoc = impl.createDocument(None, 'birthdays', None) diff --git a/events.py b/events.py index 850ea7e..3d9aa91 100644 --- a/events.py +++ b/events.py @@ -1,6 +1,7 @@ # coding=utf-8 import re +import sys from datetime import timedelta from datetime import datetime from datetime import date @@ -51,7 +52,7 @@ def load_module(datas_path): EVENTS = {} filename = datas_path + "/events.xml" - print ("Loading events ...",) + sys.stdout.write ("Loading events ... ") dom = parse(filename) xmlparse (dom.getElementsByTagName('events')[0]) print ("done (%d loaded)" % len(EVENTS)) @@ -60,7 +61,7 @@ def load_module(datas_path): def save_module(): """Save the dates""" global filename - print ("Saving events ...",) + sys.stdout.write ("Saving events ... ") impl = getDOMImplementation() newdoc = impl.createDocument(None, 'events', None) diff --git a/message.py b/message.py index b233f66..a0d7803 100755 --- a/message.py +++ b/message.py @@ -154,15 +154,12 @@ class Message: def parsemsg (self, mods): - if re.match(".*(norme|coding style).*", self.content) is not None and re.match(".*(please|give|obtenir|now|plz|stp|svp|s'il (te|vous) pla.t|check).*", self.content) is not None: - norme.launch (self.srv.s, self.sender, self.content) - #Treat all messages starting with 'nemubot:' as distinct commands - elif self.content.find("%s:"%self.srv.nick) == 0: + if self.content.find("%s:"%self.srv.nick) == 0: messagel = self.content.lower() #Is it a simple response? - if re.match(".*(m[' ]?entends?[ -]+tu|h?ear me|do you copy|ping).*", messagel) is not None: + if re.match(".*(m[' ]?entends?[ -]+tu|h?ear me|do you copy|ping)", messagel) is not None: self.send_chn ("%s: pong"%(self.sender)) elif re.match(".*di[st] (a|à) ([a-zA-Z0-9_]+) (.+)$", messagel) is not None: diff --git a/nemubot.py b/nemubot.py index 883c28c..f9b1d71 100755 --- a/nemubot.py +++ b/nemubot.py @@ -10,7 +10,7 @@ from datetime import datetime from datetime import timedelta from xml.dom.minidom import parse -imports = ["birthday", "qd", "events", "youtube"] +imports = ["birthday", "qd", "events", "youtube", "watchWebsite"] imports_launch = ["watchWebsite"] mods = list () import server @@ -51,7 +51,6 @@ for serveur in config.getElementsByTagName('server'): for imp in imports_launch: mod = __import__ (imp) - mod.load_module (basedir + "/datas/") mod.launch (servers) print ("Nemubot ready, my PID is %i!" % (os.getpid())) diff --git a/qd.py b/qd.py index fd93ded..0b4afd4 100644 --- a/qd.py +++ b/qd.py @@ -2,6 +2,7 @@ import re import time +import sys from datetime import timedelta from datetime import datetime from datetime import date @@ -15,18 +16,105 @@ MANCHE = None SCORES = dict () temps = dict () +class Score: + def __init__(self): + #FourtyTwo + self.ftt = 0 + #TwentyThree + self.twt = 0 + self.pi = 0 + self.notfound = 0 + self.tententen = 0 + self.leet = 0 + self.great = 0 + self.bad = 0 + self.last = None + self.changed = False + + def parse(self, item): + self.ftt = int(item.getAttribute("fourtytwo")) + self.twt = int(item.getAttribute("twentythree")) + self.pi = int(item.getAttribute("pi")) + self.notfound = int(item.getAttribute("notfound")) + self.tententen = int(item.getAttribute("tententen")) + self.leet = int(item.getAttribute("leet")) + self.great = int(item.getAttribute("great")) + self.bad = int(item.getAttribute("bad")) + + def newWinner(self): + self.ftt = 0 + self.twt = 0 + self.pi = 1 + self.notfound = 1 + self.tententen = 0 + self.leet = 1 + self.great = -1 + self.bad = -4 + + def isWinner(self): + return self.great >= 42 + + def playFtt(self): + if self.canPlay(): + self.ftt += 1 + self.last = datetime.now() + def playTwt(self): + if self.canPlay(): + self.twt += 1 + self.last = datetime.now() + def playPi(self): + if self.canPlay(): + self.pi += 1 + self.last = datetime.now() + def playNoutfound(self): + if self.canPlay(): + self.notfound += 1 + self.last = datetime.now() + def playTen(self): + if self.canPlay(): + self.tententen += 1 + self.last = datetime.now() + def playLeet(self): + if self.canPlay(): + self.leet += 1 + self.last = datetime.now() + def playGreat(self): + if self.canPlay(): + self.great += 1 + self.last = datetime.now() + def playBad(self): + if self.canPlay(): + self.bad += 1 + self.last = datetime.now() + + def toTuple(self): + return (self.ftt, self.twt, self.pi, self.notfound, self.tententen, self.leet, self.great, self.bad) + + def canPlay(self): + self.changed = True + return self.last == None or self.last.minute != datetime.now().minute or self.last.hour != datetime.now().hour or self.last.day != datetime.now().day + + def hasChanged(self): + if self.changed: + self.changed = False + return True + else: + return False + + def score(self): + return (self.ftt * 2 - self.bad * 10 + self.great * 5 + self.leet * 3 + self.pi * 3.1415 + self.twt + self.notfound * 4.04) + + def details(self): + return "42: %d, 23: %d, bad: %d, great: %d, leet: %d, pi: %d, 404: %d, 10: %d = %d."%(self.ftt, self.twt, self.bad, self.great, self.leet, self.pi, self.notfound, self.tententen, self.score()) + + def xmlparse(node): """Parse the given node and add scores to the global list.""" global SCORES, MANCHE for item in node.getElementsByTagName("score"): - SCORES[item.getAttribute("name")] = (int(item.getAttribute("fourtytwo")), - int(item.getAttribute("twentythree")), - int(item.getAttribute("pi")), - int(item.getAttribute("notfound")), - int(item.getAttribute("tententen")), - int(item.getAttribute("leet")), - int(item.getAttribute("great")), - int(item.getAttribute("bad"))) + SCORES[item.getAttribute("name")] = Score () + SCORES[item.getAttribute("name")].parse(item) + manche = node.getElementsByTagName("manche")[0] MANCHE = (int(manche.getAttribute("number")), manche.getAttribute("winner"), @@ -42,22 +130,22 @@ def load_module(datas_path): SCORES = dict () filename = datas_path + "/42.xml" - print ("Loading 42scores ...",) + sys.stdout.write ("Loading 42scores ... ") dom = parse(filename) xmlparse (dom.documentElement) print ("done (%d loaded, currently in round %d)" % (len(SCORES), -42)) def save_module(): - """Save the dates""" + """Save the scores""" global filename - print ("Saving birthdays ...",) + sys.stdout.write ("Saving 42scores ... ") impl = getDOMImplementation() newdoc = impl.createDocument(None, 'game', None) top = newdoc.documentElement for name in SCORES.keys(): - scr = 'fourtytwo="%d" twentythree="%d" pi="%d" notfound="%d" tententen="%d" leet="%d" great="%d" bad="%d"'% SCORES[name] + scr = 'fourtytwo="%d" twentythree="%d" pi="%d" notfound="%d" tententen="%d" leet="%d" great="%d" bad="%d"'% SCORES[name].toTuple() item = parseString ('' % (name, scr)).documentElement top.appendChild(item); @@ -78,7 +166,7 @@ def help_full (): def rev (tupl): (k, v) = tupl - return (v, k) + return (v.score(), k) def parseanswer (msg): if msg.cmd[0] == "42" or msg.cmd[0] == "score" or msg.cmd[0] == "scores": @@ -93,22 +181,15 @@ def parseanswer (msg): if len(msg.cmd) > 1: if msg.cmd[1].lower() in SCORES: - (normal, bad, great, leet, pi, dt, nf) = user(msg.cmd[1]) - phrase += " %s: 42: %d, 23: %d, bad: %d, great: %d, leet: %d, pi: %d, 404: %d = %d."%(msg.cmd[1], normal, dt, bad, great, leet, pi, nf, normal * 2 - bad * 10 + great * 5 + leet * 3 + pi * 3.1415 + dt + nf * 4.04) + phrase += " " + msg.cmd[1] + ": " + SCORES[msg.cmd[1].lower()].details() else: phrase = " %s n'a encore jamais joué,"%(msg.cmd[1]) else: - joueurs = dict() -# for player in players: - for player in SCORES.keys(): - if player in SCORES: - joueurs[player] = score(player) - - for nom, scr in sorted(joueurs.items(), key=rev, reverse=True): + for nom, scr in sorted(SCORES.items(), key=rev, reverse=True): if phrase == "": - phrase = " *%s: %d*,"%(nom, scr) + phrase = " *%s: %d*,"%(nom, scr.score()) else: - phrase += " %s: %d,"%(nom, scr) + phrase += " %s: %d,"%(nom, scr.score()) msg.send_chn ("Scores :%s" % (phrase[0:len(phrase)-1])) return True @@ -116,12 +197,6 @@ def parseanswer (msg): return False -def score(who): - (qd, dt, pi, nf, ttt, leet, great, bad) = user(who) -# return (normal * 2 + leet * 3 + pi * 3.1415 + dt + nf * 4.04) * (10000 * great / (1 + bad * 2.5)) - return (qd * 2 - bad * 10 + great * 5 + leet * 3 + pi * 3.1415 + dt + nf * 4.04) - - def win(s, who): global SCORES, MANCHE who = who.lower() @@ -141,7 +216,7 @@ def win(s, who): SCORES = dict() # SCORES[maxi_name] = (-10, 0, -4, 0, 0, -2, 0) # SCORES[maxi_name] = (0, 0, 0, 0, 0, 0, 0) - SCORES[who] = (0, 0, 1, 1, 0, 1, -1, -4) + SCORES[who].newWinner if who != maxi_name: msg.send_global ("Félicitations %s, tu remportes cette manche terminée par %s, avec un score de %d !"%(maxi_name, who, maxi_scor)) @@ -154,95 +229,81 @@ def win(s, who): save_module () -def user(who): - who = who.lower() - if who in SCORES: - return SCORES[who] - else: - return (0, 0, 0, 0, 0, 0, 0, 0) - - -def canPlay(who): - who = who.lower() - if not who in temps or (temps[who].minute != datetime.now().minute or temps[who].hour != datetime.now().hour or temps[who].day != datetime.now().day): - temps[who] = datetime.now() - return True - else: - return False - - def parseask (msg): return False + +def getUser(name): + global SCORES + if name not in SCORES: + SCORES[name] = Score() + return SCORES[name] + + def parselisten (msg): # if msg.channel == "#nemutest": if msg.channel != "#nemutest": - (qd, dt, pi, nf, ttt, leet, great, bad) = user(msg.sender) - sum = qd + dt + pi + nf + ttt + leet + great + bad - if (msg.content.strip().startswith("42") and len (msg.content) < 5) or ((msg.content.strip().lower().startswith("quarante-deux") or msg.content.strip().lower().startswith("quarante deux")) and len (msg.content) < 17): if datetime.now().minute == 10 and datetime.now().second == 10 and datetime.now().hour == 10: - ttt += 1 - great += 1 + getUser(msg.sender).playTen() + getUser(msg.sender).playGreat() elif datetime.now().minute == 42: if datetime.now().second == 0: - great += 1 - qd += 1 + getUser(msg.sender).playGreat() + getUser(msg.sender).playFtt() else: - bad += 1 + getUser(msg.sender).playBad() if (msg.content.strip().startswith("23") and len (msg.content) < 5) or ((msg.content.strip().lower().startswith("vingt-trois") or msg.content.strip().lower().startswith("vingt trois")) and len (msg.content) < 14): if datetime.now().minute == 23: if datetime.now().second == 0: - great += 1 - dt += 1 + getUser(msg.sender).playGreat() + getUser(msg.sender).playTwt() else: - bad += 1 + getUser(msg.sender).playBad() if (msg.content.strip().startswith("101010") and len (msg.content) < 9): if datetime.now().minute == 10 and datetime.now().hour == 10: if datetime.now().second == 10: - great += 1 - ttt += 1 + getUser(msg.sender).playGreat() + getUser(msg.sender).playTen() else: - bad += 1 + getUser(msg.sender).playBad() if (msg.content.strip().startswith("12345") and len (msg.content) < 8) or (msg.content.strip().startswith("012345") and len (msg.content) < 9): if datetime.now().hour == 1 and datetime.now().minute == 23 and datetime.now().second == 45: - great += 1 - dt += 1 + getUser(msg.sender).playGreat() + getUser(msg.sender).playTwt() else: - bad += 1 + getUser(msg.sender).playBad() if len (msg.content) < 12 and (msg.content.strip().lower().startswith("leet time") or msg.content.strip().lower().startswith("leettime") or msg.content.strip().lower().startswith("l33t time") or msg.content.strip().lower().startswith("1337")): if datetime.now().hour == 13 and datetime.now().minute == 37: if datetime.now().second == 0: - great += 1 - leet += 1 + getUser(msg.sender).playGreat() + getUser(msg.sender).playLeet() else: - bad += 1 + getUser(msg.sender).playBad() if len (msg.content) < 11 and (msg.content.strip().lower().startswith("pi time") or msg.content.strip().lower().startswith("pitime") or msg.content.strip().lower().startswith("3.14 time")): if datetime.now().hour == 3 and datetime.now().minute == 14: if datetime.now().second == 15 or datetime.now().second == 16: - great += 1 - pi += 1 + getUser(msg.sender).playGreat() + getUser(msg.sender).playPi() else: - bad += 1 + getUser(msg.sender).playBad() if len (msg.content) < 16 and (msg.content.strip().lower().startswith("time not found") or msg.content.strip().lower().startswith("timenotfound") or msg.content.strip().lower().startswith("404 time")) or (len (msg.content) < 6 and msg.content.strip().lower().startswith("404")): if datetime.now().hour == 4 and datetime.now().minute == 4: if datetime.now().second == 0 or datetime.now().second == 4: - great += 1 - nf += 1 + getUser(msg.sender).playGreat() + getUser(msg.sender).playNotfound() else: - bad += 1 + getUser(msg.sender).playBad() - if sum != qd + dt + pi + nf + ttt + leet + great + bad and (canPlay (msg.sender) or (datetime.now().second == 45 and datetime.now().minute == 23 and datetime.now().hour == 1)): - SCORES[msg.sender.lower()] = (qd, dt, pi, nf, ttt, leet, great, bad) - if great >= 42: - print ("Nous avons un vainqueur ! Nouvelle manche :p") - win(s, msg.sender) - else: - save_module () + if getUser(msg.sender).isWinner(): + print ("Nous avons un vainqueur ! Nouvelle manche :p") + win(s, msg.sender) + elif getUser(msg.sender).hasChanged(): + save_module () return False diff --git a/server.py b/server.py index 20c46e2..f77ee91 100755 --- a/server.py +++ b/server.py @@ -29,7 +29,7 @@ class Server: def send_msg (self, channel, msg, cmd = "PRIVMSG", endl = "\r\n"): for line in msg.split("\n"): - if line != "": + if line != "" and self.accepted_channel(channel): self.s.send (("%s %s :%s%s" % (cmd, channel, line, endl)).encode ()) def send_global (self, msg, cmd = "PRIVMSG", endl = "\r\n"): @@ -41,7 +41,7 @@ class Server: _thread.start_new_thread(self.connect, (mods,)) def accepted_channel(self, channel): - return (self.channels.find(channel) != -1) + return (self.channels.count(channel) != -1) def read(self, mods): self.readbuffer = "" #Here we store all the messages from server @@ -56,10 +56,10 @@ class Server: for line in temp: msg = message.Message (self, line) - try: - msg.treat (mods) - except: - print ("Une erreur est survenue lors du traitement du message : %s"%line) +# try: + msg.treat (mods) +# except: +# print ("Une erreur est survenue lors du traitement du message : %s"%line) def connect(self, mods): diff --git a/watchWebsite.py b/watchWebsite.py index da0e0b3..a07a5cc 100644 --- a/watchWebsite.py +++ b/watchWebsite.py @@ -2,6 +2,7 @@ import http.client import hashlib +import sys import time import _thread from urllib.parse import unquote @@ -16,15 +17,118 @@ filename = "" SITES = [] SRVS = None -def xmlparse(node): - """Parse the given node and add events to the global list.""" - for item in node.getElementsByTagName("watch"): - if item.getAttribute("type"): - type = item.getAttribute("type") - else: - type = "hash" +class Site: + def __init__(self, item): + self.server = item.getAttribute("server") + self.page = item.getAttribute("page") + if item.getAttribute("type"): + self.type = item.getAttribute("type") + else: + self.type = "hash" + self.message = item.getAttribute("message") + + self.thread = None + if item.getAttribute("time"): + self.updateTime = int(item.getAttribute("time")) + else: + self.updateTime = 60 + self.lastChange = 0 + self.lastpage = None + self.run = True + + self.channels = list() + for channel in item.getElementsByTagName('channel'): + self.channels.append(channel.getAttribute("name")) + + + def start (self): + self.thread = _thread.start_new_thread (startThread, (self,)) + + def send_message (self, msg): + global SRVS + if len(self.channels) > 0: + for server in SRVS: + for chan in self.channels: + server.send_msg (chan, msg) + else: + for server in SRVS: + server.send_global (msg) + + def treat_atom (self, content): + change=False + f = atom.Atom (content) + if self.lastpage is not None: + diff = self.lastpage.diff (f) + if len(diff) > 0: + print ("[%s] Page differ!"%self.server) + if f.id == "http://public.nbr23.com/rss.php": + for d in diff: + if d.category == None: + messageI = self.message % ("quel est ce nouveau fichier", "%s") + elif d.category == "Music": + messageI = self.message % ("quelles sont ces nouvelles musiques", "%s") + elif d.category == "TV_Shows": + messageI = self.message % ("quelle est cette nouvelle série", "%s") + elif d.category == "Movies": + messageI = self.message % ("quel est ce nouveau film", "%s") + elif d.category == "Books": + messageI = self.message % ("quel est ce nouveau livre", "%s") + else: + messageI = self.message % ("quel est ce nouveau fichier", "%s") + self.send_message (messageI % unquote (d.link)) + elif f.id == "http://musik.p0m.fr/atom.php?nemubot": + for d in diff: + youtube.send_global (d.link2, self.message % (d.title, unquote (d.link))) + elif self.message.find ("%s") >= 0: + print ("[%s] Send message!"%self.server) + for d in diff: + self.send_message (self.message % unquote (d.title)) + else: + self.send_message (self.message) + change=True + return (f, change) + + def check (self): + while self.run: + try: +# print ("Check %s/%s"%(self.server, self.page)) + content = getPage(self.server, self.page) + + if self.type == "atom": + (self.lastpage, change) = self.treat_atom (content) + if change: + if self.lastChange <= 0: + self.lastChange -= 1 + else: + self.lastChange = 0 + else: + self.lastChange += 1 + else: + hash = hashlib.sha224(content).hexdigest() + if hash != self.lastpage: + if self.lastpage is not None: + self.send_message () + self.lastpage = hash + if self.lastChange <= 0: + self.lastChange -= 1 + else: + self.lastChange = 0 + else: + self.lastChange += 1 + + #Update check time intervalle + #TODO + + if self.updateTime < 10: + self.updateTime = 10 + if self.updateTime > 400: + self.updateTime = 400 + + time.sleep(self.updateTime) + except: + print ("Une erreur est survenue lors de la récupération de la page " + self.server + "/" + self.page) + time.sleep(self.updateTime * 3) - SITES.append ((item.getAttribute("server"), item.getAttribute("page"), type, item.getAttribute("message"), None, 40)) def load_module(datas_path): @@ -33,9 +137,10 @@ def load_module(datas_path): SITES = [] filename = datas_path + "/watch.xml" - print ("Loading watchsites ...",) + sys.stdout.write ("Loading watchsites ... ") dom = parse(filename) - xmlparse (dom.documentElement) + for item in dom.documentElement.getElementsByTagName("watch"): + SITES.append (Site (item)) print ("done (%d loaded)" % len(SITES)) @@ -43,101 +148,57 @@ def launch (servers): global SRVS SRVS = servers for site in SITES: - _thread.start_new_thread (startThread, (site,)) + site.start () -def send_global (msg): - for server in SRVS: - server.send_global (msg) +def save_module(): + """Save the module state""" + global filename + sys.stdout.write ("Saving watched sites ... ") + impl = getDOMImplementation() + newdoc = impl.createDocument(None, 'service', None) + top = newdoc.documentElement + + for site in SITES: + item = parseString ('' % (site.server, site.page, site.message, site.type, site.updateTime)).documentElement + if len(site.channels) > 0: + for chan in site.channels: + item.appendChild(parseString ('' % (chan)).documentElement); + top.appendChild(item); + + with open(filename, "w") as f: + newdoc.writexml (f) + print ("done") + + +def help_tiny (): + """Line inserted in the response to the command !help""" + return None + +def help_full (): + return None + +def parseanswer (msg): + if msg.cmd[0] == "watch": + print ("print states here") + return True + return False + +def parseask (msg): + return False + +def parselisten (msg): + return False -def treat_atom (lastpage, content, message): - change=False - f = atom.Atom (content) - if lastpage is not None: - diff = lastpage.diff (f) - if len(diff) > 0: - if f.id == "http://public.nbr23.com/rss.php": - for d in diff: - if d.summary == "Music": - messageI = message % ("quelles sont ces nouvelles musiques", "%s") - elif d.summary == "TV_Shows": - messageI = message % ("quelle est cette nouvelle série", "%s") - elif d.summary == "Movies": - messageI = message % ("quel est ce nouveau film", "%s") - elif d.summary == "Books": - messageI = message % ("quel est ce nouveau livre", "%s") - else: - messageI = message % ("quel est ce nouveau fichier", "%s") - send_global (messageI % unquote (d.link)) - elif f.id == "http://musik.p0m.fr/atom.php?nemubot": - for d in diff: - youtube.send_global (d.link2, message % (d.title, unquote (d.link))) - elif message.find ("%s") >= 0: - for d in diff: - send_global (message % unquote (d.link)) - else: - send_global (message) - change=True - return (f,change) def getPage (s, p): - conn = http.client.HTTPConnection(s) - conn.request("GET", "/%s"%(p)) + conn = http.client.HTTPConnection(s) + conn.request("GET", "/%s"%(p)) - res = conn.getresponse() - data = res.read() + res = conn.getresponse() + data = res.read() - conn.close() - return data + conn.close() + return data def startThread(site): - (srv, page, type, message, lastpage, updateTime) = site - - lastChange = 0 - - while 1: - content = getPage(srv, page) - - if type == "atom": - (lastpage, change) = treat_atom (lastpage, content, message) - if change: - if lastChange <= 0: - lastChange -= 1 - else: - lastChange = 0 - else: - lastChange += 1 - else: - hash = hashlib.sha224(content).hexdigest() - if hash != lastpage: - if lastpage is not None: - send_global (message) - lastpage = hash - if lastChange <= 0: - lastChange -= 1 - else: - lastChange = 0 - else: - lastChange += 1 - - #Update check time intervalle - if lastChange >= 1 and updateTime < 60: - updateTime *= 2 - elif lastChange >= 10 and updateTime < 200: - updateTime *= 1.25 - elif lastChange >= 50 and updateTime < 500: - updateTime *= 1.1 - elif lastChange < 0 and updateTime < 60: - updateTime /= 2 - elif lastChange <= 0 and updateTime < 200: - updateTime /= 3 - elif lastChange <= 0 and updateTime > 350: - updateTime /= 7 - elif lastChange <= 0: - updateTime /= 4.5 - - if updateTime < 10: - updateTime = 10 - if updateTime > 500: - updateTime = 500 - - time.sleep(updateTime) + site.check ()