diff --git a/modules/boursorama/pages/card_history.py b/modules/boursorama/pages/card_history.py new file mode 100644 index 00000000..20fc982c --- /dev/null +++ b/modules/boursorama/pages/card_history.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 2011 Gabriel Kerneis +# Copyright(C) 2009-2011 Romain Bignon +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +import re + +from weboob.tools.browser import BasePage +from weboob.tools.capabilities.bank.transactions import FrenchTransaction + + +__all__ = ['CardHistory'] + + +class Transaction(FrenchTransaction): + PATTERNS = [(re.compile('^(ACHAT|PAIEMENT) CARTE (?P
\d{2})(?P\d{2})(?P\d{2}) (?P.*)'), + FrenchTransaction.TYPE_CARD), + (re.compile('^RETRAIT DAB (?P
\d{2})(?P\d{2})(?P\d{2}) (?P.*)'), + FrenchTransaction.TYPE_WITHDRAWAL) + ] + + +class CardHistory(BasePage): + def get_operations(self): + for form in self.document.xpath('//form[@name="marques"]'): + for tr in form.xpath('.//tbody/tr'): + if tr.attrib.get('class', '') == 'total' or 'style' in tr.attrib: + continue + + tds = tr.xpath('./td') + date = self.parser.tocleanstring(tds[0]) + label = self.parser.tocleanstring(tds[1]) + amount = self.parser.tocleanstring(tds[2]) + + try: + _id = tr.xpath('.//input[@type="hidden"]')[0].attrib['id'].split('_')[1] + except (KeyError,IndexError): + _id = 0 + + operation = Transaction(_id) + operation.parse(date=date, raw=label) + operation.set_amount(amount) + + yield operation + + def get_next_url(self): + return None