comparison musixmatch-master/7digital-python/lockerEndpoint.py @ 7:8c29444cb5fd

Just did some work
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Sat, 20 Apr 2013 19:01:57 +0200
parents
children
comparison
equal deleted inserted replaced
2:e0a7176da80a 7:8c29444cb5fd
1 #!/usr/bin/env python
2 """A python interface to 7digital's locker endpoint"""
3 import os
4 from xml.dom.minidom import parseString
5
6
7 class Locker(object):
8 def __init__(self, xml_response):
9 self.xml_response = parseString(xml_response)
10
11 def get_contents(self):
12 results = []
13 locker_items = self.xml_response.getElementsByTagName('lockerRelease')
14
15 for item in locker_items:
16 results.append(LockerItem(item))
17
18 return results
19
20 def get_artists(self):
21 results = []
22 artist_nodes = self.xml_response.getElementsByTagName('artist')
23
24 for artist in artist_nodes:
25 results.append(LockerArtist(artist))
26
27 return results
28
29 def get_releases(self):
30 results = []
31 release_nodes = self.xml_response.getElementsByTagName('release')
32 for release in release_nodes:
33 results.append(LockerRelease(release))
34
35 return results
36
37 def get_tracks(self):
38 results = []
39 track_nodes = self.xml_response.getElementsByTagName('lockerTrack')
40 for track in track_nodes:
41 results.append(LockerTrack(track))
42
43 return results
44
45 class _LockerBase(object):
46 def extract(self, node, name, index = 0):
47 """Extracts a value from the xml string"""
48 try:
49 nodes = node.getElementsByTagName(name)
50
51 if len(nodes):
52 if nodes[index].firstChild:
53 return nodes[index].firstChild.data.strip()
54 else:
55 return None
56 except:
57 return None
58
59 class LockerItem(_LockerBase):
60 def __init__(self, xml):
61 self.release = LockerRelease(xml.getElementsByTagName('release')[0])
62 self.tracks = self.__get_release_tracks(xml.getElementsByTagName('lockerTrack'))
63
64 def __get_release_tracks(self, tracks):
65 result = []
66 for track in tracks:
67 result.append(LockerTrack(track))
68 return result
69
70 class LockerTrack(_LockerBase):
71 def __init__(self, xml):
72 self.track = Track(xml.getElementsByTagName('track')[0])
73 self.remaining_downloads = self.extract(xml, 'remainingDownloads')
74 self.purchaseDate = self.extract(xml, 'purchaseDate')
75 self.download_urls = self.__get_download_urls(xml.getElementsByTagName('downloadUrls'))
76
77 def __get_download_urls(self, urls):
78 result = []
79 for url in urls:
80 result.append(DownloadUrls(url))
81 return result
82
83 class DownloadUrls(_LockerBase):
84 def __init__(self, xml):
85 self.url = self.extract(xml, 'url')
86 self.format = Format(xml.getElementsByTagName('format')[0])
87
88 class Format(_LockerBase):
89 def __init__(self, xml):
90 self.id = xml.getAttribute('id')
91 self.file_format = self.extract(xml, 'fileFormat')
92 self.bit_rate = self.extract(xml, 'bitRate')
93
94 class Track(_LockerBase):
95 def __init__(self, xml):
96 self.id = xml.getAttribute('id')
97 self.title = self.extract(xml, 'title')
98 self.version = self.extract(xml, 'version')
99 self.artist = LockerArtist(xml.getElementsByTagName('artist')[0])
100 self.url = self.extract(xml, 'url')
101
102 class LockerRelease(_LockerBase):
103 def __init__(self, xml):
104 self.id = xml.getAttribute('id')
105 self.title = self.extract(xml, 'title')
106 self.type = self.extract(xml, 'type')
107 self.artist = LockerArtist(xml.getElementsByTagName('artist')[0])
108 self.url = self.extract(xml, 'url')
109 self.image = self.extract(xml, 'image')
110 self.release_date = self.extract(xml, 'releaseDate')
111
112 class LockerArtist(_LockerBase):
113 def __init__(self, xml):
114 self.id = xml.getAttribute('id')
115 self.name = self.extract(xml, 'name')
116 self.url = self.extract(xml, 'url')
117
118