base version
[pystan] / debian / pystan / usr / lib / python2.5 / site-packages / pystan / lib / stan.py
1 # -*- coding: UTF-8 -*-
2
3 import urllib2
4 from urllib2 import URLError
5
6
7 from timetable_parser import StanTimetableParser
8
9 class STAN:
10
11         RSS_URL =  'http://www.reseau-stan.com/rss'
12
13         def lines(self):
14
15                 return [
16                            { 'id': 158,
17                              'name': u"Nancy République / Champigneulles",
18                              'numbers': ["321"]
19                            },
20                            { 'id': 144,
21                              'name': u"Nancy République / Bouxières-aux-Dames",
22                              'numbers': ["322"]
23                            },
24                            { 'id': 146,
25                              'name': u"Nancy République / Frouard Le Nid",
26                              'numbers': ["323"]
27                            },
28                            { 'id': 148,
29                              'name': u"Nancy République / Pompey Les Vannes",
30                              'numbers': ["324"]
31                            },
32                            { 'id': 150,
33                              'name': u"Nancy République / Pompey Fonds de Lavaux",
34                              'numbers': ["325"]
35                            },
36                            { 'id': 145,
37                              'name': u"Vandoeuvre Vélodrome / Chaligny",
38                              'numbers': ["511"]
39                            },
40                            { 'id': 147,
41                              'name': u"Vandoeuvre Vélodrome / Pont Saint-Vincent",
42                              'numbers': ["512"]
43                            },
44                            { 'id': 149,
45                              'name': u"Vandoeuvre Vélodrome / Messein",
46                              'numbers': ["514"]
47                            },
48                            { 'id': 151,
49                             'name': u"Nancy Place Carnot / Chaligny",
50                              'numbers': ["521"]
51                            },
52                            { 'id': 153,
53                              'name': u"Nancy Place Carnot / Pont Saint-Vincent",
54                              'numbers': ["522"]
55                            },
56                            { 'id': 155,
57                              'name': u"Nancy Place Carnot / Bainville-sur-Madon",
58                              'numbers': ["523"]
59                            },
60                            { 'id': 152,
61                              'name': u"Nancy République / Saint-Nicolas Le Nid",
62                              'numbers': ["621"]
63                            },
64                            { 'id': 157,
65                              'name': u"Nancy République / Saint-Nicolas République",
66                              'numbers': ["622"]
67                            },
68                            { 'id': 156,
69                              'name': u"Nancy République / Dombasle Stand",
70                              'numbers': ["623"]
71                            },
72                            { 'id': 154,
73                              'name': u"Nancy République / Dombasle Maroc",
74                              'numbers': ["624"]
75                            },
76                            { 'id': 126,
77                              'name': u"Vandoeuvre Parc des Expositions / Nancy République",
78                              'numbers': ["129"]
79                            },
80                            { 'id': 133,
81                              'name': u"Ligne 80",
82                              'numbers': ["80"]
83                            },
84                            { 'id': 138,
85                              'name': u"Vandoeuvre CHU Brabois / Essey Mouzimpré",
86                              'numbers': ["Tram 1"]
87                            },
88                            { 'id': 141,
89                              'name': u"Vandoeuvre CHU Brabois / Centre d\'accueil - Villers les Essarts",
90                              'numbers': ["Ptit Stan Vilers"]
91                            },
92                            { 'id': 143,
93                              'name': u"Vandoeuvre CHU Brabois / Vandoeuvre Nations - Médecine préventive ",
94                              'numbers': ["Ptit Stan Vandoeuvre"]
95                            },
96                            { 'id': 140,
97                              'name': u"Laxou Sapinière / Laxou Provinces",
98                              'numbers': ["Ptit Stan Laxou"]
99                            },
100                            { 'id': 142,
101                              'name': u"Nancy Carnot",
102                              'numbers': ["Ptit Stan Colline"]
103                            },
104                            { 'id': 134,
105                              'name': u"Malzéville Sadi Carnot - Nancy Cimetière du Sud",
106                              'numbers': ["Minibus"]
107                            },
108                            { 'id': 159,
109                              'name': u"StanU",
110                              'numbers': ["110"]
111                            },
112                            { 'id': 112,
113                              'name': u"Maxéville Champ le Boeuf - Nancy Haut du Lièvre / Jarville Sion",
114                              'numbers': ["111", "112"]
115                            },
116                            { 'id': 96,
117                              'name': u"Houdemont / Vandoeuvre Charmois",
118                              'numbers': ["114"]
119                            },
120                            { 'id': 98,
121                              'name': u"Ludres / Villers Lycée Stanislas",
122                              'numbers': ["115"]
123                            },
124                            { 'id': 101,
125                              'name': u"Fléville Fleurychamp - Heillecourt / Villers Lycée Stanislas",
126                              'numbers': ["116"]
127                            },
128                            { 'id': 103,
129                              'name': u"Nancy Beauregard / Nancy République",
130                              'numbers': ["121"]
131                            },
132                            { 'id': 135,
133                              'name': u"Villers Clairlieu / Nancy République",
134                              'numbers': ["122", "126"]
135                            },
136                            { 'id': 106,
137                              'name': u"Vandoeuvre Nations / Nancy République",
138                              'numbers': ["123"]
139                            },
140                            { 'id': 109,
141                              'name': u"Laxou Mouzon / Nancy République",
142                              'numbers': ["124"]
143                            },
144                            { 'id': 118,
145                              'name': u"Laxou Provinces / Seichamps",
146                              'numbers': ["130"]
147                            },
148                            { 'id': 95,
149                              'name': u"Maxéville Mairie / Jarville Sion - Heillecourt - Fléville De la Noue",
150                              'numbers': ["131", "132", "133"]
151                            },
152                            { 'id': 97,
153                              'name': u"Villers Lycée Stanislas / Maxéville Lafayette - Malzéville Savlons",
154                              'numbers': ["134", "135"]
155                            },
156                            { 'id': 100,
157                              'name': u"Nancy Cours Léopold / Laneuveville - La Madeleine",
158                              'numbers': ["136", "137"]
159                            },
160                            { 'id': 102,
161                              'name': u"Laxou Champ le Boeuf / Vandoeurvre Roberval",
162                              'numbers': ["138"]
163                            },
164                            { 'id': 104,
165                              'name': u"Nancy Cours Léopold / Ludres",
166                              'numbers': ["139"]
167                            },
168                            { 'id': 114,
169                              'name': u"Malzéville / Saulxures Forêt - Art sur Meurthe",
170                              'numbers': ["141", "142"]
171                            },
172                            { 'id': 108,
173                              'name': u"Malzéville Pixérécourt / Saulxures",
174                              'numbers': ["161"]
175                            },
176                            { 'id': 116,
177                              'name': u"Essey C.E.S / Gérard Barrois Stade Marcel Picot",
178                              'numbers': ["162"]
179                            },
180                            { 'id': 107,
181                              'name': u"Dommartemont / Jarville Sion",
182                              'numbers': ["163"]
183                            },
184                            { 'id': 110,
185                              'name': u"Essey Mouzimpré / Seichamps - Pulnoy (Lignes accessibles PMR)",
186                              'numbers': ["171", "172"]
187                             }
188                 ]
189
190
191         def stations(self):
192                 '''
193                 Extract from http://www.reseau-stan.com/horaires_arret/index7f96.html?rub_code=28
194                          and ...... lieux publics
195                 '''
196                 return {
197                         }
198
199
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:
203                         return cached_result
204
205                 '''
206                 POST to http://www.reseau-stan.com/ri/index.asp
207                 from_location:  keywordsDep
208                 from_city:      comDep
209                 to_location:    keywordsArr
210                 to_city:        comArr
211                 date:           laDate (11/03/2009)
212                 hour:           lHeure (13 = 13h)
213                 minute:         laMinute
214                 restrict:       typeDate (68 = partir apres, 65 = arriver avant)
215                 '''
216                 pass
217
218
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 ])
221                 pass
222
223         def load_timetable(self, lineid, date, hour):
224                 parser = StanTimetableParser()
225                 timetable_raw_html_file = None
226                 try:
227                         timetable_raw_html_file = self.load_timetable_remote(lineid, date, hour)
228                 except URLError, e:
229                         print e
230
231                 parser.feed(timetable_raw_html_file)
232                 parser.close()
233                 return parser.result
234
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
237                 print url
238                 response = urllib2.urlopen(url)
239                 return response.read()