Code

1e8975910619bb7e2c5dec978f3d240247f44ad4
[ncmpc.git] / lyrics / leoslyrics.py
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')