Outils pour utilisateurs

Outils du site


fortunes-fr

fortunes-fr

Sous Linux, fortunes est un petit programme en ligne de commande qui affiche des citations. On s'en sert souvent pour en afficher quand on ouvre un nouveau terminal, ou encore en économiseur d'écran (l'économiseur d'écran Phosphor dans xscreensaver).

Pour l'installer:

sudo apt install fortune-mod

Par défaut, les citations sont anglophones. On peut en installer en français:

sudo apt install fortunes-fr

Pour lancer le programme, tapez simplement:

fortune

On peut aussi supprimer les anglophones:

sudo apt remove fortunes-min
sudo rm /usr/share/games/fortunes/*.dat

Mais le fichier de fortunes francophone a été mis à jour pour la dernière fois en 2004. C'est dommage.

J'ai décider de scraper le site citation-celebre.com pour construire un nouveau fichier de fortunes.

Nouvelle citations

Voici donc un nouveau fichier de fortunes contenant plus de 80 000 citations en français issues du site web citation-celebre.com.

Installation

  1. Récupérez le fichier: http://sebsauvage.net/files/fortune/citation-celebre.7z (2 Mo, md5 b0e056e0f78434c35659b9889061286f) et décompressez-le.
  2. Virez les citations existantes si vous le souhaitez: sudo rm -rf /usr/share/games/fortunes/*
  3. Copiez ces nouvelles citations: sudo cp citation-celebre.com* /usr/share/games/fortunes
  4. Et voilà, vous pouvez profiter des citations: fortune

Le programme

Vous pouvez lancer le programme suivant pour scraper vous-même les citations sur le site, mais je vous demande, si c'est possible, d'éviter. De préférence, utilisez le fichier de citation que j'ai déjà créé. Cela évitera de charger inutilement le site web.

Cliquez pour afficher le programme

Cliquez pour afficher le programme

scraper-citation-celebre.py
#!/usr/bin/python
# coding: utf-8
''' 
scraper-citation-celebre.py
Version 2019-11-07
 
Récupère des citations de http://www.citation-celebre.com/liste-citation
et créé un fichier compilable par fortunes (sous Linux) 
 
Une fois ce script terminé, faire: strfile citation-celebre.com
Cela va créer le fichier citation-celebre.com.dat
et copier les deux fichiers : sudo cp citation-celebre.com* /usr/share/games/fortunes
 
Ce script est interruptible à tout moment. Vous pouvez l'arrêter et le relancer:
Il reprendra là où il en était.
'''
import lxml.html,requests,codecs,sys,UserDict,os,os.path
from sqlite3 import dbapi2 as sqlite
 
class dbdict(UserDict.DictMixin):
    ''' dbdict, a dictionnary-like object for large datasets (several Tera-bytes) '''
    def __init__(self,dictName):
        self.db_filename = "dbdict_%s.sqlite" % dictName
        if not os.path.isfile(self.db_filename):
            self.con = sqlite.connect(self.db_filename)
            self.con.execute("create table data (key PRIMARY KEY,value)")
        else:
            self.con = sqlite.connect(self.db_filename)
    def __getitem__(self, key):
        row = self.con.execute("select value from data where key=?",(key,)).fetchone()
        if not row: raise KeyError
        return row[0]
    def __setitem__(self, key, item):
        if self.con.execute("select key from data where key=?",(key,)).fetchone():
            self.con.execute("update data set value=? where key=?",(item,key))
        else:
            self.con.execute("insert into data (key,value) values (?,?)",(key, item))
        self.con.commit()
    def __delitem__(self, key):
        if self.con.execute("select key from data where key=?",(key,)).fetchone():
            self.con.execute("delete from data where key=?",(key,))
            self.con.commit()
        else:
             raise KeyError
    def keys(self):
        return [row[0] for row in self.con.execute("select key from data").fetchall()]
 
pagecache = dbdict('pages-citations')
file = codecs.open("citation-celebre.com", "w", "utf-8")
npage = 1
 
def cleanString(s):
    return s.replace("\t",' ').replace("\r\n",' ').replace("\r",' ').replace("\n",' ').replace('  ',' ')
 
while npage < 8069:
    url = u'http://www.citation-celebre.com/liste-citation?page=%d' % npage
    if url not in pagecache:        
        sys.stderr.write("Récupération page %d... \n" % npage)
        page = requests.get(url)
        pagecache[url]=page.content.decode('utf-8')
    pagedata = pagecache[url]
    tree = lxml.html.fromstring(pagedata)
    citations = tree.xpath('//div[@class="citation"]')
    for citation in citations:
        # Extraction des citations de la page:
        texte = citation.xpath('.//p[@class="laCitation"]/q/a')[0].text_content().strip()
        auteur = ""  # Attention l'auteur peut être vide.
        auteurElement = citation.xpath('.//div[@class="auteur"]//div[@class="additionalInformation"]//a[@class="auteurLien"]')
        if auteurElement :
            auteur = cleanString(auteurElement[0].text_content().strip())
        # Écriture dans le fichier.
        if u"► Lire la suite" in texte:
            continue  # On zappe les citations trop longues.
        file.write("%s\n" % texte)
        if len(auteur)>0: file.write("    -- %s\n" % auteur)
        file.write("%\n")
    npage += 1
file.close()


Voir aussi: https://sebsauvage.net/links/?gKjK1A

Une citation chaque fois que vous ouvrez un terminal

Ajoutez à la fin de votre fichier ~/.bashrc:

fortune

Ou pour faire plus coloré, après un sudo apt intall lolcat, ajoutez:

fortune | lolcat

ou éventuellement un

fortune | cowsay

Source potentielles (à explorer/aspirer)

fortunes-fr.txt · Dernière modification: 2019/11/08 20:48 par sebsauvage