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.

#2151 Le 08/04/2011, à 13:05

rmy

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

Non, Mélanie.

Hors ligne

#2152 Le 08/04/2011, à 15:36

compte supprimé

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

les cartes à côté mad

#2153 Le 08/04/2011, à 16:14

compte supprimé

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

ola @omc,
dans 2 jours non seulement le bot ne fera pas la vaisselle, ni le café mais par contre réussira à nous faire virer tongue

#2154 Le 08/04/2011, à 16:23

tshirtman

Hors ligne

#2155 Le 08/04/2011, à 16:27

compte supprimé

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

tshirtman a écrit :

mon plan machiavélique avance bien tongue

mad

je m'en doutais aussi, 4 pages il sont sympa quand même wink

#2156 Le 08/04/2011, à 16:29

nathéo

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

Au fait où peut-on avoir le code source du cdct ?

Dernière modification par nathéo (Le 08/04/2011, à 16:31)


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2157 Le 08/04/2011, à 16:30

tshirtman

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

j'ai donné le lien page précédente, mais il est pas trop dur à trouver, il est sur google code.

Dernière modification par tshirtman (Le 08/04/2011, à 16:31)

Hors ligne

#2158 Le 08/04/2011, à 16:31

nathéo

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

Je viens de faire un tour sur google code (via la signature du compteur) il me semble pas avoir vu quelque chose qui ressemblait à du code source… tongue


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2159 Le 08/04/2011, à 16:32

tshirtman

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

il faut peut être cliquer sur "browse" ou suivre les instructions fournis sous "checkout"… roll

code.google.com/p/compteur-tdct/source/browse/trunk/compteur_couche_tard.py

Dernière modification par tshirtman (Le 08/04/2011, à 16:33)

Hors ligne

#2160 Le 08/04/2011, à 16:37

nathéo

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

Merci pour le lien, sinon pour la "visibilité" du truc sur google code heu comment dire… tongue


C'est rarement par le sarcasme qu'on élève son âme.
Le jus de la vigne clarifie l'esprit et l'entendement.
De quoi souffres-tu ? De l'irréel intact dans le réel dévasté ?
La liberté n'est qu'un vain fantôme, quand une classe d'hommes peut affamer l'autre impunément. timezone[America/Bogota]

Hors ligne

#2161 Le 08/04/2011, à 16:43

nany

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

karamelo a écrit :
tshirtman a écrit :

mon plan machiavélique avance bien tongue

mad

je m'en doutais aussi, 4 pages il sont sympa quand même wink

Kaa

Et tu peux t'estimer heureux : à trente-sept secondes près, tu avais droit à deux points.

Hors ligne

#2162 Le 08/04/2011, à 17:46

nany

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

karamelo, dans un topic fermé pour cause de flood, a écrit :

d'ailleurs ceci ne devrait pas être changé aussi ?

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

Tout dépend de la période que tu veux prendre en compte.
Tu peux faire un truc de ce genre

 
        if (
           (str_date.split(' ')[0] in ['Hier']
             and int(str_date.split(' ')[2].split('<')[0].split(':')[0]) in range(19,24))
           or (str_date.split(' ')[0] in ["Aujourd\'hui"]
             and int(str_date.split(' ')[2].split('<')[0].split(':')[0]) in range(19))
           ):

et lancer le compteur après 19h (mais avant minuit wink).

Hors ligne

#2163 Le 08/04/2011, à 18:48

omc

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

/Tdct let's flood !

Hors ligne

#2164 Le 08/04/2011, à 18:56

compte supprimé

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

il me semblait bien ma plage est surement pas bonne mais pourquoi le lancer avant minuit ?
et il y a donc les graphiques aussi hmm       
 

 DataBar = ','.join(DataBar.split(',')[5:24])+','+','.join(DataBar.split(',')[0:5])

et celle ci aussi

 entry.setDate(Date(str(post.find("p","postedit").find("em")).split("à")[1][1:6].split(":"),utc))

Et il est où @Omc le floodeur HA bravo 

edit oups il est là

bon il fait la vaisselle ou pas

Dernière modification par karamelo (Le 08/04/2011, à 19:07)

#2165 Le 08/04/2011, à 19:26

omc

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

arg pas encore... Petit problème d'encodage des caractères !

Hors ligne

#2166 Le 08/04/2011, à 20:01

nany

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

Tdlvt-machine a écrit :

,membre de la communauté des lèves-tôt souhaite communiquer:

let&#039;s flood !

lol
J'ai déjà dit que lève-tôt et couche-tard sont invariables. tongue

──────────────────────────────────────────

karamelo a écrit :

il me semblait bien ma plage est surement pas bonne mais pourquoi le lancer avant minuit ?

Parce qu'après minuit, Cendrillon se retrouve en haillons. tongue

Plus sérieusement : parce qu'après minuit, hier devient avant-hier et aujourd'hui devint hier.
Étonnant, non ?

et il y a donc les graphiques aussi hmm       
 

 DataBar = ','.join(DataBar.split(',')[5:24])+','+','.join(DataBar.split(',')[0:5])
DataBar = ','.join(DataBar.split(',')[19:24])+','+','.join(DataBar.split(',')[0:19])

et celle ci aussi

 entry.setDate(Date(str(post.find("p","postedit").find("em")).split("à")[1][1:6].split(":"),utc))

Non, ça c'est pour les edit. Le plus simple serait de modifier la classe Entry en remplaçant max par min :

class Entry:
    def __init__(self,name='',date=Date(),edit=Date()):
        self.name = name
        self.date = min(date,edit)

    def setName(self, name):
        self.name = name

    def setDate(self, date):
        if date.points()>self.date.points(): self.date = date

Et il est où @Omc le floodeur HA bravo 
[…]

Attention les gars ! Les bots sont tolérés mais j'imagine un bot floodeur risque le ban. Surtout dans un nid à modos comme le TdCT. wink

Et bon courage ! Je sens que vous approchez du but.

Dernière modification par le n@nyl@nd (Le 08/04/2011, à 20:24)

Hors ligne

#2167 Le 08/04/2011, à 20:12

tshirtman

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

n@nyl@nd a écrit :

Non, ça c'est pour les edit. Le plus simple serait de modifier la classe Entry en remplaçant max par min :

j'ai un doute sur comment ça marche, là, d'un coup… ce max est il vraiment utile? la comparaison sur le nombre de point étant faite dans setDate…

Hors ligne

#2168 Le 08/04/2011, à 20:22

nany

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

Le min est utile puisqu'ici le principe est à l'inverse du TdCT.

[Edit]Ça semble en effet un plus compliqué car je ne sais pas comment est effectuée la comparaison entre deux objets Date.[/Edit]

Dernière modification par le n@nyl@nd (Le 08/04/2011, à 20:32)

Hors ligne

#2169 Le 08/04/2011, à 20:28

omc

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

/tdct Je vous souhaite une bonne nuit

Hors ligne

#2170 Le 08/04/2011, à 20:30

tshirtman

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

ah si ça doit être utile vu que Date() est initialisé à une heure sans points par défaut.

Mais dans le cas ici,il suffit de prendre l'heure de création je pense.

Hors ligne

#2171 Le 08/04/2011, à 20:31

compte supprimé

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

le n@nyl@nd a écrit :

Parce qu'après minuit, Cendrillon se retrouve en haillons. tongue

Plus sérieusement : parce qu'après minuit, hier devient avant-hier et aujourd'hui devient hier.
Étonnant, non ?.

hmm
c'est d'un gout douteux tongue

omc a écrit :

/tdct Je vous souhaite une bonne nuit

oh merde déjà tu es malade ?

Dernière modification par karamelo (Le 08/04/2011, à 20:32)

#2172 Le 08/04/2011, à 20:37

nany

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

tshirtman a écrit :

ah si ça doit être utile vu que Date() est initialisé à une heure sans points par défaut.

Mais dans le cas ici,il suffit de prendre l'heure de création je pense.

Et si j'ai envie d'éditer un post (celui-ci par exemple) demain matin pour marquer des points ?

Hors ligne

#2173 Le 08/04/2011, à 21:11

omc

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

/tdct The Tdlvt-Bot is alive ! Gnap-gnap

Hors ligne

#2174 Le 08/04/2011, à 21:20

compte supprimé

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

omc a écrit :

Tdlvt-Bot

il est où le code source tongue

#2175 Le 08/04/2011, à 21:22

omc

Re : Topic des lève-tôts... Faisons manger leur slip aux couche-tards !

Arg ça à l'air de fonctionner... big_smile
Si vous voulez envoyer un message aux couche-tards il suffit de commencer votre post par /td... (voir au dessus) et le bot copie le message et poste chez les couche-tards.
Je laisse tourner le bouzin cette nuit... On verra bien wink

import types
from BeautifulSoup import BeautifulSoup
import urllib2
import re
import sys
import ClientForm
import mechanize as ClientCookie

import HTMLParser
import time
from datetime import date
import datetime

class Post:
    """This class to describe a post"""
    def __init__(self, author, date, key, message):
        self.author = author
        self.date = date
        self.key = key
        self.message = message
        
    def __init__(self, htmlCode):
        # extract message
        postMsg =  str(htmlCode.find("div", "postmsg"))
        postMsg = postMsg.replace("<div class=\"postmsg\">","")
        postMsg = postMsg.replace("<p>","")
        postMsg = postMsg.replace("</p>","")
        postMsg = postMsg.replace("</div>","")
        # extract author
        postAuthor =  htmlCode.find("dt").find("strong").find("a").string
        # extract Key
        postKey =  int(htmlCode.find("h2").find("span").find("span").string.replace("#",""))
        # extract date
        postDateStr  = htmlCode.find("h2").find("span").find("a").string
        postDate = date.today()
        if "Aujour" in postDateStr.string:
            postDate = date.today()
        elif "Hier" in postDateStr.string:
            postDate = postDate - datetime.timedelta(1)
        else:
            postDateStr = postDateStr.split(',')[0]
            postDateStr = postDateStr.replace("Le ","")
            postDateStr = postDateStr.split('/')
            postDate = datetime.date(int(postDateStr[2]),int(postDateStr[1]), int(postDateStr[0]))
            
        #affect attributes
        self.author  = postAuthor
        self.date    = postDate
        self.key     = postKey
        self.message = postMsg
        


    def debug(self):
        print "Author :"  , self.author
        print "Date   :"  , self.date
        print "Key    :"  , self.key
        print "message:\n", self.message
        

class Topic:
    """This class to describe a topic"""
    def __init__(self, url):
        self.url = url
        self.pages = []
        self.currentPage = 1
        self.postsDic = {}
        self.posts = []

    def debug(self):
        for post in self.posts:
            post.debug()
            print "---------------------------------------"

    def openPage(self):
        return BeautifulSoup(urllib2.urlopen(self.url + "&p=" + str(self.currentPage)))

    def updatePageNumber(self):
        self.pages = []
        self.pages.append(self.currentPage)
        page = self.openPage()
        level0 = page.find('p','pagelink conl')
        for level1 in level0.findAll('a'):
            try:
                self.pages.append(int(level1.string))
            except:
                print "cannot convert", level1.string, "to int"

    def extractHtmlPostInCurrentPage(self):
        page = self.openPage()
        code = page.findAll("div","blockpost rowodd blockpost1")+page.findAll("div","blockpost roweven")+page.findAll("div","blockpost rowodd")
        return code
            
    def newPost(self):
        newPost = []
        self.updatePageNumber()                
        for page in self.pages:
            if (page >= self.currentPage):
                self.currentPage = page
                htmlCodes = self.extractHtmlPostInCurrentPage()
                for htmlCode in htmlCodes:
                    post = Post(htmlCode)
                    if self.postsDic.has_key(post.key) is False:
                        newPost.append(post)
                        post.debug()
        return newPost
            


    def savePost(self):
        newPosts = self.newPost()
        for post in newPosts:
            self.postsDic[post.key] = post
            self.posts.append(post)
            

    def sendMessage(self, message):
        # le fichier 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("login","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()
        
        tid = self.url.split('=')[1] # la première ligne contenant l'addresse du topic.
        print tid
        fp = ClientCookie.urlopen("http://forum.ubuntu-fr.org/post.php?tid="+tid)
        forms = ClientForm.ParseResponse(fp)
        fp.close()
        
        form = forms[1]
        form["req_message"]  = message
        fp = ClientCookie.urlopen(form.click())
        fp.close()

                



def main():
    floodKey = "/tdct "

    TdlvT  = Topic("http://forum.ubuntu-fr.org/viewtopic.php?id=420632")
    TdcT   = Topic("http://forum.ubuntu-fr.org/viewtopic.php?id=449666")

    TdlvT.savePost()
    TdlvT.debug()

    while True:
        newPost = TdlvT.newPost()
        if type(newPost) is not types.NoneType:

            for post in  newPost:
                post.debug
                if floodKey in post.message:
                    messageInit = post.message.replace(floodKey,"")
            
                    pars = HTMLParser.HTMLParser()
                    message = str(pars.unescape(post.author)) + str(", membre de la communauté des lèves-tôt souhaite communiquer \n[quote]") + str(pars.unescape(messageInit)) + str("[/quote]\nMerci.")
                    print "Message !"
                    print message
                    TdcT.sendMessage(message)
        time.sleep(120)

main()

Hors ligne