1e8975910619bb7e2c5dec978f3d240247f44ad4
1 #!/usr/bin/python
2 #
3 # Load lyrics from leoslyrics.com
4 #
5 # Author: Max Kellermann <max@duempel.org>
6 #
8 from sys import argv, exit
9 from urllib import urlencode, urlopen
10 from xml.sax import make_parser, SAXException
11 from xml.sax.handler import ContentHandler
13 class SearchContentHandler(ContentHandler):
14 def __init__(self):
15 self.code = None
16 self.hid = None
18 def startElement(self, name, attrs):
19 if name == 'response':
20 self.code = int(attrs['code'])
21 elif name == 'result':
22 if self.hid is None or attrs['exactMatch'] == 'true':
23 self.hid = attrs['hid']
25 def search(artist, title):
26 query = urlencode({'auth': 'ncmpc',
27 'artist': artist,
28 'songtitle': title})
29 url = "http://api.leoslyrics.com/api_search.php?" + query
30 f = urlopen(url)
31 handler = SearchContentHandler()
32 parser = make_parser()
33 parser.setContentHandler(handler)
34 parser.parse(f)
35 return handler.hid
37 class LyricsContentHandler(ContentHandler):
38 def __init__(self):
39 self.code = None
40 self.is_text = False
41 self.text = None
43 def startElement(self, name, attrs):
44 if name == 'text':
45 self.text = ''
46 self.is_text = True
47 else:
48 self.is_text = False
50 def characters(self, chars):
51 if self.is_text:
52 self.text += chars
54 def lyrics(hid):
55 query = urlencode({'auth': 'ncmpc',
56 'hid': hid})
57 url = "http://api.leoslyrics.com/api_lyrics.php?" + query
58 f = urlopen(url)
59 handler = LyricsContentHandler()
60 parser = make_parser()
61 parser.setContentHandler(handler)
62 parser.parse(f)
63 return handler.text
65 hid = search(argv[1], argv[2])
66 if hid is None:
67 exit(2)
68 print lyrics(hid).encode('utf-8')