Au bout d’un projet libre : le code (3 / 4)
Du code, du code, DU COOOOOOOOOOOOOOOODE.
🌟🌟🌟
Cet article fait partie d’une série de 4 articles enthousiastes sur la création de projets libres :
🌟🌟🌟
Avant-propos
L’idée
Si vous avez bien suivi notre article précédent, vous devez avoir quelques idées en tête pour créer des applications. Choisissez-en une, définissez bien où vous voulez aller à long terme, et bichonnez le plan de vos premières briques.
Chacun ses passions. J’en ai plein, vraiment plein, mais pour aujourd’hui j’ai choisi d’en retenir deux : les flux RSS et les clients lourds. Ne jugez pas mes passions, je ne jugerai pas les vôtres, OK ?
Alors sans surprise, nous allons ici nous lancer dans la réalisation d’un lecteur de flux RSS. Étonnant, non ?
L’objectif
Nous ne ferons pas le lecteur RSS le plus puissant de tous les temps, en tout cas pas tout de suite. Nous allons plutôt nous atteler à faire un petit lecteur mignon, craquant, choupi, mais surtout… fonctionnel.
En effet, l’objectif principal de cette première mouture est d’avoir un programme à utiliser dans la vraie vie. Dans notre cas, notre lecteur affichera les articles par flux, et ouvrira les pages lorsque l’on cliquera dessus. Il ira chercher ses flux dans un fichier de configuration. Simple mais efficace.
D’un point de vue de l’interface, nous aurons un panneau à gauche avec la liste des flux, et à droite la liste des liens du flux sélectionné.
Les outils
Pour faire un petit lecteur de flux en Python, nous allons chercher des outils adaptés. C’est important, pour se simplifier la vie, de prendre le temps de trouver les modules qui nous permettront d’écrire moins de code et d’avoir de meilleures fonctionnalités.
Voici les principaux modules que nous utiliserons :
- GTK+3 pour l’interface,
- feedparser pour lire les flux,
- configparser pour le fichier de configuration.
Et c’est parti pour le show
Nous voilà embarqués dans un petit projet. Quelques minutes, quelques heures, quelques jours, cela dépendra de votre idée et de vos compétences. Mais plus vite vous aurez du code utilisé, plus vite vous trouverez la motivation de l’améliorer à long terme.
Vous pouvez lire le code de ce petit projet. Nous allons ici voir, commit par commit, comment arriver au résultat, pour mettre en avant le cheminement.
Commit n°1 : fenêtre
Première étape, et non des moindres : essayons déjà d’afficher une fenêtre. Cette étape se fait avec le code de base de GTK pour créer une application.
La fonction do_activate
est appelée lorsque run
est
lancé. Elle crée une fenêtre, assure que l’application se ferme lorsque
la fenêtre se ferme, et affiche la fenêtre.
Commit n°2 : liste de flux
Deuxième étape : ajoutons les flux à gauche !
Notre fenêtre ne sera plus une fenêtre standard, nous allons créer une classe Window
qui
en hérite. À la création, nous ajouterons un conteneur horizontal de boîtes, avec les flux
(Gtk.StackSidebar
) qui activeront les liens (Gtk.Stack
).
Commit n°3 : liste d’articles
On ajoute
la liste des liens.
Chaque liste de liens (correspondant à un flux) est un TreeView
,
et ces listes seront ajoutées dans la pile.
Commit n°4 : ouverture des liens
Pour
ouvrir les liens,
on utilise le module webbrowser
qui se charge d’ouvrir le
navigateur avec l’URL données. Le navigateur est ouvert lorsque la
ligne correspondant à l’article est activée.
Commit n°5 : lecteur de flux
On pourrait croire que
la lecture des flux
est une opération délicate. Il n’en est rien. Avec feedparser
,
il nous suffit de trois petites lignes pour changer notre jeu de test
en de vraies données.
Commit n°6 : configuration
À la place des données mises dans le code, il serait bon d’utiliser
un fichier de configuration.
Ce fichier de configuration sera un brave fichier INI, ouvert par
ConfigParser
. On remplacera ensuite les flux factices par
ceux du fichier de configuration.
Le format du fichier est simple. Les sections correspondent aux flux,
elles contiennent une seule clé : url
, qui contient sans
grande surprise l’URL du flux.
Commit n°7 : mise à jour automatique
Mettons à jour les flux !
Pour cela, nous utiliserons un timeout
gentiment proposé par GLib
,
et qui lancera la fonction update
toutes les 300 secondes.
La fonction update
ajoute les flux, comme c’était fait
avant une seule fois au lancement. Comme cette fonction est lancée
plusieurs fois, elle vide au préalable les flux, avant de les rajouter.
Commit n°8 : sélection du fil actif après mise-à-jour
Vider les flux, c’est bien, mais si le flux était sélectionné il ne le sera plus. Pas très pratique !
On a différentes solutions pour corriger cela. La plus simple est de garder en mémoire le flux sélectionné, de tout mettre à jour et de sélectionner le flux précédemment sélectionné.
Engrenage
Ce n’est pas le meilleur lecteur de flux RSS, nous sommes d’accord. Mais avouez que la prouesse est belle : nous avons avec moins de 70 lignes de code un programme fonctionnel, que nous pouvons utiliser au jour le jour sans trop souffrir.
À ce moment-là, vous êtes déjà à la meilleure place pour vous encourager. Forcez-vous quelques temps à utiliser votre création, et si tout se passe bien vous aurez des démangeaisons à chaque bug trouvé, à chaque fonctionnalité que vous aimeriez avoir.
Avec le temps, vous aurez un outil qui correspond à vos besoins. Cet outil devrait commencer à plus vous ressembler, et à moins ressembler aux autres outils du genre.
C’est une bonne base. Une bonne base avant la suite…