7d2835a9944207234bb60bf9531cd9535821e505
[gigfinder] / resultsparser.py
1 from xml.dom.minidom import parseString
2 from datetime import datetime, date
3 import time
4
5 import location
6
7 def parse_json(json, lat, long):
8     """ Parse json into usable format """
9     pass
10
11 def parse_xml(xml, lat, long):
12     """ Parse xml into a dict """
13     events_list = []
14     today = date.today()
15     dom = parseString(xml)
16
17     events = dom.getElementsByTagName('event')
18     for event in events:
19         start_date = parse_date(event.getElementsByTagName('startDate')[0].childNodes[0].data)
20         if start_date.date() == today:
21             title = event.getElementsByTagName('title')[0].childNodes[0].data
22             
23             artists_element = event.getElementsByTagName('artists')[0]
24             artist_list = []
25             for artist in artists_element.getElementsByTagName('artist'):
26                 artist_list.append(artist.childNodes[0].data)
27             artists = ', '.join(artist_list)
28
29             venue_details = event.getElementsByTagName('venue')[0]
30             venue_name = venue_details.getElementsByTagName('name')[0].childNodes[0].data
31             address = get_address(venue_details.getElementsByTagName('location')[0])
32             geo_data = venue_details.getElementsByTagName('geo:point')[0]
33             venue_lat = geo_data.getElementsByTagName('geo:lat')[0].childNodes[0].data
34             venue_long = geo_data.getElementsByTagName('geo:long')[0].childNodes[0].data
35             distance = location.distance_between(float(lat), 
36                                                  float(long), 
37                                                  float(venue_lat), 
38                                                  float(venue_long))
39             
40             events_list.append({'title': title,
41                                 'venue': venue_name,
42                                 'address': address,
43                                 'distance': distance,
44                                 'artists': artists,
45                                 'date': start_date})
46     return events_list
47
48 def get_address(location):
49     """ Return the venues address details from the xml element """
50     street = ''
51     city = ''
52     country = ''
53     postalcode = ''
54     if location.getElementsByTagName('street')[0].childNodes:
55         street = location.getElementsByTagName('street')[0].childNodes[0].data
56     if location.getElementsByTagName('city')[0].childNodes:
57         city = location.getElementsByTagName('city')[0].childNodes[0].data
58     if location.getElementsByTagName('country')[0].childNodes:
59         country = location.getElementsByTagName('country')[0].childNodes[0].data
60     if location.getElementsByTagName('postalcode')[0].childNodes:
61         postalcode = location.getElementsByTagName('postalcode')[0].childNodes[0].data
62     return '\n'.join([street, city, country, postalcode])
63
64 def parse_date(date_string):
65     """ Parse date string into datetime object """
66     fmt =  "%a, %d %b %Y %H:%M:%S"
67     result = time.strptime(date_string, fmt)
68     return datetime(result.tm_year, 
69                     result.tm_mon, 
70                     result.tm_mday, 
71                     result.tm_hour, 
72                     result.tm_min, 
73                     result.tm_sec)