1b4902c96f2f082d8e3a8eb0da7bbeaafe43ea15
[gigfinder] / src / opt / gigfinder / events.py
1 import urllib
2 import urllib2
3
4 from resultsparser import parse_xml
5
6 class Event:
7     def __init__(self, 
8                  title, 
9                  venue_name, 
10                  address, 
11                  lng,
12                  lat,
13                  artists, 
14                  start_date):
15         self.title = title
16         self.venue_name = venue_name
17         self.address = address
18         self.lng = lng
19         self.lat = lat
20         self.artists = artists
21         self.start_date = start_date
22
23     def get_distance_from(self, lng, lat):
24         return location.distance_between(float(lat), 
25                                          float(lng), 
26                                          float(self.lat), 
27                                          float(self.lng))
28
29 class Events:
30     def __init__(self):
31         self.api_key = '1928a14bdf51369505530949d8b7e1ee'
32         self.url_base = 'http://ws.audioscrobbler.com/2.0/'
33         self.format = 'json'
34         self.method = 'geo.getevents'
35
36     def get_events(self, lat, lng, distance):
37         """ Retrieve xml and parse into events list """
38         events = []
39         xml = self.get_xml(lat, lng, distance)
40         events.extend(parse_xml(xml, 
41                                 lat,
42                                 lng))
43         return self.sort_events(events)
44
45     def sort_events(self, events):
46         """ Sort gig by distance """
47         if len(events) > 1:
48             events.sort(cmp=self.distance_cmp, key=lambda x: x['distance'])
49         return events
50
51     def get_json(self, lat='', lng='', distance=''):
52         # testing json results
53         lat = '51.5174'
54         lng = '-0.0829'
55         distance = '10'
56         params = urllib.urlencode({'method': self.method,
57                                    'api_key': self.api_key,
58                                    'distance': distance,
59                                    'long': lng,
60                                    'lat': lat,
61                                    'format': self.format})
62         url = '%s?%s' % (self.url_base, params)
63         request = urllib2.Request(url, None)
64         response = urllib2.urlopen(request)
65         return response
66         
67     def get_xml(self, lat, lng, distance, page='1'):
68         """ Return xml from lastfm """
69         params = urllib.urlencode({'method': self.method,
70                                    'api_key': self.api_key,
71                                    'distance': distance,
72                                    'long': lng,
73                                    'lat': lat,
74                                    'page': page})
75         response = urllib.urlopen(self.url_base, params)
76         return response.read()
77     
78     def distance_cmp(self, x, y):
79         """ Compare distances for list sort """
80         if x > y:
81             return 1
82         elif x == y:
83             return 0
84         else:
85             return -1