Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1901 Le 25/05/2010, à 01:01

nesthib

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#1902 Le 25/05/2010, à 01:26

grim7reaper

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

The plop.

[logout]
Pour cause de vie personnelle mouvementée je ne serais plus très présent sur le forum, aussi bien en r qu'en w, pour une période indéterminée (à la Debian, le temps de publier une version stable).

Par conséquent, je laisse ma place au classement aux bons soins de Pylade tongue.
Si trucs importants MP /me
[/logout]

Hors ligne

#1903 Le 25/05/2010, à 08:37

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

J’ai marqué trois points hier, et j’en marquerai deux ce soir et demain, mais après, compte sur moi pour retourner aux affaires avec des dix points ! tongue


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1904 Le 25/05/2010, à 08:42

Compteur du TdCCT

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Scores totaux, depuis le début :

1) 345    samuncle
2) 277    nesthib
3) 237+5  grim7reaper
4) 235    Pylade
5) 200    mathieuI
6) 165    cm-t
7) 112    helly
8) 96    ǤƦƯƝƬ
9) 72    gnuuat
10) 70    petifrancais
11) 60    tshirtman
12) 37    ilagas
13) 25    GentooUser
14) 24    pierguiard
15) 23    Ouranos999
16) 19    Le Rouge
17) 18    Ph3nix_
18) 14    Kanor
19) 12    stratoboy
19) 12    kouskous
21) 10    CROWD
21) 10    keny
23) 7    Lagierl
23) 7    sailing
25) 6    Toineo
25) 6    Mornagest
25) 6    Zeibux
28) 5    xapantu
29) 4    danychou56
29) 4    Neros
29) 4    Biaise
32) 3    Р'tite G☢gole :mad:
33) 1    ceric
33) 1    pfriedK
33) 1    geenux

chart?chs=675x280&cht=p3&chco=ff0000,ffff00,008000,000080,8000ff&chf=bg,s,808080&chl=00h%20-%2000h59|01h%20-%2001h59|02h%20-%2002h59|09h%20-%2009h59|14h%20-%2014h59|20h%20-%2020h59|21h%20-%2021h59|22h%20-%2022h59|23h%20-%2023h59&chd=t:3,4,2,3,3,1,1,4,4&chtt=R%C3%A9partition%20des%20posts&chts=cccccc,12chart?chs=675x250&cht=bvs&chxt=x,y&chds=0,10&chxr=1,0,10&chf=b0,lg,0,803300,0,ffcc80,1|bg,lg,90,cccccc,0,808080,0.9&chxl=0:|05h|06h|07h|08h|09h|10h|11h|12h|13h|14h|15h|16h|17h|18h|19h|20h|21h|22h|23h|00h|01h|02h|03h|04h&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:0,0,0,0,3,0,0,0,0,3,0,0,0,0,0,1,1,4,4,3,4,2,0,0&chm=N,803300,0,-1,12&chtt=Nombre%20de%20posts%20par%20heure&chts=cccccc,12


Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#1905 Le 25/05/2010, à 08:42

Compteur du TdCCT

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Scores de la période en cours :

1) 345    samuncle
2) 277    nesthib
3) 237    grim7reaper
4) 235    Pylade
5) 200    mathieuI
6) 165    cm-t
7) 112    helly
8) 96    ǤƦƯƝƬ
9) 72    gnuuat
10) 70    petifrancais
11) 60    tshirtman
12) 37    ilagas
13) 25    GentooUser
14) 24    pierguiard
15) 23    Ouranos999
16) 19    Le Rouge
17) 18    Ph3nix_
18) 14    Kanor
19) 12    stratoboy
19) 12    kouskous
21) 10    CROWD
21) 10    keny
23) 7    Lagierl
23) 7    sailing
25) 6    Toineo
25) 6    Mornagest
25) 6    Zeibux
28) 5    xapantu
29) 4    danychou56
29) 4    Neros
29) 4    Biaise
32) 3    Р'tite G☢gole :mad:
33) 1    ceric
33) 1    pfriedK
33) 1    geenux

Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#1906 Le 25/05/2010, à 09:20

tshirtman

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

gnuuat: j'ai du mal à voir en quoi c'est plus pratique, au vue de tes deux exemples… mais bon, sache qu'au niveau optimisation c'est pareil ^^.

Hors ligne

#1907 Le 25/05/2010, à 16:06

gnuuat

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Je voulais juste savoir côté optimisation smile .

Mais en général, pour mon utilisation quotidienne, ++ctr sera plus simple :

#include <stdlib.h>

int         main(void)
{
  char      *str;
  int       size;

  size = 42;
  str = malloc(sizeof(*str) * size);
  while (--size >= 0)
    str[ctr] = '\0';
  return (EXIT_SUCCESS);
}

Bon, ce bout de code ne sert à rien (man bzero, memset, etc...), mais ça résume bien le genre de cas sur lequel je tombe souvent smile .


Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#1909 Le 25/05/2010, à 21:13

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Le lendemain du towel day, avec un numéro multiple de 42.
C’est un bon présage.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1910 Le 25/05/2010, à 21:42

gnuuat

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

tshirtman a écrit :
strncpy()

roll

bzero rempli directement de zéros la chaine avec la taille donnée.
memset, permet de remplir la chaine avec le caractère donné pour la taille donnée.
strncpy, il copie les n premiers caractères chaine dans une autre.
Or ici, je rempli de \0, donc la fonction la plus appropriée est bzero smile .
Sinon, yavait l'utilisation de xcalloc aussi, qui est plus rapide tongue .


Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#1911 Le 25/05/2010, à 22:19

helly

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

BN World


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1912 Le 25/05/2010, à 22:53

Кຼزດ

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

plop += 1

Dernière modification par mathieuI (Le 25/05/2010, à 23:21)


dou

Hors ligne

#1913 Le 25/05/2010, à 23:06

gnuuat

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

inc plop

Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#1914 Le 25/05/2010, à 23:25

gnuuat

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

1274826313.jpg


Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !

Hors ligne

#1915 Le 25/05/2010, à 23:58

tshirtman

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

bonne nuit

editapoints

Dernière modification par tshirtman (Le 26/05/2010, à 00:00)

Hors ligne

#1916 Le 26/05/2010, à 00:05

samυncle

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

smile


Hello world

Hors ligne

#1917 Le 26/05/2010, à 00:39

cm-t

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

'nuit


Actu Ubuntu            ☺/
Pauses Ubuntu sur Paris            \_< -t
[(π)] La Quadrature du net

Hors ligne

#1918 Le 26/05/2010, à 03:52

samυncle

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

.


Hello world

Hors ligne

#1919 Le 26/05/2010, à 08:09

tshirtman

Hors ligne

#1920 Le 26/05/2010, à 09:17

cm-t

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

pareil, ca m'arrive tout les soir yikes


Actu Ubuntu            ☺/
Pauses Ubuntu sur Paris            \_< -t
[(π)] La Quadrature du net

Hors ligne

#1921 Le 26/05/2010, à 11:48

nany

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Bonjour chez vous.

tshirtman a écrit :

>_< j'ai fais mes points ici au lieu de là bas… >_<

Bah, pour un point, ce n’est pas bien grave. D’ailleurs, @Pylade, si tu ne veux pas que samuncle te tombe dessus, quand tu seras rentré de tes partiels et avant de lancer le compteur, reprends ceci :

        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)) :

En ligne

#1922 Le 26/05/2010, à 17:13

Compteur du TdCCT

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Scores totaux, depuis le début :

1) 350    samuncle
2) 277    nesthib
3) 237+5  grim7reaper
3) 237    Pylade
5) 204    mathieuI
6) 170    cm-t
7) 115    helly
8) 96    ǤƦƯƝƬ
9) 76    gnuuat
10) 70    petifrancais
11) 65    tshirtman
12) 37    ilagas
13) 25    GentooUser
14) 24    pierguiard
15) 23    Ouranos999
16) 19    Le Rouge
17) 18    Ph3nix_
18) 14    Kanor
19) 12    stratoboy
19) 12    kouskous
21) 10    CROWD
21) 10    keny
23) 7    Lagierl
23) 7    sailing
25) 6    Toineo
25) 6    Mornagest
25) 6    Zeibux
28) 5    xapantu
29) 4    danychou56
29) 4    Neros
29) 4    Biaise
32) 3    Р'tite G☢gole :mad:
33) 1    ceric
33) 1    pfriedK
33) 1    geenux

chart?chs=675x280&cht=p3&chco=ff0000,ffff00,008000,000080,8000ff&chf=bg,s,808080&chl=00h%20-%2000h59|01h%20-%2001h59|09h%20-%2009h59|10h%20-%2010h59|17h%20-%2017h59|22h%20-%2022h59|23h%20-%2023h59&chd=t:3,2,3,1,2,2,2&chtt=R%C3%A9partition%20des%20posts&chts=cccccc,12chart?chs=675x250&cht=bvs&chxt=x,y&chds=0,10&chxr=1,0,10&chf=b0,lg,0,803300,0,ffcc80,1|bg,lg,90,cccccc,0,808080,0.9&chxl=0:|05h|06h|07h|08h|09h|10h|11h|12h|13h|14h|15h|16h|17h|18h|19h|20h|21h|22h|23h|00h|01h|02h|03h|04h&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:0,0,0,0,3,1,0,0,0,0,0,0,2,0,0,0,0,2,2,3,2,0,0,0&chm=N,803300,0,-1,12&chtt=Nombre%20de%20posts%20par%20heure&chts=cccccc,12


Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#1923 Le 26/05/2010, à 17:13

Compteur du TdCCT

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Scores de la période en cours :

1) 350    samuncle
2) 277    nesthib
3) 237    grim7reaper
3) 237    Pylade
5) 204    mathieuI
6) 170    cm-t
7) 115    helly
8) 96    ǤƦƯƝƬ
9) 76    gnuuat
10) 70    petifrancais
11) 65    tshirtman
12) 37    ilagas
13) 25    GentooUser
14) 24    pierguiard
15) 23    Ouranos999
16) 19    Le Rouge
17) 18    Ph3nix_
18) 14    Kanor
19) 12    stratoboy
19) 12    kouskous
21) 10    CROWD
21) 10    keny
23) 7    Lagierl
23) 7    sailing
25) 6    Toineo
25) 6    Mornagest
25) 6    Zeibux
28) 5    xapantu
29) 4    danychou56
29) 4    Neros
29) 4    Biaise
32) 3    Р'tite G☢gole :mad:
33) 1    ceric
33) 1    pfriedK
33) 1    geenux

Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#1924 Le 26/05/2010, à 17:18

Pylades

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

le n@nyl@nd a écrit :

D’ailleurs, @Pylade, si tu ne veux pas que samuncle te tombe dessus, quand tu seras rentré de tes partiels et avant de lancer le compteur, reprends ceci :

        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)) :

Qui, que, quoi ?
Pas lu avant, c’est grave ?


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1925 Le 26/05/2010, à 17:21

nany

Re : ..:: Topic des Codeurs Couche-Tard [0] ::..

Eh ben, toujours pas finis ces partiels !

Pour la peine, deuxième version tongue :

#!/usr/bin/env python
# encoding: 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 ClientForm
import mechanize as ClientCookie

#ignoreList = ('ArkSeth','compteur-couche-tards','fergo','pdas','Compteur_couche_tards','compteur-couche-tard') #TdCT
ignoreList = ('ArkSeth','Compteur du TdCCT','Chuck Norris','oracle_bot') #TdCCT

class Day:
    """un jour dure de 21h à 5h du matin exclu ([21h:5h[) il contient la derniere entrée (points) de ce jour pour chaque joueur"""
    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 points(self):
        if self.m in range(60):
            if self.h in range(21,24):
                return self.h - 20
            if self.h in range(3):
                return self.h + 4
            if self.h in [3,4]:
                return 10
        return 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:
            if i==14: raise
            time.sleep(60)

    print 'page récupérée, travail en cours'
    for post in page.findAll('div','blockpost rowodd')+page.findAll('div','blockpost roweven'):
        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()
            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 'GMT' in str(post):
                try:
                    utc = int(str(post).split('GMT')[-1].split(' ')[0].split('<')[0])
                except:
                    print entry.name,'-> no good GMT!'
            entry.setDate(Date(str_date.split(' ')[2].split('<')[0].split(':'),utc))

            if post.find('p','postedit') is not None:
                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:
        result = int(url.split('p=')[1]) < int(str(page.find('p','pagelink conl').findAll('a')[-2]).split('p=')[1].split('"')[0])
    #FIXED!
    if not result:
        # on vérifie si le sujet est fermé, auquel cas on renvoie le dernier lien fourni sur la page
        if 'Sujet ferm&eacute;' 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]http://chart.apis.google.com/chart?chs=675x280&cht=p3&chco=d80020,d88000,ffd840,20d820,2080ff,101080,a020d8&chf=bg,s,c0c0c0&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]http://chart.apis.google.com/chart?chs=675x250&cht=bvs&chxt=x,y&chds=0,'+Vmax10+'&chxr=1,0,'+Vmax10+'&chf=b0,lg,0,803000,0,ffc080,1|bg,lg,90,d8d8d8,0,c0c0c0,0.9&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, debug):
    # 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'adresse du topic.
    file.close()
    fp = ClientCookie.urlopen('http://forum.ubuntu-fr.org/post.php?tid='+tid)
    forms = ClientForm.ParseResponse(fp)
    fp.close()

    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+':&#91;code]'
    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'] += (('Quelqu\'un' in scores[i] and '*** Vétéran des couche-tard, invaincu avant retraite ***\n') or '')+str(tmpRange+1)+') '+scores[i]+(('Quelqu\'un' in scores[i] and '******************************************************************************\n') or '') #TdCT
        form['req_message'] += str(tmpRange+1)+') '+(_file == 'count' and ((('grim7reaper' in scores[i] and scores[i].replace('    ', '+5  ').split('\n')[0]+' ** bonus +5 pour avoir répondu à ce post : ./viewtopic.php?pid=3486252#p3486252 **\n')) or scores[i]) or scores[i]) #TdCCT
    form['req_message'] += '&#91;/code]'+(urlimage or '')

    if debug:
        print '\nmode debug : les scores ne sont pas incrémentés\n', form['req_message']
    else:
        fp = ClientCookie.urlopen(form.click())
        fp.close()

def main(urlfile, files):
    debug = True
    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 = res[0]+'&p=1'

    if not debug:
        f=open(urlfile,'w')
        f.write(urlscore+'\n')
        f.close()

    for file in files:
        f=open(file,'r')
        lines=f.readlines()
        f.close()
        exp = re.compile('^[0-9]+\s*')
        scores = []
        print '\nlecture scores courants :\n', entries.entries.items()
        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:
                f=open(file, 'w')
            for score in scores:
                f.write('%s\n'%score)
                f.close()

        for i in range(15):
            try:
                post(file, stats, debug)
                stats = {}
                break
            except:
                if i == 14: raise
                time.sleep(60)

main('url',['count','count10days'])

J’ai essayé d’éclaircir le bleu autant que possible plus quelques petites modifications notamment la sauvegarde de l’url du dernier post à points (pas très utile sur ce topic mais d’avantage sur le TdCT).
@tshirtman : si tu veux récupérer ce code, tu noteras évidemment qu’il faut permuter les commentaires des lignes 25/26 et 205/206.

Dernière modification par le n@nyl@nd (Le 28/05/2010, à 16:34)

En ligne