]> gitweb.pimeys.fr Git - today.git/blob - today_server.py
Modularisation++ : module comics pour xkcd et jl8 (young DC)
[today.git] / today_server.py
1 #!/usr/bin/python
2 # -*- encoding: utf-8 -*-
3
4 """ Codé par 20-100
5 script qui affiche des trucs à penser, des J-n des conneries
6 or that kind of stuff.
7
8 Partie serveur, prévue pour chercher périodiquement les trucs non lus
9 et répondre à un check.
10
11 """
12
13 import re
14 from lxml import etree
15 import os
16 import sys
17 import urllib
18 import json
19 os.chdir('/home/vincent/scripts/today/')
20
21 #: Config serveur
22 import serverconfig
23
24 #: Récupération de toutes les nouveautés
25 import gather
26
27 def last_xantah():
28 p = urllib.urlopen("http://www.adoprixtoxis.com/lite/download/xantah_downloads.php")
29 t = p.read()
30 ids = re.findall("""<div class="top">Xantah (.*?)</div>""", t)
31 ids = [int(i) for i in ids]
32 return max(ids)
33
34 def get_file():
35 """Récupère la liste des derniers ids de chaque truc, stockée dans le fichier."""
36 f = open(serverconfig.store_published_file)
37 news = json.load(f)
38 f.close()
39 return news
40
41 def update_file(news):
42 """Met à jour la liste des derniers ids dans le fichier."""
43 f = open(serverconfig.store_published_file, 'w')
44 json.dump(news, f)
45 f.close()
46
47 FETCHS = {
48 "xantah" : last_xantah,
49 }
50
51 def fetch_all():
52 """Va chercher sur les différents sites les nouveaux trucs."""
53 news = {}
54 for (k, f) in FETCHS.iteritems():
55 try:
56 news[k] = f()
57 except Exception as e:
58 raise
59 news.update(gather.gather())
60 return news
61
62 def sync():
63 """Reçoit une requête de synchronisation."""
64 # On récupère où en est le client sur stdin
65 t = sys.stdin.read()
66 on_client = json.loads(t)
67 # On récupère où en est le serveur dans le fichier idoine
68 if os.path.isfile(serverconfig.store_seen_file):
69 on_server = json.load(open(serverconfig.store_seen_file))
70 else:
71 on_server = {}
72 # On garde le maximum
73 for k in set(on_client.keys() + on_server.keys()):
74 on_server[k] = max(on_client.get(k, 0), on_server.get(k, 0))
75 # On enregistre ce nouveau dico
76 json.dump(on_server, open(serverconfig.store_seen_file, "w"))
77 # On envoie au client ce nouveau dico
78 print json.dumps(on_server)
79
80 if __name__ == "__main__":
81 DEBUG = ("--debug" in sys.argv) or ("--verbose" in sys.argv) or serverconfig.DEBUG
82 if sys.argv[1] == "check":
83 news = fetch_all()
84 if "--init" in sys.argv:
85 olds = news
86 else:
87 olds = get_file()
88 olds.update(news)
89 update_file(olds)
90 elif sys.argv[1] == "whatsup":
91 news = get_file()
92 print json.dumps(news)
93 elif sys.argv[1] == "sync":
94 sync()