# -*- coding: cp949 -*- from parse_base_v3 import parse_base_v3 class parse_search_v3(parse_base_v3): def __init__(self, itemtype, parseText): super(parse_search_v3, self).__init__(parseText) self.__parse_common_response() if itemtype == u'album': self.__parse_album() elif itemtype == u'song': self.__parse_song() elif itemtype == u'artist': self.__parse_artist() else: raise Exception(u'A wrong choice!') # common response def __parse_common_response(self): root = self.document.documentElement channel = root.getElementsByTagName(u'channel')[0] self.result[u'title'] = self._get_text_data(channel, u'title') self.result[u'link'] = self._get_text_data(channel, u'link') self.result[u'description'] = self._get_text_data(channel, u'description') self.result[u'lastBuildDate'] = self._get_text_data(channel, u'lastBuildDate') self.result[u'total'] = self._get_text_data(channel, u'total') self.result[u'start'] = self._get_text_data(channel, u'start') self.result[u'display'] = self._get_text_data(channel, u'display') # 노래 검색에 대한 응답 def __parse_song(self): root = self.document.documentElement items = root.getElementsByTagName(u'item') self.result[u'item'] = [] for item in items: itembuf = {} ### id, title, runningtime, link, pubDate, author, description, guid, comments itembuf[u'id'] = item.getAttribute(u'id') itembuf[u'title'] = self._get_text_data(item, u'title') itembuf[u'runningtime'] = self._get_text_data(item, u'runningtime') itembuf[u'link'] = self._get_text_data(item, u'link') itembuf[u'pubDate'] = self._get_text_data(item, u'pubDate') itembuf[u'author'] = self._get_text_data(item, u'author') itembuf[u'description'] = self._get_text_data(item, u'description') itembuf[u'guid'] = self._get_text_data(item, u'guid') itembuf[u'comments'] = self._get_text_data(item, u'comments') ### album info: title, release, link, image, description album_info = item.getElementsByTagName(u'maniadb:album')[0] itembuf[u'album'] = {} itembuf[u'album'][u'title'] = self._get_text_data(album_info, u'title') itembuf[u'album'][u'release'] = self._get_text_data(album_info, u'release') itembuf[u'album'][u'link'] = self._get_text_data(album_info, u'link') itembuf[u'album'][u'image'] = self._get_text_data(album_info, u'image') itembuf[u'album'][u'description'] = self._get_text_data(album_info, u'description') ### artist info: link, name artist_info = item.getElementsByTagName(u'maniadb:artist')[0] itembuf[u'artist'] = {} itembuf[u'artist'][u'link'] = self._get_text_data(artist_info, u'link') itembuf[u'artist'][u'name'] = self._get_text_data(artist_info, u'name') ### 결과 append self.result[u'item'].append(itembuf) # 앨범에 대한 파싱 결과 def __parse_album(self): root = self.document.documentElement items = root.getElementsByTagName(u'item') self.result[u'item'] = [] for item in items: itembuf = {} ### title, release, link, thumbnail, image, pubDate, author, description, guid, comment ### NOTICE: 'thumbail'. The tag name has a typo. itembuf[u'id'] = item.getAttribute(u'id') itembuf[u'title'] = self._get_text_data(item, u'title') itembuf[u'release'] = self._get_text_data(item, u'release') itembuf[u'link'] = self._get_text_data(item, u'link') itembuf[u'thumbnail '] = self._get_text_data(item, u'thumbail') itembuf[u'image'] = self._get_text_data(item, u'image') itembuf[u'pubDate'] = self._get_text_data(item, u'pubDate') itembuf[u'author'] = self._get_text_data(item, u'author') itembuf[u'description'] = self._get_text_data(item, u'description') itembuf[u'guid'] = self._get_text_data(item, u'guid') itembuf[u'comments'] = self._get_text_data(item, u'comments') ### artist info: link, name artist_info = item.getElementsByTagName(u'maniadb:artist')[0] itembuf[u'artist'] = {} itembuf[u'artist'][u'link'] = self._get_text_data(artist_info, u'link') itembuf[u'artist'][u'name'] = self._get_text_data(artist_info, u'name') ### 결과 append self.result[u'item'].append(itembuf) # 아티스트에 대한 검색 def __parse_artist(self): root = self.document.documentElement items = root.getElementsByTagName(u'item') self.result[u'item'] = [] for item in items: itembuf = {} ### title, reference, demographic, period, link, image, pubDate, author, descrption, guid, comments itembuf[u'id'] = item.attributes[u'id'].value itembuf[u'title'] = self._get_text_data(item, u'title') itembuf[u'reference'] = self._get_text_data(item, u'reference') itembuf[u'demographic'] = self._get_text_data(item, u'demographic') itembuf[u'period'] = self._get_text_data(item, u'period') itembuf[u'link'] = self._get_text_data(item, u'link') itembuf[u'image'] = self._get_text_data(item, u'image') itembuf[u'pubDate'] = self._get_text_data(item, u'pubDate') itembuf[u'author'] = self._get_text_data(item, u'author') itembuf[u'description'] = self._get_text_data(item, u'description') itembuf[u'guid'] = self._get_text_data(item, u'guid') itembuf[u'comments'] = self._get_text_data(item, u'comments') # 결과 append self.result[u'item'].append(itembuf) if __name__ == '__main__': with open('song_sample.xml', 'r') as f: xmldoc = f.read() ps = parse_search_v3(u'song', xmldoc) print ps.result with open('album_sample.xml', 'r') as f: xmldoc = f.read() ps = parse_search_v3(u'album', xmldoc) print ps.result with open('artist_sample.xml', 'r') as f: xmldoc = f.read() ps = parse_search_v3(u'artist', xmldoc) print ps.result