Weboob s’offre une nouvelle version pour fêter la nouvelle année

Posté par  . Édité par Davy Defaud, palm123, Nils Ratusznik, ZeroHeure et Benoît Sibaud. Modéré par patrick_g. Licence CC By‑SA.
Étiquettes :
45
12
jan.
2017
Internet

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

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 : capture d’écran de 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

  • # Budget Insight recrute

    Posté par  . É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  . Évalué à 8.

      Ce commentaire a été supprimé par l’équipe de modération.

  • # Pypi

    Posté par  . É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  (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.

  • # Super idée mais rien ne marche

    Posté par  . É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  (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  . É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  . É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  . Évalué à -5.

    Et la version DOS,c'est pour quand ? :)

  • # Ironie qui tombe à plat...

    Posté par  . É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  . É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  . É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.