change event parsing
[gigfinder] / events.py
1 import urllib
2 import urllib2
3
4 from resultsparser import EventParser
5
6 class Events:
7     def __init__(self):
8         self.api_key = '1928a14bdf51369505530949d8b7e1ee'
9         self.url_base = 'http://ws.audioscrobbler.com/2.0/'
10         self.format = 'json'
11         self.method = 'geo.getevents'
12
13     def get_events(self, lat, long, distance):
14         """ Retrieve xml and parse into events list """
15         xml = self.get_xml(lat, long, distance)
16         events = EventParser().parse_xml(xml, 
17                                          lat,
18                                          long)
19         return self.sort_events(events)
20
21     def sort_events(self, events):
22         """ Sort gig by distance """
23         if len(events) > 1:
24             events.sort(cmp=self.distance_cmp, key=lambda x: x['distance'])
25         return events
26
27     def get_json(self, lat='', long='', distance=''):
28         # testing json results
29         lat = '51.5174'
30         long = '-0.0829'
31         distance = '10'
32         params = urllib.urlencode({'method': self.method,
33                                    'api_key': self.api_key,
34                                    'distance': distance,
35                                    'long': long,
36                                    'lat': lat,
37                                    'format': self.format})
38         url = '%s?%s' % (self.url_base, params)
39         request = urllib2.Request(url, None)
40         response = urllib2.urlopen(request)
41         return response
42         
43     def get_xml(self, lat, long, distance):
44         """ Return xml from lastfm """
45         params = urllib.urlencode({'method': self.method,
46                                    'api_key': self.api_key,
47                                    'distance': distance,
48                                    'long': long,
49                                    'lat': lat})
50         response = urllib.urlopen(self.url_base, params)
51         return response.read()
52     
53     def distance_cmp(self, x, y):
54         """ Compare distances for list sort """
55         if x > y:
56             return 1
57         elif x == y:
58             return 0
59         else:
60             return -1