from resultsparser import parse_xml
+class Event:
+ def __init__(self,
+ title,
+ venue_name,
+ address,
+ lng,
+ lat,
+ artists,
+ start_date):
+ self.title = title
+ self.venue_name = venue_name
+ self.address = address
+ self.lng = lng
+ self.lat = lat
+ self.artists = artists
+ self.start_date = start_date
+
+ def get_distance_from(self, lng, lat):
+ return location.distance_between(float(lat),
+ float(lng),
+ float(self.lat),
+ float(self.lng))
+
class Events:
def __init__(self):
self.api_key = '1928a14bdf51369505530949d8b7e1ee'
def get_events(self, lat, lng, distance):
""" Retrieve xml and parse into events list """
events = []
- for page in ['1', '2', '3']:
- xml = self.get_xml(lat, lng, distance, page=page)
- events.extend(parse_xml(xml,
- lat,
- lng))
+ xml = self.get_xml(lat, lng, distance)
+ events.extend(parse_xml(xml,
+ lat,
+ lng))
return self.sort_events(events)
def sort_events(self, events):
self.win.set_title(self.app_title)
self.win.connect("destroy", gtk.main_quit, None)
self.win.set_app_menu(menu)
+ self.add_button_area()
Thread(target=self.update_gigs).start()
else:
self.location.lat = float(51.517369)
self.location.long = float(-0.082998)
-
+
events = self.events.get_events(self.location.lat,
self.location.long,
- self.distance)
- gobject.idle_add(self.hide_message)
+ self.distance,)
gobject.idle_add(self.show_events, events)
+ gobject.idle_add(self.hide_message)
thread.exit()
def show_message(self, message):
win.show_all()
- def add_table(self):
- """ Add table for events """
- self.table = gtk.Table(columns=1)
- self.table.set_row_spacings(10)
- self.table.set_col_spacings(10)
-
+ def add_button_area(self):
+ self.box = gtk.VBox(True,0)
self.pannable_area = hildon.PannableArea()
- self.pannable_area.add_with_viewport(self.table)
+ self.pannable_area.add_with_viewport(self.box)
self.pannable_area.show_all()
self.win.add(self.pannable_area)
def add_events(self, events):
""" Add a table of buttons """
- self.add_table()
- pos = 0
-
for event in events:
button = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT,
hildon.BUTTON_ARRANGEMENT_VERTICAL)
button.set_text(event['title'], "distance: %0.02f km" % event['distance'])
button.connect("clicked", self.show_details, event)
- self.table.attach(button, 0, 1, pos, pos+1, yoptions=gtk.FILL)
- pos += 1
- self.table.show_all()
+ self.box.pack_start(button)
+ self.box.show_all()
if __name__ == "__main__":
finder = GigFinder()
from xml.dom.minidom import parseString
from datetime import datetime, date
import time
+import simplejson
import location
+from events import Event
+
def parse_json(json, lat, lng):
""" Parse json into usable format """
- pass
+ events_list = []
+ today = date.today()
+
+ events = json['events']['event']
+ for event in events:
+ venue_location = event['venue']['location']
+ address = '\n'.join([venue_location['street'],
+ venue_location['city'],
+ venue_location['country'],
+ venue_location['postalcode']])
+ venue_geo = venue_location['geo:point']
+ if type(event['artists']['artist']) == list:
+ artist = '\n'.join(event['artists']['artist'])
+ else:
+ artist = event['artists']['artist']
+
+ event_obj = Event(event['title'],
+ event['venue']['name'],
+ address,
+ venue_geo['geo:long'],
+ venue_geo['geo:lat'],
+ artist,
+ parse_date(event['startDate']))
+ event_list.append(event_obj)
+ return event_list
+
def parse_xml(xml, lat, lng):
""" Parse xml into a dict """