diff --git a/weboob/backends/sncf/__init__.py b/weboob/backends/sncf/__init__.py new file mode 100644 index 00000000..ed351afc --- /dev/null +++ b/weboob/backends/sncf/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Romain Bignon + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +""" + +from .backend import SNCFBackend diff --git a/weboob/backends/sncf/backend.py b/weboob/backends/sncf/backend.py new file mode 100644 index 00000000..b79dfbdf --- /dev/null +++ b/weboob/backends/sncf/backend.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Romain Bignon + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +""" + +from weboob.backend import Backend +from weboob.capabilities.travel import ICapTravel, Station, Departure + +from .canaltp import CanalTP + +class SNCFBackend(Backend, ICapTravel): + def __init__(self, weboob): + Backend.__init__(self, weboob) + + def iter_station_search(self, pattern): + canaltp = CanalTP() + for _id, name in canaltp.iter_station_search(pattern): + yield Station(_id, name) + + def iter_station_departures(self, station_id): + canaltp = CanalTP() + for i, d in enumerate(canaltp.iter_station_departures(station_id)): + departure = Departure(i, d['type'], d['time']) + departure.departure_station = d['departure'] + departure.arrival_station = d['arrival'] + departure.late = d['late'] + departure.information = d['late_reason'] + yield departure diff --git a/weboob/backends/sncf/canaltp.py b/weboob/backends/sncf/canaltp.py new file mode 100644 index 00000000..a047249e --- /dev/null +++ b/weboob/backends/sncf/canaltp.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Romain Bignon + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +""" + +from datetime import datetime, date, time +from weboob.tools.browser import Browser + +class CanalTP(Browser): + DOMAIN = 'widget.canaltp.fr' + PROTOCOL = 'http' + PAGES = {} + + def __init__(self): + Browser.__init__(self, '') + + def iter_station_search(self, pattern): + result = self.openurl(u"http://widget.canaltp.fr/Prochains_departs_15122009/dev/gare.php?txtrech=%s" % unicode(pattern)).read() + for station in result.split('&'): + try: + _id, name = station.split('=') + except ValueError: + continue + else: + yield _id, name + + def iter_station_departures(self, station_id): + result = self.openurl(u"http://widget.canaltp.fr/Prochains_departs_15122009/dev/index.php?gare=%s" % unicode(station_id)).read() + departure = '' + for line in result.split('&'): + key, value = line.split('=', 1) + if key == 'nomgare': + departure = value + elif key.startswith('ligne'): + _type, unknown, _time, arrival, served, late, late_reason = value.split(';', 6) + yield {'type': _type, + 'time': datetime.combine(date.today(), time(*[int(x) for x in _time.split(':')])), + 'departure': departure, + 'arrival': arrival, + 'late': late and time(0, int(late.split()[0])) or time(), + 'late_reason': late_reason} + + def home(self): + pass + + def login(self): + pass + + def is_logged(self): + """ Do not need to be logged """ + return True