annotate Yading/7digital-python/lockerEndpoint.py @ 13:844d341cf643 tip

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