1 # -*- coding: UTF-8 -*-
4 from urllib2 import URLError
7 from timetable_parser import StanTimetableParser
11 RSS_URL = 'http://www.reseau-stan.com/rss'
17 'name': u"Nancy République / Champigneulles",
21 'name': u"Nancy République / Bouxières-aux-Dames",
25 'name': u"Nancy République / Frouard Le Nid",
29 'name': u"Nancy République / Pompey Les Vannes",
33 'name': u"Nancy République / Pompey Fonds de Lavaux",
37 'name': u"Vandoeuvre Vélodrome / Chaligny",
41 'name': u"Vandoeuvre Vélodrome / Pont Saint-Vincent",
45 'name': u"Vandoeuvre Vélodrome / Messein",
49 'name': u"Nancy Place Carnot / Chaligny",
53 'name': u"Nancy Place Carnot / Pont Saint-Vincent",
57 'name': u"Nancy Place Carnot / Bainville-sur-Madon",
61 'name': u"Nancy République / Saint-Nicolas Le Nid",
65 'name': u"Nancy République / Saint-Nicolas République",
69 'name': u"Nancy République / Dombasle Stand",
73 'name': u"Nancy République / Dombasle Maroc",
77 'name': u"Vandoeuvre Parc des Expositions / Nancy République",
85 'name': u"Vandoeuvre CHU Brabois / Essey Mouzimpré",
89 'name': u"Vandoeuvre CHU Brabois / Centre d\'accueil - Villers les Essarts",
90 'numbers': ["Ptit Stan Vilers"]
93 'name': u"Vandoeuvre CHU Brabois / Vandoeuvre Nations - Médecine préventive ",
94 'numbers': ["Ptit Stan Vandoeuvre"]
97 'name': u"Laxou Sapinière / Laxou Provinces",
98 'numbers': ["Ptit Stan Laxou"]
101 'name': u"Nancy Carnot",
102 'numbers': ["Ptit Stan Colline"]
105 'name': u"Malzéville Sadi Carnot - Nancy Cimetière du Sud",
106 'numbers': ["Minibus"]
113 'name': u"Maxéville Champ le Boeuf - Nancy Haut du Lièvre / Jarville Sion",
114 'numbers': ["111", "112"]
117 'name': u"Houdemont / Vandoeuvre Charmois",
121 'name': u"Ludres / Villers Lycée Stanislas",
125 'name': u"Fléville Fleurychamp - Heillecourt / Villers Lycée Stanislas",
129 'name': u"Nancy Beauregard / Nancy République",
133 'name': u"Villers Clairlieu / Nancy République",
134 'numbers': ["122", "126"]
137 'name': u"Vandoeuvre Nations / Nancy République",
141 'name': u"Laxou Mouzon / Nancy République",
145 'name': u"Laxou Provinces / Seichamps",
149 'name': u"Maxéville Mairie / Jarville Sion - Heillecourt - Fléville De la Noue",
150 'numbers': ["131", "132", "133"]
153 'name': u"Villers Lycée Stanislas / Maxéville Lafayette - Malzéville Savlons",
154 'numbers': ["134", "135"]
157 'name': u"Nancy Cours Léopold / Laneuveville - La Madeleine",
158 'numbers': ["136", "137"]
161 'name': u"Laxou Champ le Boeuf / Vandoeurvre Roberval",
165 'name': u"Nancy Cours Léopold / Ludres",
169 'name': u"Malzéville / Saulxures Forêt - Art sur Meurthe",
170 'numbers': ["141", "142"]
173 'name': u"Malzéville Pixérécourt / Saulxures",
177 'name': u"Essey C.E.S / Gérard Barrois Stade Marcel Picot",
181 'name': u"Dommartemont / Jarville Sion",
185 'name': u"Essey Mouzimpré / Seichamps - Pulnoy (Lignes accessibles PMR)",
186 'numbers': ["171", "172"]
193 Extract from http://www.reseau-stan.com/horaires_arret/index7f96.html?rub_code=28
194 and ...... lieux publics
200 def search(self, from_location, from_city, to_location, to_city, datetime, restrict=68):
201 cached_result = self.cached_search(from_location, from_city, to_location, to_city, datetime, restrict)
202 if cached_search is not None:
206 POST to http://www.reseau-stan.com/ri/index.asp
207 from_location: keywordsDep
209 to_location: keywordsArr
211 date: laDate (11/03/2009)
212 hour: lHeure (13 = 13h)
214 restrict: typeDate (68 = partir apres, 65 = arriver avant)
219 def cached_search(self, from_location, from_city, to_location, to_city, datetime, restrict=68):
220 cache_id = '-'.join([ from_location, from_city, to_location, to_city, datetime, restrict ])
223 def load_timetable(self, lineid, date, hour):
224 parser = StanTimetableParser()
225 timetable_raw_html_file = None
227 timetable_raw_html_file = self.load_timetable_remote(lineid, date, hour)
231 parser.feed(timetable_raw_html_file)
235 def load_timetable_remote(self, lineid, date, hour):
236 url = 'http://www.reseau-stan.com/horaires_ligne/index.asp?rub_code=6&thm_id=7&gpl_id=0&lign_id=%s' % lineid
238 response = urllib2.urlopen(url)
239 return response.read()