#76 Le 12/06/2012, à 10:06
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
![]()
Va t'faire shampouiner
http://blag.xserver-x.org/
Les types awesome n'ont rien à prouver. À personne.
Hors ligne
#77 Le 12/06/2012, à 13:14
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
voici le code
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# auteur Gabriel Pettier
# license GPL V3 or later
# sert uniquement a compter les points sur ce topic :http://forum.ubuntu-fr.org/viewtopic.php?pid=938704
# et donc probablement inutile a quiquonque vu que mon serveur se charge de le lancer tous les matins
# publié a seul but de vérification par les interressés. ;), peut aussi servir si mon serveur n'est plus là
# pour assurer le service un jour.
# nécessite python 2.4 minimum, python-beautifulsoup et python-mechanize.
# le fichier '.compteur_logins' doit contenir le login du posteur sur la première ligne, et son mot de passe
# sur la deuxième (cela et seulement cela).
from BeautifulSoup import BeautifulSoup
import urllib2
import re
import time
import sys
import mechanize as ClientForm
import mechanize as ClientCookie
ignoreList = (
'compteur des leve tot',
)
class Day:
"""un jours dure de 5h à 9h du matin exclu ([5h:9h[) il contient la derniere entrée (points) de ce jour pour chaques joueurs"""
def __init__(self):
self.entries={}
def addEntry(self, entry):
#plus simple de faire un try except que de verifier que l'entrée existe. :/
try:
self.entries[entry.name] = max(self.entries[entry.name],entry.date.points())
except:
self.entries[entry.name] = entry.date.points()
def __str__(self):
for entry in self.entries.items():
print entry,'+',entries[entry]
def utcFrance():
return 1 + time.localtime(time.time())[-1] #1 + 1 si on est a l'heure d'été
class Date:
def __init__(self,tuple=(20,0),utc=utcFrance()):
self.h = (int(tuple[0])-utcFrance()+24+utc)%24
self.m = int(tuple[1])
def __cmp__(self, other):
return cmp(self.points(),other.points())
def points(self):
pts = {5: 10, 6: 6, 7: 3, 8: 1}
return pts.get(self.h, 0)
class Entry:
def __init__(self,name='',date=Date(),edit=Date()):
self.name = name
self.date = max(date,edit)
def setName(self, name):
self.name = name
def setDate(self, date):
if date.points()>self.date.points(): self.date = date
class Score:
def __init__(self, tuple):
self.name = tuple[1]
self.num = int(tuple[0])
def __gt__(self, other):
return self.num>other.num
def __str__(self):
return '%i %s' %(self.num, self.name)
def getPage(url, entries, stat, urlscore):
# essaye jusqu'a 15 fois de récupérer la page
for i in range(15):
try:
page = BeautifulSoup(urllib2.urlopen(url))
break
except:
print 'essai: %s' % i
if i==14: raise
time.sleep(60)
print 'page récupéré, travail en cours'
for post in page.findAll("div","blockpost rowodd blockpost1")+page.findAll("div","blockpost roweven")+page.findAll("div","blockpost rowodd"):
str_date = str(post.find("h2").find("span").find("a")).split('>')[1]
if (
(str_date.split(' ')[0] in ['Hier']
and int(str_date.split(' ')[2].split('<')[0].split(':')[0]) in range(5,24))
or (str_date.split(' ')[0] in ["Aujourd\'hui"]
and int(str_date.split(' ')[2].split('<')[0].split(':')[0]) in range(5))
):
urlscore = url
try:
entry = Entry(str(post.find("div","postleft").find("a")).split(">")[1].split("<")[0])
except:
entry = Entry(str(post.find("div","postleft").find("strong")).split(">")[1].split("<")[0])
utc=utcFrance()
#print entry.name
if 'GMT' in str(post):
try:
#print str(post).split("GMT")[-1]
utc = int(str(post).split("GMT")[-1].split(" ")[0].split("<")[0])
print 'GMT found',utc
except:
print "no good GMT!"
entry.setDate(Date(str_date.split(" ")[2].split("<")[0].split(":"),utc))
if str_date.split(" ")[2].split("<")[0].split(":")[0] not in stat:
stat[str_date.split(" ")[2].split("<")[0].split(":")[0]] = 1
else:
stat[str_date.split(" ")[2].split("<")[0].split(":")[0]] += 1
if post.find('p','postedit') is not None:
print "edit found"
try:
entry.setDate(Date(str(post.find("p","postedit").find("em")).split("Ã ")[1][1:6].split(":"),utc))
except:
print 'error ->'+str(str(post.find("p","postedit").find("em")).split("Ã "))
#on ne veut pas les points des pseudos dans ignoreList
if entry.name not in ignoreList and (entry.date.points() is not 0): entries.addEntry(entry)
# erreur si le topic fait moins d'une page de long,FIXME!
#result = int(url.split('p=')[1]) < int(str(page.findAll('a')[-7]).split('p=')[1].split('"')[0]) #en espérant que le nombre de liens en bas de page ne change pas! :/
if str(page.find('p','pagelink conl')).split('conl">')[1].split('</p')[0].split(str(page.find('p','pagelink conl').find('strong'))) == ['', '']:
result = False
else:
try:
result = int(url.split('p=')[1]) < int(str(page.find('p','pagelink conl').findAll('a')[-2]).split('p=')[1].split('"')[0])
except IndexError:
result = False
#FIXED!
if not result:
# on vérifie si le sujet est fermé, auquel cas on renvoie le dernier lien fourni sur la page
if "Discussion fermée" in ''.join( (str( i) for i in page.findAll('p','postlink conr'))):
print str(page.findAll('div','postmsg')[-1])
result = str(page.findAll('div','postmsg')[-1].findAll('a')[-1]).split('"')[1]
return result, urlscore
def renderstats(stats):
if stats != {}:
DayStats = {'00': 0, '01': 0, '02': 0, '03': 0, '04': 0, '05': 0, '06': 0, '07': 0, '08': 0, '09': 0, '10': 0, '11': 0, '12': 0, '13': 0, '14': 0, '15': 0, '16': 0, '17': 0, '18': 0, '19': 0, '20': 0, '21': 0, '22': 0, '23': 0}
DayStats.update(stats)
HoursBar = 'h|'.join(sorted(DayStats.keys()))+'h'
HoursBar = HoursBar[20:]+'|'+HoursBar[:19]
HoursBar = HoursBar[0:len(HoursBar)-1]
HoursPie = 'h|'.join(sorted(stats.keys()))+'h'
for k in stats.keys():
HoursPie = HoursPie.replace(k+'h', k+'h%20-%20'+k+'h59')
DataBar = ','.join([str(DayStats[x]) for x in sorted(DayStats.keys())])
DataBar = ','.join(DataBar.split(',')[5:24])+','+','.join(DataBar.split(',')[0:5])
Vmax10 = str(10*(int(max([DayStats[x] for x in DayStats.keys()]))/10+1))
urlimage='[img=Répartition]http://chart.apis.google.com/chart?chs=675x280&cht=p3&chco=d80020,d88000,ffd840,20d820,2080ff,101080,a020d8&chf=bg,s,00000000&chl='+HoursPie+'&chd=t:'+','.join([str(stats[x]) for x in sorted(stats.keys())])+'&chp=1.6&chtt=R%C3%A9partition%20des%20posts&chts=606060,16[/img]'
urlimage+='[img=Posts/heure]http://chart.apis.google.com/chart?chs=675x280&cht=bvs&chxt=x,y&chds=0,'+Vmax10+'&chxr=1,0,'+Vmax10+((Vmax10 == '30' and ',5') or '')+'&chf=b0,lg,0,803000,0,ffc080,1|bg,s,00000000&chxl=0:|'+HoursBar+'h'+'&chxp=0,0.7,4.9,9.1,13.2,17.3,21.5,25.6,29.8,33.9,38,42.2,46.3,50.5,54.6,58.8,62.9,67,71.2,75.3,79.4,83.6,87.7,91.8,96&chd=t:'+DataBar+'&chm=N,803000,0,-1,12&chtt=|Nombre%20de%20posts%20par%20heure&chts=606060,16[/img]'
return urlimage
return None
def post(_file, stats):
# le fichier '.compteur_logins' doit contenir le login du posteur sur la première ligne, et son mot de passe sur la deuxième (cela et seulement cela).
file = open(".compteur_logins","r")
login = file.readline().split('\n')[0]
password = file.readline().split('\n')[0]
file.close()
cookieJar = ClientCookie.CookieJar()
opener = ClientCookie.build_opener(ClientCookie.HTTPCookieProcessor(cookieJar))
opener.addheaders = [("User-agent","Mozilla/5.0 (compatible)")]
ClientCookie.install_opener(opener)
fp = ClientCookie.urlopen("http://forum.ubuntu-fr.org/login.php")
forms = ClientForm.ParseResponse(fp)
fp.close()
form = forms[1]
form["req_username"] = login
form["req_password"] = password
fp = ClientCookie.urlopen(form.click())
fp.close()
file = open('url','r')
tid = file.readline().split('=')[1][:-2] # la première ligne contenant l'addresse du topic.
file.close()
fp = ClientCookie.urlopen("http://forum.ubuntu-fr.org/post.php?tid="+tid)
forms = ClientForm.ParseResponse(fp)
fp.close()
print "http://forum.ubuntu-fr.org/post.php?tid="+tid
print forms[0]
form = forms[1]
title = (((_file == "count") and "Scores totaux, depuis le début") or "scores de la période en cours")
form["req_message"] = title+" :[ code]"+'\xe2\x80\xad'
file = open(_file, 'r')
scores=file.readlines()
urlimage = renderstats(stats)
stats = {}
for i in range(len(scores)):#on veut toutes les lignes restantes
if i == 0:
tmpRange = 0
elif scores[i].split(" ")[0] == scores[i-1].split(" ")[0]:
pass
else:
tmpRange = i
#et on ajoute la ligne avec le bon rang a l'entrée
form["req_message"] += (
(('\xe2\x80\xae' in scores[i-1] and '\xe2\x80\xac') or '')+
(("Quelqu'un" in scores[i] and "*** champion des leves tot ***\n") or '')+
str(tmpRange+1)+
") "+scores[i]+
(("Quelqu'un" in scores[i]
and "******************************************************************************\n") or '')
)
form["req_message"] += "[ /code]"+(urlimage or '')
fp = ClientCookie.urlopen(form.click())
fp.close()
def main(urlfile, files):
debug = False
stats = {}
f=open(urlfile,"r")
url=urlscore=f.readline().split('\n')[0]
f.close()
entries = Day()
while True:
print "lecture de la page "+url
res = getPage(url, entries, stats, urlscore)
urlscore = res[1]
if not res[0]: break
url=url.split('p=')[0]+'p='+str(1+int(url.split('p=')[1]))
if res[0] is not True:
url = url.split('?')[0]+'?'+res[0].split('?')[1]+'&p=1'
if not debug:
f=open(urlfile,"w")
f.write(urlscore+'\n')
f.close()
for file in files:
f=open(file,'r')
lines=(file=="count10days" and ((time.localtime()[2]==2 and ["0 "+entries.entries.keys()[0]+"\n"]) or f.readlines()) or f.readlines())
f.close()
exp = re.compile("^[0-9]+\s*")
scores = []
print "lecture scores courants"
for line in lines:
if line not in [' ','']:
scores.append(Score([(line.split(' ')[0]),exp.split(line)[1].split('\n')[0]]))
new_scores=[]
for entry,num in entries.entries.items():
for score in scores:
if entry.lower() == score.name.lower():
score.num+=num
break
if score is scores[-1]:
new_scores.append(Score([num,entry]))
break
scores+=new_scores
# vérification des doublons
for nScore in range(len(scores)-1):
for mScore in range(nScore+1,len(scores)-1):
try:
if scores[nScore].name.lower() == scores[mScore].name.lower():
scores[nScore].num+=scores[mScore].num
del(scores[mScore])
except:
pass
scores.sort(reverse=True)
if not debug:
for score in scores: print score
f=open(file, "w")
for score in scores: #print score
f.write('%s\n'%score)
f.close()
for i in range(15):
try:
post(file, stats)
stats = {}
break
except:
if i == 14: raise
time.sleep(60)
time.sleep(10)
main("url",["count","count10days"])
#post("count",{})
#post("count10days",{})et l'erreur qui va avec
./Nouveau\ compteur.py
lecture de la page http://forum.ubuntu-fr.org/viewtopic.php?pid=9590061#p9590061
page récupéré, travail en cours
edit found
error ->['<em>Derni\xc3\xa8re modification par pierguiard (Hier \xc3\xa0 12:35)</em>']
lecture scores courants
Traceback (most recent call last):
File "./Nouveau compteur.py", line 304, in <module>
main("url",["count","count10days"])
File "./Nouveau compteur.py", line 264, in main
scores.append(Score([(line.split(' ')[0]),exp.split(line)[1].split('\n')[0]]))
IndexError: list index out of rangeModérateur du forum ubuntu-fr.org
amd 3000+, nvidia FX5200 et 2 giga de ram sur voyager 12.04
toshiba satellite_c670d-11l sur Voyager 13.04
salon de discussion IRC sur voyager: ##ubuntu-voyager
En ligne
#78 Le 12/06/2012, à 13:25
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Merci, je te dis ça dans la soirée (si j'ai le temps)
MyTipy.org : Fournir un serveur permettant d'héberger les services les plus communs de l'Internet facilement et à moindre coût.
Développeur indépendant
Hors ligne
#79 Le 13/06/2012, à 05:07
- raspouillas
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Bonjour du bon matin ...
#80 Le 13/06/2012, à 06:04
- raspouillas
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Je suis seul !
#81 Le 13/06/2012, à 06:06
- raspouillas
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Non !
ps: Il faut bien que je dépasse @Rap' ...
#82 Le 13/06/2012, à 06:43
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Bonjour
Vieux papy triste et sexiste, en attente d'être complètement con×. J'aurais tendance à ne pas utiliser de smilleys.
- CM S775 MSI P6NGM, E7300duo 2.66Gz, 2Go. Ludid
- Portable Médion 96290 Lucid
- Stockage Dlink DNS323 (2xDisk raid1)
Hors ligne
#83 Le 13/06/2012, à 06:44
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
hello tout le monde
Modérateur du forum ubuntu-fr.org
amd 3000+, nvidia FX5200 et 2 giga de ram sur voyager 12.04
toshiba satellite_c670d-11l sur Voyager 13.04
salon de discussion IRC sur voyager: ##ubuntu-voyager
En ligne
#84 Le 13/06/2012, à 07:34
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Salut
Le réel ne peut s'exprimer que par l'absurde.
Linux n'est pas plus compliqué,il est différentGNU/Linux a Marseillehttp://www.infomedic-services.fr Principe informatique:Si tu fais un pas en avant et que ton pied est dans la merde, il vaut mieux reculer que de mettre le secondDécouvrir Marseille
En ligne
#85 Le 13/06/2012, à 07:44
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
!!
Va t'faire shampouiner
http://blag.xserver-x.org/
Les types awesome n'ont rien à prouver. À personne.
Hors ligne
#86 Le 13/06/2012, à 07:44
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Coucou
MyTipy.org : Fournir un serveur permettant d'héberger les services les plus communs de l'Internet facilement et à moindre coût.
Développeur indépendant
Hors ligne
#87 Le 13/06/2012, à 07:56
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Salut!!! (connexion en panne ce matin) ![]()
Tu es programmé, mais tu es libre.
Hors ligne
#88 Le 13/06/2012, à 18:20
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
L'absurde ne peut s'exprimer que par le réel.
![]()
Tu es programmé, mais tu es libre.
Hors ligne
#89 Le 13/06/2012, à 19:11
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
réel a écrit :absurde a écrit :...
...
...
A ce train là, on est mal barré ! ![]()
MyTipy.org : Fournir un serveur permettant d'héberger les services les plus communs de l'Internet facilement et à moindre coût.
Développeur indépendant
Hors ligne
#90 Le 13/06/2012, à 19:57
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Ça c'est reel
1 1769 FloydPepper
2 1530 pierguiard
3 1463 MdMax
4 1247 Azurea
5 1192 souen
6 952 Ras'
7 750 raspouillas
8 552 Arcans
9 428 peterp@n
10 359 golgoth42
11 281 mindiell
12 277 omc
13 219 Πυλάδης
14 176 pololasi
15 117 edge_one
16 101 nathéo
17 99 karameloneboudeplus
18 61 agarwood
19 60 Niltugor
20 52 1101011
20 52 jeyenkil
22 43 Crocoii
23 42 nakraïou
23 42 DaveNull
25 40 Biaise
26 39 Clem_ufo
27 38 Atem18
28 34 ljere
29 22 marinmarais
30 18 Ju
31 13 Le grand rohr sha
32 10 Phoenix
32 10 FLOZz
32 10 sakul
32 10 SopolesRâ
36 6 wiscot
36 6 timsy
36 6 Slystone
36 6 Hibou57
36 6 tshirtman
36 6 marting
36 6 c4nuser
43 4 Morgiver
43 4 :!pakman
45 3 Phoenamandre
45 3 gonzolero
45 3 helly
45 3 Le Rouge
49 1 herewegoagain
49 1 TheUploader
49 1 Kyansaa
49 1 Xiti29Mais en y regardant de près, c'est absurde !
Edit: @ljere
J'ai vu ton intervention sur le TdcT, je pense que ton idée première est la bonne, pour voir j'aimerais bien que tu relance ton cpt pour vérification, des points et des places. Et comme l'a dit papy si il y a un problème avec un de ses post creuse plutôt par là. Enfin je dis ça je dis rien, le codage en py je connais pas …
Dernière modification par Floyd Pepper (Le 13/06/2012, à 20:27)
Vieux papy triste et sexiste, en attente d'être complètement con×. J'aurais tendance à ne pas utiliser de smilleys.
- CM S775 MSI P6NGM, E7300duo 2.66Gz, 2Go. Ludid
- Portable Médion 96290 Lucid
- Stockage Dlink DNS323 (2xDisk raid1)
Hors ligne
#91 Le 13/06/2012, à 20:26
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Mais en y regardant de près, c'est absurde !
...mais le réel est absurde!!!
Tu es programmé, mais tu es libre.
Hors ligne
#92 Le 13/06/2012, à 20:37
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
comme je l'avais dit à pierguiard l'erreur ne vient pas de son édition de poste c'est le comportement normal du script, l'erreur se produit après
scores.append(Score([(line.split(' ')[0]),exp.split(line)[1].split('\n')[0]]))
IndexError: list index out of rangeModérateur du forum ubuntu-fr.org
amd 3000+, nvidia FX5200 et 2 giga de ram sur voyager 12.04
toshiba satellite_c670d-11l sur Voyager 13.04
salon de discussion IRC sur voyager: ##ubuntu-voyager
En ligne
#93 Le 13/06/2012, à 20:49
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Une dernière pour la route...
Le sens de la vie, c’est ce qui reste quand on se débarrasse de tout ce qui est absurde.
Tu es programmé, mais tu es libre.
Hors ligne
#94 Le 13/06/2012, à 20:53
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
@Floyd Papy
c'est pépé pas papy nanmais ho! ![]()
Linux n'est pas plus compliqué,il est différentGNU/Linux a Marseillehttp://www.infomedic-services.fr Principe informatique:Si tu fais un pas en avant et que ton pied est dans la merde, il vaut mieux reculer que de mettre le secondDécouvrir Marseille
En ligne
#95 Le 13/06/2012, à 20:55
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
De peur de dire une grosse connerie je ne peux que m'en remettre à toi, mais cette erreur n'empêchait pas ton compteur de compter juste, non ?
Vieux papy triste et sexiste, en attente d'être complètement con×. J'aurais tendance à ne pas utiliser de smilleys.
- CM S775 MSI P6NGM, E7300duo 2.66Gz, 2Go. Ludid
- Portable Médion 96290 Lucid
- Stockage Dlink DNS323 (2xDisk raid1)
Hors ligne
#96 Le 13/06/2012, à 21:00
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
@Floyd Papy
c'est pépé pas papy nanmais ho!
Ah ouai, ça c'est vrai, mille excuses, j'avais oublié que le papy c'était moi.
Dédoublement inverse de la personnalité, ça devient critique …
Vieux papy triste et sexiste, en attente d'être complètement con×. J'aurais tendance à ne pas utiliser de smilleys.
- CM S775 MSI P6NGM, E7300duo 2.66Gz, 2Go. Ludid
- Portable Médion 96290 Lucid
- Stockage Dlink DNS323 (2xDisk raid1)
Hors ligne
#97 Le 13/06/2012, à 21:35
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
ah non ce n'est pas ce compteur la que j'avais testé c'est un script qui n'est pas du tout automatisé (d’où les erreurs lors du premier essai)solution non viable pour ce topic
Modérateur du forum ubuntu-fr.org
amd 3000+, nvidia FX5200 et 2 giga de ram sur voyager 12.04
toshiba satellite_c670d-11l sur Voyager 13.04
salon de discussion IRC sur voyager: ##ubuntu-voyager
En ligne
#98 Le 13/06/2012, à 23:51
- raspouillas
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Qui est le plus vieux dans le forum Ubuntu ?
#99 Le 14/06/2012, à 05:01
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Y'avait un topic là dessus j'crois...
Va t'faire shampouiner
http://blag.xserver-x.org/
Les types awesome n'ont rien à prouver. À personne.
Hors ligne
#100 Le 14/06/2012, à 05:17
- raspouillas
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
boujour ...