menu

Afficheur de VDM

Il y a assez longtemps, je m'étais amusé à créer un script qui récupérait les quotes du célèbre site VDM (Vie de Merde).

Je l'avais fait avec les connaissances que j'avais à l'époque.

Je partais du principe que les quotes étaient récupérés via urllib2 puis stockés dans un fichier texte pour être ensuite affichées une à une dans une simple console. Mais j'avais quand même un goût d'inachevé...

Voilà l'ancien script

# -*- coding:Utf-8 -*-

import urllib2
from HTMLParser import HTMLParser

def lire():
    fichier = open("vdm.txt", "r+")
    vdm = fichier.readlines()
    taille = len(vdm)

    try:
        print "\n", vdm[taille-1]
        size =  sum(len(mot) for mot in vdm) - len(vdm[taille-1])
        fichier.truncate(size)

    except:
        data = urllib2.urlopen("http://www.viedemerde.fr/aleatoire")
        htmlSource = data.read()
        parser = MyHTMLParser()
        parser.feed(htmlSource)
        ecrire()
        lire()

    fichier.close()

def ecrire():
    fichier = open("vdm.txt", "a+")

    i = 0
    while i < len(vdm):
        if "VDM" in vdm[i]: vdm[i] += '\n'
        fichier.write(vdm[i])
        i+=1

    fichier.close()

class MyHTMLParser(HTMLParser):
    flag = False

    def handle_starttag(self, tag, attrs):
        if tag == "a":
            for name, value in attrs:
                if name == "class" and value == "fmllink":
                    self.flag = True

    def handle_endtag(self, tag):
        if tag == "a":
            self.flag = False

    def handle_data(self, data):
        if self.flag and data !=".":
            vdm.append(data)

vdm = []

try:
    lire()
except:
    ecrire()

...

Et voici le nouveau.

# -*- coding:Utf-8 -*-
import urllib2 as get

vdm_start = 'class="fmllink">Aujourd'
vdm_end = '</a></p><div class="date">'

def get_quote():
        quote = get.urlopen('http://www.viedemerde.fr/aleatoire').read()
        quote = [a.split(vdm_end)[:-1] for a in quote.split(vdm_start)[1:]]
        for i, item in enumerate(quote):
                item = [a.split('>')[1] if '>' in a else a for a in item[0].split('</a><a')]
                quote[i] = 'Aujourd'+''.join(item)
        return quote

with open('vdm.txt', 'r') as f: vdm= f.read()
vdm = vdm.split('\n') if vdm else get_quote()
while not raw_input(''):
        print '\n',vdm.pop(0),'\n'
        if not vdm: vdm = get_quote()

Non seulement le nouveau possède beaucoup moins de lignes mais en plus il en fait plus.

Le script tourne sous Linux, par contre, sous Windows, la console ne gère pas les accents, il faudra réencoder les caractères, et de ne pas oublier de modifier le chemin du fichier vdm.txt

A noter que le second script lèvera une erreur si vous l'exécutez pour la première fois sans avoir crée au préalable le fichier vdm.txt. Donc pensez à le créer :)

Posted 28 January 2015

Astuce | Site | Art | Vidéo | Musique | Prog | Image