diff --git a/modules/freemobile/backend.py b/modules/freemobile/backend.py index e290d46a..ac6c9120 100644 --- a/modules/freemobile/backend.py +++ b/modules/freemobile/backend.py @@ -64,7 +64,9 @@ class FreeMobileBackend(BaseBackend, ICapBill): raise SubscriptionNotFound() def iter_history(self, subscription): - raise NotImplementedError() + with self.browser: + for history in self.browser.get_history(): + yield history def get_get_bill(self, subscription, id): raise NotImplementedError() diff --git a/modules/freemobile/browser.py b/modules/freemobile/browser.py index 2a80806f..6324fc7c 100644 --- a/modules/freemobile/browser.py +++ b/modules/freemobile/browser.py @@ -19,7 +19,7 @@ from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword -from .pages import HomePage, LoginPage, HistoryPage +from .pages import HomePage, LoginPage, HistoryPage, DetailsPage __all__ = ['Freemobile'] @@ -30,7 +30,8 @@ class Freemobile(BaseBrowser): ENCODING = None # refer to the HTML encoding PAGES = {'.*moncompte/index.php': LoginPage, '.*page=home': HomePage, - '.*page=suiviconso': HistoryPage + '.*page=suiviconso': DetailsPage, + '.*page=consotel_current_month': HistoryPage } def __init__(self, *args, **kwargs): @@ -74,14 +75,13 @@ class Freemobile(BaseBrowser): return None - # XXX : not implemented def get_history(self): if not self.is_on_page(HistoryPage): - self.location('/moncompte/index.php?page=suiviconso') + self.location('/moncompte/ajax.php?page=consotel_current_month', 'login=' + self.username) return self.page.get_calls() def get_details(self): - if not self.is_on_page(HistoryPage): + if not self.is_on_page(DetailsPage): self.location('/moncompte/index.php?page=suiviconso') test = self.page.get_details() return test diff --git a/modules/freemobile/pages/__init__.py b/modules/freemobile/pages/__init__.py index bd7ad218..dc2daf38 100644 --- a/modules/freemobile/pages/__init__.py +++ b/modules/freemobile/pages/__init__.py @@ -19,7 +19,7 @@ from .homepage import HomePage -from .history import HistoryPage +from .history import HistoryPage, DetailsPage from .login import LoginPage -__all__ = ['LoginPage', 'HomePage', 'HistoryPage'] +__all__ = ['LoginPage', 'HomePage', 'HistoryPage', 'DetailsPage'] diff --git a/modules/freemobile/pages/history.py b/modules/freemobile/pages/history.py index f7357345..e4f79f39 100644 --- a/modules/freemobile/pages/history.py +++ b/modules/freemobile/pages/history.py @@ -20,8 +20,10 @@ from weboob.tools.browser import BasePage from weboob.capabilities.bill import Detail +from datetime import datetime, date, time -__all__ = ['HistoryPage'] + +__all__ = ['HistoryPage', 'DetailsPage'] def convert_price(div): @@ -33,8 +35,7 @@ def convert_price(div): return 0. -class HistoryPage(BasePage): - calls = [] +class DetailsPage(BasePage): details = [] def on_loaded(self): @@ -68,8 +69,30 @@ class HistoryPage(BasePage): self.details.append(detail) - def get_calls(self): - return self.calls - def get_details(self): return self.details + + +class HistoryPage(BasePage): + calls = [] + + def on_loaded(self): + for tr in self.document.xpath('//tr'): + tds = tr.xpath('td') + if tds[0].text == None or tds[0].text == "Date": + pass + else: + detail = Detail() + mydate = date(*reversed([int(x) for x in tds[0].text.split(' ')[0].split("/")])) + mytime = time(*[int(x) for x in tds[0].text.split(' ')[1].split(":")]) + detail.datetime = datetime.combine(mydate, mytime) + detail.label = tds[1].text + " " + tds[2].text + " " + tds[3].text + try: + detail.price = float(tds[4].text[0:4].replace(',', '.')) + except: + detail.price = 0. + + self.calls.append(detail) + + def get_calls(self): + return self.calls