woob library

Package Version Last commit Python Version License

Woob (Web Outside of Browsers) is a library which provides a Python standardized API and data models to access websites.

Abstract

_images/arch.png

There are three main concepts:

  • Capabilities: This is a standardized interface to access a specific kind of website. It provides an unified API and standard datamodels;

  • Modules: A module is dedicated to a specific website. It can implements several capabilities (for example paypal module may implement CapBank to get bank informations, CapBankTransfer to initiate a transfer, CapProfile to get information about the customer, and CapDocument to get documents);

  • Backends: You can load a module several times, with different configurations. For example, if you have two PayPal accounts, you can create two backends of the same module with different credentials.

The main Woob class let configure new backends and do aggregated calls to every backends loaded with a specific capability.

For example, once several backends are loaded, you can call iter_accounts() and you’ll get accounts in the same Account data model for all backends implementing CapBank:

>>> from woob.core import Woob
>>> from woob.capabilities.bank import CapBank
>>> w = Woob()
>>> w.load_backends(CapBank)
{'societegenerale': <Backend 'societegenerale'>,
 'creditmutuel': <Backend 'creditmutuel'>}
>>> accounts = list(w.iter_accounts())
>>> print(accounts)
[<Account id='7418529638527412' label=u'Compte de ch\xe8ques'>,
 <Account id='9876543216549871' label=u'Livret A'>,
 <Account id='123456789123456789123EUR' label=u'C/C Eurocompte Confort M Roger Philibert'>]
>>> accounts[0].balance
Decimal('87.32')

Documentation

Examples

Banking aggregation

>>> from woob.core import Woob
>>> w = Woob()
>>> w.load_backend('societegenerale', 'soge',
...                config={'login': '1234', 'password': '5678'})
<Backend 'soge'>
>>> w.load_backend('creditmutuel', 'cm',
...                config={'login': '1234', 'password': '5678'})
<Backend 'cm'>
>>> for account in w.iter_accounts():
...     print(f'{account.id}@{account.backend} {account.label:>40} {account.balance} {account.currency_text}')
1234567789@soge                           Compte chèque 1528.39 €
DL00012345@cm          COMPTE CHEQUES 1 ROGER PHILIBERT 100.00 €
DD99874634@cm  PRET PRIMO ACCEDANT - ACHAT D'ANCIEN SEUL -9555.52 €
>>> account = w['cm'].get_account('DD99874634')
>>> account
<Loan id='DD99874634' label="PRET PRIMO ACCEDANT - ACHAT D'ANCIEN SEUL">
>>> account.subscription_date
date(2022, 6, 2)
>>> account.total_amount
Decimal('10000.0')
>>> account.next_payment_amount
Decimal('59.43')
>>> account.next_payment_date
date(2023, 3, 5)

See woob.capabilities.bank.base.