X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fopt%2Fgigfinder%2Fevents.py;fp=src%2Fopt%2Fgigfinder%2Fevents.py;h=1e2abd7ed684fc916895f9910d97b8eed89c16fd;hb=69662219a729a4e95f5c0bd7e653290f221ab12e;hp=0000000000000000000000000000000000000000;hpb=14e2bbf33c259505375525641b4c53b0499a8472;p=gigfinder diff --git a/src/opt/gigfinder/events.py b/src/opt/gigfinder/events.py new file mode 100644 index 0000000..1e2abd7 --- /dev/null +++ b/src/opt/gigfinder/events.py @@ -0,0 +1,63 @@ +import urllib +import urllib2 + +from resultsparser import parse_xml + +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' + + def get_events(self, lat, lng, distance): + """ Retrieve xml 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): + """ 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='', 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, + 'long': lng, + '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, 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: + return 1 + elif x == y: + return 0 + else: + return -1