From: Vincent Le Gallic Date: Wed, 10 Apr 2013 04:06:12 +0000 (+0200) Subject: last_noob, last_warpzone X-Git-Url: http://gitweb.pimeys.fr/?p=today.git;a=commitdiff_plain;h=d4d18717b7d9b71374fe7bc8815bcaf04abd1df8 last_noob, last_warpzone --- diff --git a/today_server.py b/today_server.py index 1be4d3f..3c79393 100755 --- a/today_server.py +++ b/today_server.py @@ -10,8 +10,6 @@ et répondre à un check. """ -import time, datetime -import locale import re import BeautifulSoup from lxml import etree @@ -30,32 +28,6 @@ store_published_file = "lasts_published" #: Fichier où est stockée une copie de la liste des derniers IDs *lus* store_seen_file = "lasts_sync" -def get_now(): - """Obtenir la date actuelle sous le bon format""" - timestamp = time.time() - 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() @@ -86,39 +58,40 @@ def last_visiteur(): nepisodes = len(episodes) return nsaisons * 100 + nepisodes +def get_season_episode(title): + """Récupère les numéros de la saison et de l'épisode. Crash si ne trouve pas.""" + ep = int(re.findall("ep([0-9]*)", title)[0]) + saison = int(re.findall("s([0-9]*)", title)[0]) + return saison, ep + 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 + global last_nw + # GRUIK + if "last_nw" in globals().keys(): + return last_nw + titles = parse_youtube("Funglisoft") + noobs = [t.lower().strip() for t in titles if t.lower().strip().startswith("noob")] + warpzones = [t.lower().strip() for t in titles if t.lower().strip().startswith("warpzone project")] + lasts = [] + for serie in [noobs, warpzones]: + # Les titres sont dans l'ordre antichronologique, on s'arrête donc au premier qu'on comprend + for titre in serie: + try: + saison, ep = get_season_episode(titre) + except ValueError: + pass + lasts.append([saison, ep]) + del saison, ep + break + last_noob = lasts[0][0]*100 + lasts[0][1] + last_warp = lasts[1][0]*100 + lasts[1][1] + last_nw = [last_noob, last_warp] + return last_nw + +def last_noob(): + return last_noob_warpzone()[0] +def last_warpzone(): + return last_noob_warpzone()[1] def parse_youtube(username): """Récupère les vidéos d'une chaîne Youtube""" @@ -162,6 +135,8 @@ FETCHS = { "dtc" : last_dtc, "xantah" : last_xantah, "visiteur" : last_visiteur, + "noob" : last_noob, + "warpzone" : last_warpzone, } def fetch_all():