refactor events and parser, change gps method and wait for second match
[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         self.parser = EventParser()
13
14     def get_events(self, lat, long, distance):
15         """ Retrieve xml and parse into events list """
16         xml = self.get_xml(lat, long, distance)
17         events = self.parser.parse_xml(xml, 
18                                        lat,
19                                        long)
20         return self.sort_events(events)
21
22     def sort_events(self, events):
23         """ Sort gig by distance """
24         if len(events) > 1:
25             events.sort(cmp=self.distance_cmp, key=lambda x: x['distance'])
26         return events
27
28     def get_json(self, lat='', long='', distance=''):
29         # testing json results
30         lat = '51.5174'
31         long = '-0.0829'
32         distance = '10'
33         params = urllib.urlencode({'method': self.method,
34                                    'api_key': self.api_key,
35                                    'distance': distance,
36                                    'long': long,
37                                    'lat': lat,
38                                    'format': self.format})
39         url = '%s?%s' % (self.url_base, params)
40         request = urllib2.Request(url, None)
41         response = urllib2.urlopen(request)
42         return response
43         
44     def get_xml(self, lat, long, distance):
45         """ Return xml from lastfm """
46         params = urllib.urlencode({'method': self.method,
47                                    'api_key': self.api_key,
48                                    'distance': distance,
49                                    'long': long,
50                                    'lat': lat})
51         response = urllib.urlopen(self.url_base, params)
52         return response.read()
53     
54     def distance_cmp(self, x, y):
55         """ Compare distances for list sort """
56         if x > y:
57             return 1
58         elif x == y:
59             return 0
60         else:
61             return -1