Weboob (Web Outside Of Browsers) est un ensemble d’applications interagissant avec des sites web.
Pour fêter la nouvelle année, l’équipe de développeurs de Weboob a mis les bouchées doubles pour réussir la sortie d’une nouvelle version. Cette version 1.2 est l’aboutissement d’un travail très actif durant tout le cycle de développement, avec plus de 1 400 commits en onze mois, écrits par 29 contributeurs différents.
En plus de fournir une bibliothèque permettant de grandement simplifier l’extraction de données des sites, Weboob compte aujourd’hui 220 modules prêts à l’emploi pour accéder à de nombreux sites Web sans passer par un navigateur standard.
Sans être exhaustive, la suite de la dépêche vous propose de découvrir quelques nouveautés de cette version, que ce soit pour les utilisatrices et utilisateurs, ou les développeuses et développeurs.
Sommaire
- Applications graphiques et passage à Qt 5
- Banques, factures, que du bon
- Logements
- GitLab CI
- Du côté des développeuses
- Petites nouvelles
- Contributeurs
Applications graphiques et passage à Qt 5
Si au niveau des fonctionnalités les applications graphiques n’ont pas toutes évolué, on peut noter, en revanche, le passage de toutes les applications de Qt 4 vers Qt 5.
Au niveau des améliorations notables, on peut citer les applications QCineoob et QCookboob qui sont désormais plus claires en affichant les résultats de recherches, gagnent en clarté au niveau des différents onglets et s’enrichissent d’un nouveau raccourci clavier (Alt
+ ←
) pour revenir en arrière.
Enfin, la nouvelle application QBoobLyrics fait son apparition. Elle permet de chercher et afficher des retranscriptions de textes de chansons.
Banques, factures, que du bon
Budget Insight (BI), avec plus de 60 % des changements de cette version, est le plus gros contributeur de Weboob, principalement sur les connecteurs bancaires et de factures.
Le projet a bénéficié d’une refonte de la gestion des virements, qui sont proposés professionnellement par BI à travers leur API, et le portage d’une partie des connecteurs bancaires vers la nouvelle capability CapBankTransfer.
Il est donc aisé, à partir de l’application boobank, d’initier des virements SEPA vers les bénéficiaires internes et externes.
Cela se retrouve également dans l’application mobile (propriétaire) Budgea :
Dans les autres nouveautés, les informations concernant votre conseiller bancaire sont également récupérées, à travers la commande advisor
: une raison de moins de vous connecter au site de votre banque !
Logements
Weboob suit les grandes tendances, y compris le boom de l’immobilier et les difficultés pour trouver une location dans certaines régions de France. Les applications QFlatBoob et flatboob affichent désormais le prix au mètre carré des logements, et gagnent un peu en ergonomie quand des champs sont manquants (oui, il existe des annonces immobilières sans la surface).
GitLab CI
Buildbot était utilisé jusqu’à présent pour faire tourner les tests unitaires des modules de Weboob. Les outils existants étaient devenus obsolètes et peu utilisés, et les builders n’étaient plus tous maintenus et disponibles. Du coup, les tests unitaires étaient peu utilisés et peu surveillés.
Avec la migration depuis le Redmine sur symlink.me vers un tout nouveau GitLab, l’intégration continue a été repensée pour utiliser GitLab CI.
Dorénavant, un maximum de tests unitaires sera effectué à chaque commit. Ceci implique :
- de vérifier que la dernière branche de développement compile ;
- de vérifier que les modules passent un certain nombre de règles de codage et que les modules ont tous des icônes et des tests unitaires ;
- enfin, de faire tourner le plus de tests unitaires possible sur Weboob et les modules, en générant un rapport de couverture de code.
Pour ce dernier point, un des gros changements apporté est la possibilité de faire tourner un maximum de tests sans identifiants pour le module à tester, en passant automatiquement les tests nécessitant des identifiants. Il est bien entendu possible de spécifier un fichier de back‐end à utiliser pour fournir des identifiants à certains modules et faire tourner encore plus de tests unitaires.
En plus de ces tests unitaires centralisés, chaque contributeur est invité à lancer sa propre instance de tests chez lui, pour les modules ne pouvant fonctionner sans identifiants spécifiques, afin d’envoyer le maximum de tests et de fournir une visualisation Web permettant de suivre en un coup d’œil l’évolution du statut des modules au cours du temps.
Du côté des développeuses
Héritage des modules, navigateurs et pages
Weboob, dans sa volonté de conquérir le monde, Minus, et de lui imposer sa vision sexiste de plus en plus d’utilisat[eur][rice]s, avait besoin dans certains cas de gagner en lisibilité quant au nommage de ses modules.
La question qui se posait était la suivante : comment gérer proprement les modules cic et credit mutuel qui partagent exactement le même moteur de site (et bien d'autres encore, mais il fallait bien choisir un exemple concret pour que la famille Michu dans son ensemble [père, mère et enfants de tous sexes et de tous âges] comprenne), dont les sites sont quasi-identiques, cela, sans dupliquer de code ?
Une réponse aurait pu être de regrouper l’analyse de ces deux sites dans un seul module, mais, malheureusement, cela posait d’autres questions. Il faut supprimer l’un des modules, lequel ? Comment indiquer aux utilisat[eur][rice]s de ce module (disons CIC) supprimé, d’utiliser l’autre ? Et, surtout, comment un[e] utilisat[eur][rice] lambda nommé[e] M[onsieur][adame] Michu, saura‐t‐[il][elle] qu’[il][elle] doit utiliser le module (disons CreditMutuel) pour regarder ses comptes domiciliés au CIC ?
La réponse que nous avons trouvée est de passer par l’héritage entre back‐ends, que ce soit au niveau des classes héritées de modules, browsers et pages.
Les classes AbstractModule, AbstractBrowser et AbstractPage ont ainsi vu le jour !
Par exemple, le fichier module.py
du CIC ne contient maintenant plus que ça (commentaires et importations mis à parts) :
class CICModule(AbstractModule, CapBankTransfer, CapContact):
NAME = 'cic'
MAINTAINER = u'Julien Veyssier'
EMAIL = 'julien.veyssier@example.fr'
VERSION = '1.2'
DESCRIPTION = u'CIC'
LICENSE = 'AGPLv3+'
CONFIG = BackendConfig(ValueBackendPassword('login', label='Identifiant', masked=False),
ValueBackendPassword('password', label='Mot de passe'))
BROWSER = CICBrowser
PARENT = 'creditmutuel'
def create_default_browser(self):
browser = self.create_browser(self.weboob, self.config['login'].get(), self.config['password'].get())
browser.new_accounts.urls.insert(0, "/mabanque/fr/banque/comptes-et-contrats.html")
return browser
L’introduction de ces nouveautés a aussi permis de gérer différemment les classes génériques qui permettaient de faciliter l’analyse de sites de journaux numériques. Jadis, ces facilitateurs étaient placés dans la partie core de Weboob, partie qui ne pouvait être mise à jour (en cas de bogue d’errance de développement dans les sites scrappés) qu’avec la publication d’une nouvelle version de (ne vous en cachez pas) votre outil préféré.
Dorénavant, il suffit d’étendre un nouveau module spécialement créé pour l’occasion et qui n’implémente aucune capability ; pour ne pas le nommer genericnewspaper, afin de profiter de ces facilitateurs. Ce dernier, comme tous les autres modules, peut être mis à jour, alléluia, via un simple weboob update
.
Par exemple, le module minutes20
(pour gérer le journal 20 minutes), se contente d’hériter de GenericNewspaper
, de configurer l’adresse URL d’un article, les expressions XPath des articles, et c’est à peu près tout.
Prise en charge des versions de Python
Comme annoncé lors de la dernière sortie, Weboob 1.1 était la dernière version à prendre en charge Python 2.6. Python 2.7 est donc la seule version prise en charge par Weboob 1.2.
Rappelons que ce sont les anciens modules utilisant la bibliothèque mechanize (à travers weboob.deprecated.browser
) qui retiennent Weboob à Python 2.
Tous les nouveaux modules (depuis Weboob 1.0) sont écrits avec Browser 2 (qui utilise la bibliothèque requests, compatible avec Python 3). D’anciens modules sont également portés vers Browser 2 au fil de l’eau.
En vue d’un passage à Python 3, les modules utilisant toujours Browser 1 à l’été 2017 seront simplement supprimés (car ils ne sont de toute façon probablement plus maintenus), à l’occasion de la sortie du futur Weboob 1.3.
Le passage total de Weboob et ses modules à Python 3 pourra ensuite se faire, prévu pour Noël 2017. Dès lors, plus aucune version de Python 2 ne sera prise en charge.
Améliorations du navigateur
Le projet ne le met pas toujours en avant, mais il est tout à fait possible d’utiliser Weboob comme une bibliothèque de scraping. En termes de fonctionnalités, le navigateur (Browser) n’a rien à envier à des projets qui pourraient venir spontanément en tête d’un développeur ou d’une développeuse souhaitant réaliser rapidement un script pour lire le contenu d’un site.
Les (le plus souvent mauvaises) expériences dans le scraping du projet permettent d’avoir des fonctionnalités déjà intégrées pour un nouveau développeur. Exemple parmi d’autres, mais qui a été rencontré durant le cycle de cette version, certains serveurs ont mis en place des protections anti‐scraping se basant sur l’ordre des paramètres de la requête HTTP POST envoyée.
PartialHTMLPage
Certains sites retournent des réponses HTML partielles (au travers de requêtes XMLHttpRequest), à insérer au milieu de documents existants. Ces réponses peuvent contenir plusieurs balises racines, ce qui fait que la page retournée n’est pas du HTML.
Le type de page PartialHTMLPage a été ajouté pour gérer ces réponses automatiquement.
CacheMixin
L’APIBrowser est une classe de Browser (introduite dans Weboob 1.1) dédiée aux API Web JSON, plutôt qu’aux pages HTML crados.
Une nouvelle classe mixin a été ajoutée, CacheMixin, qui possède un cache (optionnel) pour éviter de refaire les mêmes requêtes. On peut configurer l’APIBrowser pour retourner la réponse mise en cache dès que la même requête est faite, sans aucune transmission réseau, ou bien on peut le configurer pour laisser le site décider, grâce à l’utilisation des en‐têtes ETag
et If-Modified-Since
.
Une fois qu’on a ajouté le mixin à l’héritage, pour l’utiliser, il suffit de remplacer les appels à open par open_with_cache.
Débogage simplifié
Si les applications Weboob fournissent déjà des options permettant le débogage fin pour un utilisateur ou un développeur, il n’était pas toujours simple de déboguer en production des erreurs aléatoires sur des pages. Afin de simplifier la vie des développeurs et développeuses, il est désormais possible de configurer l’enregistrement des pages HTML lues par le navigateur dans la configuration d’un back‐end, il suffit d’ajouter l’attribut _debug_dir
.
Encodeur JSON
Un encodeur JSON a été ajouté (dans le module weboob.tools.json
) pour pouvoir convertir les objets Weboob en JSON :
json.dumps(objet_weboob, cls=weboob.tools.json.WeboobEncoder)
Il permet de simplifier la vie des développeurs souhaitant exporter les résultats obtenus par Weboob (notamment pour l’exposer sur des applications Web).
Petites nouvelles
À l’occasion de la rédaction d’un article tutoriel pour GNU/Linux Magazine France (date de parution encore inconnue), le site Linuxjobs a gagné son module Weboob. Il rejoint d’autres sites de recherche d’emploi, comme Apec, Lolix, Monster, Pôle Emploi…
Si vous voulez en savoir plus sur le projet et que vous vous rendez au FOSDEM 2017, sachez qu’une conférence aura lieu sur Weboob le dimanche à midi en salle UD2.120 (Chavanne).
Enfin, dans la catégorie des utilisations externes de Weboob, nous vous avons souvent parlé dans les dépêches de KMyMoney. Le greffon Weboob (écrit par les développeurs de Weboob) est désormais officiel et intégré dans la dernière version.
Contributeurs
Merci aux contributeurs qui ont participé à cette version :
- Adrien Clerc ;
- Baptiste Delpey ;
- Benjamin Bouvier ;
- Benjamin Carton ;
- Bernard Guyzmo Pratz ;
- Cédric Félizard ;
- Christophe Lampin ;
- Edouard Lambert ;
- Edouard Lefebvre du Prey ;
- Florent Fourcot ;
- François Revol ;
- James Galt ;
- Jean Walrave ;
- Johann Broudin ;
- Jonathan Schmidt ;
- Julien Danjou ;
- Julien Veyssier ;
- Laurent Bachelier ;
- Matthieu Weber ;
- Neil Armstrong ;
- Oleg Plakhotniuk ;
- Phyks (Lucas Verney) ;
- Roger Philibert ;
- Roland Mas ;
- Romain Bignon ;
- Simon Lipp ;
- Vincent Ardisson ;
- Vincent Paredes ;
- ZeHiro.
Weboob est un projet qui vit grâce à ses contributeurs. Si vous souhaitez l’améliorer et que vous connaissez le Python (ou pas, des besoins sur la documentation et la qualité des icônes se font sentir), n’hésitez pas à contribuer.
Aller plus loin
- Site Web (770 clics)
- Liste complète des changements (197 clics)
- Installation (255 clics)
- Applications (258 clics)
- Documentation pour le développement (154 clics)
- Association Weboob (325 clics)
# Budget Insight recrute
Posté par moules . Évalué à 10.
Être payé pour contribuer à weboob ? C'est possible ! Je profite de la dépêche pour annoncer que Budget Insight, premier contributeur sur les connecteurs bancaires, recrute à Paris et au Luxembourg.
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 8.
Ce commentaire a été supprimé par l’équipe de modération.
# Pypi
Posté par vrd . Évalué à 9.
Une chance de voir le projet sur https://pypi.python.org ? Ca simplifierait l'install d'un de mes projets ;)
# A quand une version web?
Posté par devnewton 🍺 (site web personnel) . Évalué à 10.
Weboob a l'air d'un très bon logiciel, à quand une version utilisable dans un browser?
Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.
[^] # Re: A quand une version web?
Posté par Bakiraka . Évalué à -10.
Est-tu en train de troller ou c'est une inside joke ?
Weboob = Web Outside of Browsers. Le nom est suffisamment explicite.
[^] # Re: A quand une version web?
Posté par Lutin . Évalué à 9.
Weboobiab = Web outside of browser inside a browser
# Super idée mais rien ne marche
Posté par Hugues Max . Évalué à 0.
ça fait déja plusieurs fois que je teste Weboob en particulier sur la partie banque - j'ai essayé sur le Credit Agricole, Credit Mutuel, Boursorama et Payal - mais rien ne marche correctement :-(
j'ai écris un programme en Perl pour faire le même job avec LWP, pour le crédit Mutuel ( pour ma boite ) et c'est la misère a maintenir correctement. ( javascript à tous les étages )
Je comprend bien le problème. Le banque ajoute tout le temps des sécurités et change leur site web.
Si on veut avoir ses propres infos automatiquement il y a les abonnements SEPA mais c'est hors de prix pour l'usage.( entre 80€ et 100€/mois + le dev. )
je change de banque si on me propose ça avec l'abonnement de base !!!!
[^] # Re: Super idée mais rien ne marche
Posté par laurentb (site web personnel) . Évalué à 3.
Quelle version as-tu utilisé, et as-tu les modules à jour (weboob update) ?
Sachant que nous sommes beaucoup à utiliser les modules bancaires - sans compter les milliers de clients de Budget Insight - c'est étonnant.
# Ok
Posté par Hugues Max . Évalué à 1.
j'avais suivi le lien http://weboob.org/install tout simplement
visiblement ça install la version 1. et il y a rien qui fonctionne ( debian 8 )
j'ai viré la 1 et j'ai installé la 1.2 avec le tgz et c'est beaucoup mieux
Credit mutuel et Credit agrole fonctionne et c'est déjà très fort - je ne sais pas si j'ai accès aux détails des prélèvements automatiques …
Pour paypal j'ai ce messae d'erreur
Bug(paypal): Could not find an available JavaScript runtime ( il doit manquer qlq chose )
2017-01-19 09:46:36,142:DEBUG:urllib3.connectionpool:1.2:connectionpool.py:362:_make_request "GET /auth/createchallenge/07bd9aea1aba335c/challenge.js HTTP/1.1" 200 899
2017-01-19 09:46:36,145:DEBUG:backend.paypal.browser:1.2:browsers.py:678:internal_callback Unable to handle https://www.paypal.com/auth/createchallenge/07bd9aea1aba335c/challenge.js
2017-01-19 09:46:36,145:DEBUG:bcall:1.2:bcall.py:97:backend_process <Backend 'paypal'>: Called function <bound method Boobank._do_complete of <weboob.applications.boobank.boobank.Boobank object at 0x7f4490180690>> raised an error: RuntimeUnavailableError('Could not find an available JavaScript runtime.',)
donc je me ravise sur mon jugement hâtif.
[^] # Re: Ok
Posté par moules . Évalué à 3.
Pour PayPal, comme ils mettent des « challenges » javascript pour éviter le scrapping, il est nécessaire d'installer PyExecJS (via pip), ainsi qu'un runtime JS (typiquement nodejs).
# Freedos
Posté par macadoum . Évalué à -5.
Et la version DOS,c'est pour quand ? :)
# Ironie qui tombe à plat...
Posté par jpm . Évalué à -4.
Quel est la motivation des formulations au féminin comme « Du côté des développeuses » et autre expressions multi-genrées comme « utilisat[eur][rice] » ? Au delà du nom discuté de ce logiciel, c'est la volonté de la « communauté weboob » d'assumer son côté gros beauf sexiste ?
# Foutage de gueule
Posté par jpm . Évalué à -8.
http://www.comparabanques.fr/interview-77-interview-exclusive-de-clement-coeurdeuil-ceo-de-budget-insight.php
« Bien entendu les traitements informatiques réalisés par Budget Insight sont déclarés auprès de la CNIL et l’application est en lecture seule, cela signifie qu’il n’est pas possible de réaliser des transferts d’argent via Budget Insight. »
_
http://www.clubic.com/application-mobile/article-727585-1-gestion-comptes-bancaires-confiance-applications-tierces.html
_
« Pour M. Coeurdeuil, une intrusion au sein de ses serveurs serait tragique : « Pour nous c'est fini, on n'existerait plus. Ce serait très problématique ». Il précise que les données des utilisateurs sont hébergées en France, chez OVH. Budgea ne permet pas d'effectuer de virement. « Nous sommes pour des systèmes en lecture », explique-t-il en ajoutant que les différents acteurs du secteur planchent sur un agrégateur global. »
[^] # Re: Foutage de gueule
Posté par jpm . Évalué à -6.
Maintenant qu'à l'appel du chef tout BI a moinssé les citations du co-chef - je m'attendais à plus, il y a du mou dans la corde à nœuds ? Il reste que de deux choses l'une : où l'argument était moisi au départ (« on est super secure, car on est en lecture seule »), ou il ne l'était pas. Il se trouve qu'il l'était : si la sécurité du bouzin est trouée ce n'est certainement pas à cause de cela. Mais alors pourquoi l'utiliser comme argument ? Incompétence ou poudre aux yeux ? L'avenir pourrait nous en dire plus, à défaut…
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.