5 Scraper for file lyrics
8 import sys, os, re, chardet
9 import xml.dom.minidom
as xml
10 from optparse
import OptionParser
13 __author__ =
"Paul Harrison"
14 __title__ =
"FileLyrics"
15 __description__ =
"Search the same directory as the track for lyrics"
18 __syncronized__ =
True
27 utilities.log(debug,
"%s: searching lyrics for %s - %s - %s" % (__title__, lyrics.artist, lyrics.album, lyrics.title))
30 filename = lyrics.filename.decode(
"utf-8")
32 filename = lyrics.filename
33 filename = os.path.splitext(filename)[0]
36 lyricFile = filename +
'.lrc'
37 utilities.log(debug,
"%s: searching for lyrics file: %s " % (__title__, lyricFile))
38 if os.path.exists(lyricFile)
and os.path.isfile(lyricFile):
40 with open (lyricFile,
"r")
as f:
52 lyrics = utilities.Lyrics()
53 lyrics.source = __title__
54 lyrics.syncronized = __syncronized__
55 lyrics.artist =
'Robb Benson'
56 lyrics.album =
'Demo Tracks'
57 lyrics.title =
'Lone Rock'
58 lyrics.filename = os.path.dirname(os.path.abspath(__file__)) +
'/examples/filelyrics.mp3'
60 found = fetcher.get_lyrics(lyrics)
66 utilities.log(
True,
"Failed to build lyrics xml file. "
67 "Maybe you don't have lxml installed?")
70 utilities.log(
True,
"Everything appears in order.")
73 utilities.log(
True,
"Failed to find the lyrics for the test search!")
77 from lxml
import etree
78 xml = etree.XML(
u'<lyrics></lyrics>')
79 etree.SubElement(xml,
"artist").text = lyrics.artist
80 etree.SubElement(xml,
"album").text = lyrics.album
81 etree.SubElement(xml,
"title").text = lyrics.title
82 etree.SubElement(xml,
"syncronized").text =
'True' if __syncronized__
else 'False'
83 etree.SubElement(xml,
"grabber").text = lyrics.source
85 lines = lyrics.lyrics.splitlines()
87 etree.SubElement(xml,
"lyric").text = line
89 utilities.log(
True, utilities.convert_etree(etree.tostring(xml, encoding=
'UTF-8',
90 pretty_print=
True, xml_declaration=
True)))
93 from lxml
import etree
94 version = etree.XML(
u'<grabber></grabber>')
95 etree.SubElement(version,
"name").text = __title__
96 etree.SubElement(version,
"author").text = __author__
97 etree.SubElement(version,
"command").text =
'alsong.py'
98 etree.SubElement(version,
"type").text =
'lyrics'
99 etree.SubElement(version,
"description").text = __description__
100 etree.SubElement(version,
"version").text = __version__
101 etree.SubElement(version,
"priority").text = __priority__
102 etree.SubElement(version,
"syncronized").text =
'True' if __syncronized__
else 'False'
104 utilities.log(
True, utilities.convert_etree(etree.tostring(version, encoding=
'UTF-8',
105 pretty_print=
True, xml_declaration=
True)))
111 parser = OptionParser()
113 parser.add_option(
'-v',
"--version", action=
"store_true", default=
False,
114 dest=
"version", help=
"Display version and author")
115 parser.add_option(
'-t',
"--test", action=
"store_true", default=
False,
116 dest=
"test", help=
"Perform self-test for dependencies.")
117 parser.add_option(
'-s',
"--search", action=
"store_true", default=
False,
118 dest=
"search", help=
"Search for lyrics.")
119 parser.add_option(
'-a',
"--artist", metavar=
"ARTIST", default=
None,
120 dest=
"artist", help=
"Artist of track.")
121 parser.add_option(
'-b',
"--album", metavar=
"ALBUM", default=
None,
122 dest=
"album", help=
"Album of track.")
123 parser.add_option(
'-n',
"--title", metavar=
"TITLE", default=
None,
124 dest=
"title", help=
"Title of track.")
125 parser.add_option(
'-f',
"--filename", metavar=
"FILENAME", default=
None,
126 dest=
"filename", help=
"Filename of track.")
127 parser.add_option(
'-d',
'--debug', action=
"store_true", default=
False,
128 dest=
"debug", help=(
"Show debug messages"))
130 opts, args = parser.parse_args()
132 lyrics = utilities.Lyrics()
133 lyrics.source = __title__
134 lyrics.syncronized = __syncronized__
146 lyrics.artist = opts.artist
148 lyrics.album = opts.album
150 lyrics.title = opts.title
152 lyrics.filename = opts.filename
155 if fetcher.get_lyrics(lyrics):
159 utilities.log(
True,
"No lyrics found for this track")
162 if __name__ ==
'__main__':