From 19cbc70c06bdedf3561851edda11a42ae282b79a Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 18 May 2010 22:46:22 +0100 Subject: [PATCH 1/1] Start moving to json --- src/opt/gigfinder/events.py | 32 +++++++++++++++++++++++++++----- src/opt/gigfinder/gigfinder.py | 25 +++++++++---------------- src/opt/gigfinder/resultsparser.py | 30 +++++++++++++++++++++++++++++- 3 files changed, 65 insertions(+), 22 deletions(-) diff --git a/src/opt/gigfinder/events.py b/src/opt/gigfinder/events.py index 1e2abd7..1b4902c 100644 --- a/src/opt/gigfinder/events.py +++ b/src/opt/gigfinder/events.py @@ -3,6 +3,29 @@ import urllib2 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' @@ -13,11 +36,10 @@ class Events: 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): diff --git a/src/opt/gigfinder/gigfinder.py b/src/opt/gigfinder/gigfinder.py index d5fe2bd..016247a 100755 --- a/src/opt/gigfinder/gigfinder.py +++ b/src/opt/gigfinder/gigfinder.py @@ -48,6 +48,7 @@ class GigFinder: 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() @@ -86,12 +87,12 @@ class GigFinder: 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): @@ -165,30 +166,22 @@ class GigFinder: 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() diff --git a/src/opt/gigfinder/resultsparser.py b/src/opt/gigfinder/resultsparser.py index 793cb4c..9f50ae8 100644 --- a/src/opt/gigfinder/resultsparser.py +++ b/src/opt/gigfinder/resultsparser.py @@ -1,12 +1,40 @@ 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 """ -- 1.7.9.5