]>
gitweb.pimeys.fr Git - today.git/blob - today_server.py
2 # -*- encoding: utf-8 -*-
5 script qui affiche des trucs à penser, des J-n des conneries
8 Partie serveur, prévue pour chercher périodiquement les trucs non lus
9 et répondre à un check.
22 os
.chdir('/home/vincent/scripts/today/')
23 sys
.path
.append("/home/vincent/scripts/dtc/")
26 #: Fichier où sont stockés les derniers IDs des trucs
27 store_published_file
= "lasts_published"
29 #: Fichier où est stockée une copie de la liste des derniers IDs *lus*
30 store_seen_file
= "lasts_sync"
33 """Obtenir la date actuelle sous le bon format"""
34 timestamp
= time
.time()
35 now
= datetime
.datetime(*time
.localtime(timestamp
)[:7])
38 def parse_date(s
, french
=True):
39 """Essaye d'obtenir une date à partir du string fourni"""
41 if isinstance(s
, unicode):
43 if s
.startswith("le "):
46 s
= re
.sub(" +", " ", s
)
47 # Pour avoir les noms de dates en Français
49 locale
.setlocale(locale
.LC_ALL
, 'fr_FR.UTF-8')
50 for format
in ["%d %B %Y"]:
52 struct
= time
.strptime(s
, format
)
53 return datetime
.datetime(*struct
[:7])
56 raise ValueError("%r : Didn't manage to convert as date, sorry." % (s
,))
59 """Vérifie si il y a des quotes DTC non lues"""
60 return dtc
.last_inserted()
63 p
= urllib
.urlopen("http://xkcd.com")
65 current_id
= int(re
.findall("Permanent link to this comic: http://xkcd.com/(.*?)/", t
)[0])
69 p
= urllib
.urlopen("http://www.adoprixtoxis.com/lite/download/xantah_downloads.php")
71 ids
= re
.findall("""<div class="top">Xantah (.*?)</div>""", t
)
72 ids
= [int(i
) for i
in ids
]
76 p
= urllib
.urlopen("http://www.levisiteurdufutur.com/episodes.html")
79 soup
= BeautifulSoup
.BeautifulSoup(t
)
80 # On récupère les différentes saisons
81 saisons
= soup
.findAll("div", attrs
={"id" : "episodes_list"})
82 nsaisons
= len(saisons
)
83 # La saison en cours est la première dans la liste
84 episodes
= saisons
[0].findAll("div", attrs
={"class" : "thumbCaption"})
85 nepisodes
= len(episodes
)
86 return nsaisons
* 100 + nepisodes
88 def last_noob_warpzone():
89 p
= urllib
.urlopen("http://noob-tv.com/agenda01.html")
92 soup
= BeautifulSoup
.BeautifulSoup(t
)
93 # On récupère tous les évènements
94 garbage
= soup
.findAll("strong")
97 l
= o
.findAll("span", attrs
={"class":"Style31"})
99 events
.append([o
.text
[:o
.text
.index(":")].strip(), l
[0].string
.lower().strip()]) # la date, l'event
100 # On garde que les "sorties"
101 events
= [o
for o
in events
if "sortie" in o
[1]]
103 events
= [[o
[0].replace(u
"û", u
"û").replace(u
"é", u
"é"), o
[1]] for o
in events
]
106 for i
in range(len(events
)):
107 raw_date
, event
= events
[i
]
109 eventss
.append([parse_date(raw_date
), event
])
114 noobs
= [ev
for ev
in events
if "noob" in ev
[1]]
115 warpzones
= [ev
for ev
in events
if "warpzone" in ev
[1]]
116 # On prend en considération le dernier évènement qui a eu lieu
119 ###### RHÂ, shit, y'a des fuckings trucs du genre "1er" dans les dates… :/
120 return noobs
, warpzones
123 """Récupère la liste des derniers ids de chaque truc, stockée dans le fichiers."""
124 f
= open(store_published_file
)
129 def update_file(news
):
130 """Met à jour la liste des derniers ids dans le fichier."""
131 f
= open(store_published_file
, 'w')
138 "xantah" : last_xantah
,
139 "visiteur" : last_visiteur
,
143 """Va chercher sur les différents sites les nouveaux trucs."""
145 for (k
, f
) in FETCHS
.iteritems():
148 except Exception as e
:
149 print "Erreur à la récupération de %s :" % k
150 traceback
.print_exc()
154 """Reçoit une requête de synchronisation."""
155 # On récupère où en est le client sur stdin
157 on_client
= json
.loads(t
)
158 # On récupère où en est le serveur dans le fichier idoine
159 if os
.path
.isfile(store_seen_file
):
160 on_server
= json
.load(open(store_seen_file
))
163 # On garde le maximum
164 for k
in set(on_client
.keys() + on_server
.keys()):
165 on_server
[k
] = max(on_client
.get(k
, 0), on_server
.get(k
, 0))
166 # On enregistre ce nouveau dico
167 json
.dump(on_server
, open(store_seen_file
, "w"))
168 # On envoie au client ce nouveau dico
169 print json
.dumps(on_server
)
171 if __name__
== "__main__":
172 if sys
.argv
[1] == "check":
177 elif sys
.argv
[1] == "whatsup":
179 print json
.dumps(news
)
180 elif sys
.argv
[1] == "sync":