Change to use json and event objects
[gigfinder] / src / opt / gigfinder / events.py
index 1e2abd7..390ccae 100644 (file)
@@ -1,7 +1,32 @@
 import urllib
 import urllib2
 
-from resultsparser import parse_xml
+import location
+
+from resultsparser import  parse_json
+
+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):
@@ -11,26 +36,26 @@ class Events:
         self.method = 'geo.getevents'
 
     def get_events(self, lat, lng, distance):
-        """ Retrieve xml and parse into events list """
+        """ Retrieve json 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))
-        return self.sort_events(events)
-
-    def sort_events(self, events):
+        result = self.get_json(lat, lng, distance)
+        for event  in parse_json(result):
+            events.append(Event(event[0],
+                                event[1],
+                                event[2],
+                                event[3],
+                                event[4],
+                                event[5],
+                                event[6]))
+        return self.sort_events(events, lat, lng)
+
+    def sort_events(self, events, lat, lng):
         """ Sort gig by distance """
         if len(events) > 1:
-            events.sort(cmp=self.distance_cmp, key=lambda x: x['distance'])
+            events.sort(cmp=self.distance_cmp, key=lambda x: x.get_distance_from(lng, lat))
         return events
 
     def get_json(self, lat='', lng='', distance=''):
-        # testing json results
-        lat = '51.5174'
-        lng = '-0.0829'
-        distance = '10'
         params = urllib.urlencode({'method': self.method,
                                    'api_key': self.api_key,
                                    'distance': distance,
@@ -40,19 +65,8 @@ class Events:
         url = '%s?%s' % (self.url_base, params)
         request = urllib2.Request(url, None)
         response = urllib2.urlopen(request)
-        return response
-        
-    def get_xml(self, lat, lng, distance, page='1'):
-        """ Return xml from lastfm """
-        params = urllib.urlencode({'method': self.method,
-                                   'api_key': self.api_key,
-                                   'distance': distance,
-                                   'long': lng,
-                                   'lat': lat,
-                                   'page': page})
-        response = urllib.urlopen(self.url_base, params)
         return response.read()
-    
+        
     def distance_cmp(self, x, y):
         """ Compare distances for list sort """
         if x > y: