X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=today_server.py;h=98e484481a65bf5ae894bed1693ad3351dd19758;hb=18dc797478ece73aaf30c5322303d05006474d28;hp=209dd04b0e6bbc39f50c244ddf9feea62e1dcf91;hpb=e752abb6ffde566d0527ad46043fd6c9460d739a;p=today.git diff --git a/today_server.py b/today_server.py index 209dd04..98e4844 100755 --- a/today_server.py +++ b/today_server.py @@ -11,11 +11,14 @@ et répondre à un check. """ import time, datetime +import locale import re +import BeautifulSoup import os import sys import urllib import json +import traceback os.chdir('/home/vincent/scripts/today/') sys.path.append("/home/vincent/scripts/dtc/") import dtc @@ -32,19 +35,90 @@ def get_now(): now = datetime.datetime(*time.localtime(timestamp)[:7]) return now +def parse_date(s, french=True): + """Essaye d'obtenir une date à partir du string fourni""" + s = s.lower() + if isinstance(s, unicode): + s = s.encode("utf-8") + if s.startswith("le "): + s = s[3:] + # Y U PARKINSON ? + s = re.sub(" +", " ", s) + # Pour avoir les noms de dates en Français + if french: + locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8') + for format in ["%d %B %Y"]: + try: + struct = time.strptime(s, format) + return datetime.datetime(*struct[:7]) + except ValueError: + pass + raise ValueError("%r : Didn't manage to convert as date, sorry." % (s,)) + def last_dtc(): """Vérifie si il y a des quotes DTC non lues""" return dtc.last_inserted() def last_xkcd(): - try: - p = urllib.urlopen("http://xkcd.com") - except IOError: - return "Impossible de se connecter à xkcd" + p = urllib.urlopen("http://xkcd.com") t = p.read() current_id = int(re.findall("Permanent link to this comic: http://xkcd.com/(.*?)/", t)[0]) return current_id +def last_xantah(): + p = urllib.urlopen("http://www.adoprixtoxis.com/lite/download/xantah_downloads.php") + t = p.read() + ids = re.findall("""
Xantah (.*?)
""", t) + ids = [int(i) for i in ids] + return max(ids) + +def last_visiteur(): + p = urllib.urlopen("http://www.levisiteurdufutur.com/episodes.html") + t = p.read() + # On parse + soup = BeautifulSoup.BeautifulSoup(t) + # On récupère les différentes saisons + saisons = soup.findAll("div", attrs={"id" : "episodes_list"}) + nsaisons = len(saisons) + # La saison en cours est la première dans la liste + episodes = saisons[0].findAll("div", attrs={"class" : "thumbCaption"}) + nepisodes = len(episodes) + return nsaisons * 100 + nepisodes + +def last_noob_warpzone(): + p = urllib.urlopen("http://noob-tv.com/agenda01.html") + t = p.read() + # On parse + soup = BeautifulSoup.BeautifulSoup(t) + # On récupère tous les évènements + garbage = soup.findAll("strong") + events = [] + for o in garbage: + l = o.findAll("span", attrs={"class":"Style31"}) + if l: + events.append([o.text[:o.text.index(":")].strip(), l[0].string.lower().strip()]) # la date, l'event + # On garde que les "sorties" + events = [o for o in events if "sortie" in o[1]] + # Fucking HTML + events = [[o[0].replace(u"û", u"û").replace(u"é", u"é"), o[1]] for o in events] + # Parsing des dates + eventss = [] + for i in range(len(events)): + raw_date, event = events[i] + try: + eventss.append([parse_date(raw_date), event]) + except ValueError: + pass + events = eventss + del eventss + noobs = [ev for ev in events if "noob" in ev[1]] + warpzones = [ev for ev in events if "warpzone" in ev[1]] + # On prend en considération le dernier évènement qui a eu lieu + now = get_now() + ###### + ###### RHÂ, shit, y'a des fuckings trucs du genre "1er" dans les dates… :/ + return noobs, warpzones + def get_file(): """Récupère la liste des derniers ids de chaque truc, stockée dans le fichiers.""" f = open(store_published_file) @@ -61,12 +135,19 @@ def update_file(news): FETCHS = { "xkcd" : last_xkcd, "dtc" : last_dtc, + "xantah" : last_xantah, + "visiteur" : last_visiteur, } + def fetch_all(): """Va chercher sur les différents sites les nouveaux trucs.""" news = {} for (k, f) in FETCHS.iteritems(): - news[k] = f() + try: + news[k] = f() + except Exception as e: + print "Erreur à la récupération de %s :" % k + traceback.print_exc() return news def sync(): @@ -90,7 +171,9 @@ def sync(): if __name__ == "__main__": if sys.argv[1] == "check": news = fetch_all() - update_file(news) + olds = get_file() + olds.update(news) + update_file(olds) elif sys.argv[1] == "whatsup": news = get_file() print json.dumps(news)