From: Vincent Le Gallic Date: Mon, 8 Apr 2013 01:24:31 +0000 (+0200) Subject: abstraction des différents FETCHS dans un dico X-Git-Url: http://gitweb.pimeys.fr/?p=today.git;a=commitdiff_plain;h=e752abb6ffde566d0527ad46043fd6c9460d739a abstraction des différents FETCHS dans un dico --- diff --git a/today-server.py b/today-server.py deleted file mode 100755 index 4938500..0000000 --- a/today-server.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/python -# -*- encoding: utf-8 -*- - -""" Codé par 20-100 -script qui affiche des trucs à penser, des J-n des conneries -or that kind of stuff. - -Partie serveur, prévue pour chercher périodiquement les trucs non lus -et répondre à un check. - -""" - -import time, datetime -import re -import os -import sys -import urllib -import json -os.chdir('/home/vincent/scripts/today/') -sys.path.append("/home/vincent/scripts/dtc/") -import dtc - -#: Fichier où sont stockés les derniers IDs des trucs -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 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" - t = p.read() - current_id = int(re.findall("Permanent link to this comic: http://xkcd.com/(.*?)/", t)[0]) - return current_id - -def get_file(): - """Récupère la liste des derniers ids de chaque truc, stockée dans le fichiers.""" - f = open(store_published_file) - news = json.load(f) - f.close() - return news - -def update_file(news): - """Met à jour la liste des derniers ids dans le fichier.""" - f = open(store_published_file, 'w') - json.dump(news, f) - f.close() - -def fetch_all(): - """Va chercher sur les différents sites les nouveaux trucs.""" - news = {} - news["xkcd"] = last_xkcd() - news["dtc"] = last_dtc() - return news - -def sync(): - """Reçoit une requête de synchronisation.""" - # On récupère où en est le client sur stdin - t = sys.stdin.read() - on_client = json.loads(t) - # On récupère où en est le serveur dans le fichier idoine - if os.path.isfile(store_seen_file): - on_server = json.load(open(store_seen_file)) - else: - on_server = {} - # On garde le maximum - for k in set(on_client.keys() + on_server.keys()): - on_server[k] = max(on_client.get(k, 0), on_server.get(k, 0)) - # On enregistre ce nouveau dico - json.dump(on_server, open(store_seen_file, "w")) - # On envoie au client ce nouveau dico - print json.dumps(on_server) - -if __name__ == "__main__": - if sys.argv[1] == "check": - news = fetch_all() - update_file(news) - elif sys.argv[1] == "whatsup": - news = get_file() - print json.dumps(news) - elif sys.argv[1] == "sync": - sync() diff --git a/today_server.py b/today_server.py new file mode 100755 index 0000000..209dd04 --- /dev/null +++ b/today_server.py @@ -0,0 +1,98 @@ +#!/usr/bin/python +# -*- encoding: utf-8 -*- + +""" Codé par 20-100 +script qui affiche des trucs à penser, des J-n des conneries +or that kind of stuff. + +Partie serveur, prévue pour chercher périodiquement les trucs non lus +et répondre à un check. + +""" + +import time, datetime +import re +import os +import sys +import urllib +import json +os.chdir('/home/vincent/scripts/today/') +sys.path.append("/home/vincent/scripts/dtc/") +import dtc + +#: Fichier où sont stockés les derniers IDs des trucs +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 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" + t = p.read() + current_id = int(re.findall("Permanent link to this comic: http://xkcd.com/(.*?)/", t)[0]) + return current_id + +def get_file(): + """Récupère la liste des derniers ids de chaque truc, stockée dans le fichiers.""" + f = open(store_published_file) + news = json.load(f) + f.close() + return news + +def update_file(news): + """Met à jour la liste des derniers ids dans le fichier.""" + f = open(store_published_file, 'w') + json.dump(news, f) + f.close() + +FETCHS = { + "xkcd" : last_xkcd, + "dtc" : last_dtc, + } +def fetch_all(): + """Va chercher sur les différents sites les nouveaux trucs.""" + news = {} + for (k, f) in FETCHS.iteritems(): + news[k] = f() + return news + +def sync(): + """Reçoit une requête de synchronisation.""" + # On récupère où en est le client sur stdin + t = sys.stdin.read() + on_client = json.loads(t) + # On récupère où en est le serveur dans le fichier idoine + if os.path.isfile(store_seen_file): + on_server = json.load(open(store_seen_file)) + else: + on_server = {} + # On garde le maximum + for k in set(on_client.keys() + on_server.keys()): + on_server[k] = max(on_client.get(k, 0), on_server.get(k, 0)) + # On enregistre ce nouveau dico + json.dump(on_server, open(store_seen_file, "w")) + # On envoie au client ce nouveau dico + print json.dumps(on_server) + +if __name__ == "__main__": + if sys.argv[1] == "check": + news = fetch_all() + update_file(news) + elif sys.argv[1] == "whatsup": + news = get_file() + print json.dumps(news) + elif sys.argv[1] == "sync": + sync()