refactor events and parser, change gps method and wait for second match
[gigfinder] / events.py
diff --git a/events.py b/events.py
new file mode 100644 (file)
index 0000000..13d8b21
--- /dev/null
+++ b/events.py
@@ -0,0 +1,61 @@
+import urllib
+import urllib2
+
+from resultsparser import EventParser
+
+class Events:
+    def __init__(self):
+        self.api_key = '1928a14bdf51369505530949d8b7e1ee'
+        self.url_base = 'http://ws.audioscrobbler.com/2.0/'
+        self.format = 'json'
+        self.method = 'geo.getevents'
+        self.parser = EventParser()
+
+    def get_events(self, lat, long, distance):
+        """ Retrieve xml and parse into events list """
+        xml = self.get_xml(lat, long, distance)
+        events = self.parser.parse_xml(xml, 
+                                       lat,
+                                       long)
+        return self.sort_events(events)
+
+    def sort_events(self, events):
+        """ Sort gig by distance """
+        if len(events) > 1:
+            events.sort(cmp=self.distance_cmp, key=lambda x: x['distance'])
+        return events
+
+    def get_json(self, lat='', long='', distance=''):
+        # testing json results
+        lat = '51.5174'
+        long = '-0.0829'
+        distance = '10'
+        params = urllib.urlencode({'method': self.method,
+                                   'api_key': self.api_key,
+                                   'distance': distance,
+                                   'long': long,
+                                   'lat': lat,
+                                   'format': self.format})
+        url = '%s?%s' % (self.url_base, params)
+        request = urllib2.Request(url, None)
+        response = urllib2.urlopen(request)
+        return response
+        
+    def get_xml(self, lat, long, distance):
+        """ Return xml from lastfm """
+        params = urllib.urlencode({'method': self.method,
+                                   'api_key': self.api_key,
+                                   'distance': distance,
+                                   'long': long,
+                                   'lat': lat})
+        response = urllib.urlopen(self.url_base, params)
+        return response.read()
+    
+    def distance_cmp(self, x, y):
+        """ Compare distances for list sort """
+        if x > y:
+            return 1
+        elif x == y:
+            return 0
+        else:
+            return -1