Mercurial > hg > pmhd
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 |