#76 Le 12/06/2012, à 09:06
- Ras'
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#77 Le 12/06/2012, à 12:14
- ljere
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 range
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#78 Le 12/06/2012, à 12:25
- Mindiell
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)
Hors ligne
#79 Le 13/06/2012, à 04: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, à 05: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, à 05: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, à 05:43
- Floyd Pepper
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Bonjour
... J'aurais tendance à ne pas utiliser de smilleys.
Le plus tu t'fais chier, le plus t'es emmerdé.
Hors ligne
#83 Le 13/06/2012, à 05:44
- ljere
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
hello tout le monde
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#84 Le 13/06/2012, à 06:34
- PPdM
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.
La critique est facile, mais l'art est difficile !
L'humanité étant ce qu'elle est, la liberté ne sera jamais un acquit, mais toujours un droit à défendre !
Pour résoudre un problème commence par poser les bonnes questions, la bonne solution en découlera
Hors ligne
#85 Le 13/06/2012, à 06:44
- Ras'
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
!!
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#86 Le 13/06/2012, à 06:44
- Mindiell
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Coucou
Hors ligne
#87 Le 13/06/2012, à 06:56
- souen
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
Salut!!! (connexion en panne ce matin)
...
Hors ligne
#88 Le 13/06/2012, à 17:20
- souen
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.
...
Hors ligne
#89 Le 13/06/2012, à 18:11
- Mindiell
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é !
Hors ligne
#90 Le 13/06/2012, à 18:57
- Floyd Pepper
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 Xiti29
Mais 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, à 19:27)
... J'aurais tendance à ne pas utiliser de smilleys.
Le plus tu t'fais chier, le plus t'es emmerdé.
Hors ligne
#91 Le 13/06/2012, à 19:26
- souen
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!!!
...
Hors ligne
#92 Le 13/06/2012, à 19:37
- ljere
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 range
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#93 Le 13/06/2012, à 19:49
- souen
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.
...
Hors ligne
#94 Le 13/06/2012, à 19:53
- PPdM
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!
La critique est facile, mais l'art est difficile !
L'humanité étant ce qu'elle est, la liberté ne sera jamais un acquit, mais toujours un droit à défendre !
Pour résoudre un problème commence par poser les bonnes questions, la bonne solution en découlera
Hors ligne
#95 Le 13/06/2012, à 19:55
- Floyd Pepper
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 ?
... J'aurais tendance à ne pas utiliser de smilleys.
Le plus tu t'fais chier, le plus t'es emmerdé.
Hors ligne
#96 Le 13/06/2012, à 20:00
- Floyd Pepper
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 …
... J'aurais tendance à ne pas utiliser de smilleys.
Le plus tu t'fais chier, le plus t'es emmerdé.
Hors ligne
#97 Le 13/06/2012, à 20:35
- ljere
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
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#98 Le 13/06/2012, à 22: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, à 04:01
- Ras'
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 par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#100 Le 14/06/2012, à 04:17
- raspouillas
Re : Topic des lève-tôt… Faisons manger leurs caleçons aux couche-tard! [4]
boujour ...