From 4522b24a1aa4495a0ac5e6acbee8b8f0925f38f8 Mon Sep 17 00:00:00 2001 From: Laurent Bachelier Date: Mon, 22 Jul 2013 12:51:11 +0200 Subject: [PATCH] sgpe: Working account list --- modules/societegenerale/sgpe/browser.py | 9 +++++---- modules/societegenerale/sgpe/pages.py | 26 +++++++++++++++++++++---- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/modules/societegenerale/sgpe/browser.py b/modules/societegenerale/sgpe/browser.py index a9c022c2..98a5a1ea 100644 --- a/modules/societegenerale/sgpe/browser.py +++ b/modules/societegenerale/sgpe/browser.py @@ -29,11 +29,11 @@ __all__ = ['SGProfessionalBrowser', 'SGEnterpriseBrowser'] class SGPEBrowser(BaseBrowser): PROTOCOL = 'https' - ENCODING = None + ENCODING = 'ISO-8859-1' def __init__(self, *args, **kwargs): self.PAGES = OrderedDict(( - ('%s://%s/Pgn/.+PageID=Compte&.+' % (self.PROTOCOL, self.DOMAIN), AccountsPage), + ('%s://%s/Pgn/.+PageID=SoldeV3&.+' % (self.PROTOCOL, self.DOMAIN), AccountsPage), ('%s://%s/' % (self.PROTOCOL, self.DOMAIN), LoginPage), )) BaseBrowser.__init__(self, *args, **kwargs) @@ -65,12 +65,13 @@ class SGPEBrowser(BaseBrowser): raise BrowserIncorrectPassword() def accounts(self): - self.location('/Pgn/NavigationServlet?MenuID=%s&PageID=Compte&Classeur=1&NumeroPage=1&Origine=Menu' % self.MENUID) + self.location('/Pgn/NavigationServlet?PageID=SoldeV3&MenuID=%s&Classeur=1&NumeroPage=1' % self.MENUID) def get_accounts_list(self): if not self.is_on_page(AccountsPage): self.accounts() - + assert self.is_on_page(AccountsPage) + return self.page.get_list() class SGProfessionalBrowser(SGPEBrowser): diff --git a/modules/societegenerale/sgpe/pages.py b/modules/societegenerale/sgpe/pages.py index 91daea2c..e2ccdae5 100644 --- a/modules/societegenerale/sgpe/pages.py +++ b/modules/societegenerale/sgpe/pages.py @@ -19,11 +19,15 @@ from logging import error import re -from weboob.tools.json import json - -from weboob.tools.mech import ClientForm +from decimal import Decimal from weboob.tools.browser import BasePage +from weboob.tools.json import json +from weboob.tools.mech import ClientForm +from weboob.tools.misc import to_unicode + +from weboob.capabilities.bank import Account +from weboob.tools.capabilities.bank.transactions import FrenchTransaction from ..captcha import Captcha, TileError @@ -81,4 +85,18 @@ class LoginPage(SGPEPage): class AccountsPage(SGPEPage): - pass + def get_list(self): + table = self.parser.select(self.document.getroot(), '#tab-corps', 1) + for tr in self.parser.select(table, 'tr', 'many'): + tdname, tdid, tdagency, tdbalance = [td.text_content().strip() + for td + in self.parser.select(tr, 'td', 4)] + # it has empty rows - ignore those without the necessary info + if all((tdname, tdid, tdbalance)): + account = Account() + account.label = to_unicode(tdname) + account.id = to_unicode(tdid.replace(u'\xa0', '').replace(' ', '')) + account._agency = to_unicode(tdagency) + account.balance = Decimal(FrenchTransaction.clean_amount(tdbalance)) + account.currency = account.get_currency(tdbalance) + yield account