1 import gtk, gtk.glade, re
2 from urllib import urlopen, urlencode as encode
3
4 # handles the http fetch
5 def fetchMenu(where, when):
6 where = {'Commons': 45, 'Colleges': 71}[where]
7 postData = encode({'mMeal': 'All Meals', 'mDH': where, 'mDate': when})
8
9 tagRe = re.compile(r'<B>(.+)</B>|<H4>(.+)</H4>')
10 t = ''
11 for line in urlopen('http://www.yaledining.org/menu_app.cfm', postData):
12 for tag in tagRe.finditer(line):
13 bTag, hTag = tag.groups()
14 if hTag: t += hTag + '\n'
15 if bTag: t += '\t' + bTag + '\n'
16
17 return t
18
19 # handles the gui
20 class Menu:
21 def __init__(self):
22 wt = self.wTree = gtk.glade.XML('menu.glade')
23
24 self.date = wt.get_widget('date')
25 self.dh = wt.get_widget('diningHall')
26 self.mdst = wt.get_widget('menuDisplay').get_buffer().set_text
27
28 self.dh.set_active(0)
29
30 wt.signal_autoconnect({ 'getMenu' : self.getMenu, 'goAway' : gtk.main_quit })
31
32 def getMenu(self, widget):
33 x = self.dh.get_active()
34 if x:
35 self.mdst(fetchMenu(self.dh.get_model()[x][0], self.date.get_text()))
36 else:
37 self.mdst('Need to choose a dining hall.')
38
39 if __name__ == "__main__":
40 # I'm a real program, do something.
41 mg = Menu()
42 gtk.main()
syntax highlighted by Code2HTML, v. 0.9.1