3 Wrapper for using CU LRC scrapers with MythMusic of MythTV
5 Paul Harrison, ronie, Timothy Witham
15 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) +
'/../Kodistubs')
17 from optparse
import OptionParser
28 lyricssettings[
'debug'] = ADDON.getSettingBool(
'log_enabled')
29 lyricssettings[
'save_filename_format'] = ADDON.getSettingInt(
'save_filename_format')
30 lyricssettings[
'save_lyrics_path'] = ADDON.getSettingString(
'save_lyrics_path')
31 lyricssettings[
'save_subfolder'] = ADDON.getSettingBool(
'save_subfolder')
32 lyricssettings[
'save_subfolder_path'] = ADDON.getSettingString(
'save_subfolder_path')
35 confdir = os.environ.get(
'MYTHCONFDIR',
'')
37 if (
not confdir)
or (confdir ==
'/'):
38 confdir = os.environ.get(
'HOME',
'')
40 if (
not confdir)
or (confdir ==
'/'):
41 log(
"Unable to find MythTV directory for metadata cache.", debug=
True)
44 confdir = os.path.join(confdir,
'.mythtv')
45 cachedir = os.path.join(confdir,
'cache')
47 if not os.path.exists(cachedir):
54 from bs4
import BeautifulSoup
56 log(
"Failed to import BeautifulSoup. This grabber requires python-bs4", debug=
True)
60 song =
Song(opt=lyricssettings)
61 song.artist = about.get(
'artist')
62 song.title = about.get(
'title')
63 song.album = about.get(
'album')
64 song.filepath = about.get(
'filename')
66 fetcher = LyricsFetcher(settings=lyricssettings, debug=
True)
67 lyrics = fetcher.get_lyrics(song)
75 log(
"Failed to build lyrics xml file. "
76 "Maybe you don't have lxml installed?", debug=
True)
79 log(
"Everything appears in order.", debug=
True)
82 log(
"Failed to find the lyrics for the test search!", debug=
True)
86 from lxml
import etree
87 xml = etree.XML(
u'<lyrics></lyrics>')
88 etree.SubElement(xml,
"artist").text = song.artist
89 etree.SubElement(xml,
"album").text = song.album
90 etree.SubElement(xml,
"title").text = song.title
91 etree.SubElement(xml,
"syncronized").text =
'True' if about[
'syncronized']
else 'False'
92 etree.SubElement(xml,
"grabber").text = about[
'name']
94 lines = lyrics.lyrics.splitlines()
96 etree.SubElement(xml,
"lyric").text = line
98 print(etree.tostring(xml, encoding=
'UTF-8',
99 pretty_print=
True, xml_declaration=
True).decode())
102 from lxml
import etree
103 xml = etree.XML(
u'<grabber></grabber>')
104 etree.SubElement(xml,
"name").text = about[
'name']
105 etree.SubElement(xml,
"author").text = about[
'author']
106 etree.SubElement(xml,
"command").text = about[
'command']
107 etree.SubElement(xml,
"type").text =
'lyrics'
108 etree.SubElement(xml,
"description").text = about[
'description']
109 etree.SubElement(xml,
"version").text = about[
'version']
110 etree.SubElement(xml,
"priority").text = about[
'priority']
111 etree.SubElement(xml,
"syncronized").text =
'True' if about[
'syncronized']
else 'False'
113 print(etree.tostring(xml, encoding=
'UTF-8',
114 pretty_print=
True, xml_declaration=
True).decode())
117 def main(filename, info, fetcher):
121 about[
'command'] = os.path.basename(filename)
122 if not about.get(
'version'):
123 about[
'version'] = __version__
124 if not about.get(
'album'):
127 LyricsFetcher = fetcher
129 parser = OptionParser()
131 parser.add_option(
'-v',
"--version", action=
"store_true", default=
False,
132 dest=
"version", help=
"Display version and author")
133 parser.add_option(
'-t',
"--test", action=
"store_true", default=
False,
134 dest=
"test", help=
"Test grabber with a known good search")
135 parser.add_option(
'-s',
"--search", action=
"store_true", default=
False,
136 dest=
"search", help=
"Search for lyrics.")
137 parser.add_option(
'-a',
"--artist", metavar=
"ARTIST", default=
None,
138 dest=
"artist", help=
"Artist of track.")
139 parser.add_option(
'-b',
"--album", metavar=
"ALBUM", default=
None,
140 dest=
"album", help=
"Album of track.")
141 parser.add_option(
'-n',
"--title", metavar=
"TITLE", default=
None,
142 dest=
"title", help=
"Title of track.")
143 parser.add_option(
'-f',
"--filename", metavar=
"FILENAME", default=
None,
144 dest=
"filename", help=
"Filename of track.")
145 parser.add_option(
'-d',
'--debug', action=
"store_true", default=
False,
146 dest=
"debug", help=(
"Show debug messages"))
148 opts, args = parser.parse_args()
150 song =
Song(opt=lyricssettings)
162 song.artist = opts.artist
164 song.album = opts.album
166 song.title = opts.title
168 song.filepath = opts.filename
170 fetcher = LyricsFetcher(settings=lyricssettings, debug=debug)
171 lyrics = fetcher.get_lyrics(song)
176 log(
"No lyrics found for this track", debug=
True)