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))
29 filename = lyrics.filename
30 filename = os.path.splitext(filename)[0]
33 lyricFile = filename +
'.lrc'
34 utilities.log(debug,
"%s: searching for lyrics file: %s " % (__title__, lyricFile))
35 if os.path.exists(lyricFile)
and os.path.isfile(lyricFile):
37 with open (lyricFile,
"r")
as f:
49 lyrics = utilities.Lyrics()
50 lyrics.source = __title__
51 lyrics.syncronized = __syncronized__
52 lyrics.artist =
'Robb Benson'
53 lyrics.album =
'Demo Tracks'
54 lyrics.title =
'Lone Rock'
55 lyrics.filename = os.path.dirname(os.path.abspath(__file__)) +
'/examples/filelyrics.mp3'
57 found = fetcher.get_lyrics(lyrics)
63 utilities.log(
True,
"Failed to build lyrics xml file. "
64 "Maybe you don't have lxml installed?")
67 utilities.log(
True,
"Everything appears in order.")
70 utilities.log(
True,
"Failed to find the lyrics for the test search!")
74 from lxml
import etree
75 xml = etree.XML(
u'<lyrics></lyrics>')
76 etree.SubElement(xml,
"artist").text = lyrics.artist
77 etree.SubElement(xml,
"album").text = lyrics.album
78 etree.SubElement(xml,
"title").text = lyrics.title
79 etree.SubElement(xml,
"syncronized").text =
'True' if __syncronized__
else 'False'
80 etree.SubElement(xml,
"grabber").text = lyrics.source
82 lines = lyrics.lyrics.splitlines()
84 etree.SubElement(xml,
"lyric").text = line
86 utilities.log(
True, utilities.convert_etree(etree.tostring(xml, encoding=
'UTF-8',
87 pretty_print=
True, xml_declaration=
True)))
90 from lxml
import etree
91 version = etree.XML(
u'<grabber></grabber>')
92 etree.SubElement(version,
"name").text = __title__
93 etree.SubElement(version,
"author").text = __author__
94 etree.SubElement(version,
"command").text =
'filelyrics.py'
95 etree.SubElement(version,
"type").text =
'lyrics'
96 etree.SubElement(version,
"description").text = __description__
97 etree.SubElement(version,
"version").text = __version__
98 etree.SubElement(version,
"priority").text = __priority__
99 etree.SubElement(version,
"syncronized").text =
'True' if __syncronized__
else 'False'
101 utilities.log(
True, utilities.convert_etree(etree.tostring(version, encoding=
'UTF-8',
102 pretty_print=
True, xml_declaration=
True)))
108 parser = OptionParser()
110 parser.add_option(
'-v',
"--version", action=
"store_true", default=
False,
111 dest=
"version", help=
"Display version and author")
112 parser.add_option(
'-t',
"--test", action=
"store_true", default=
False,
113 dest=
"test", help=
"Perform self-test for dependencies.")
114 parser.add_option(
'-s',
"--search", action=
"store_true", default=
False,
115 dest=
"search", help=
"Search for lyrics.")
116 parser.add_option(
'-a',
"--artist", metavar=
"ARTIST", default=
None,
117 dest=
"artist", help=
"Artist of track.")
118 parser.add_option(
'-b',
"--album", metavar=
"ALBUM", default=
None,
119 dest=
"album", help=
"Album of track.")
120 parser.add_option(
'-n',
"--title", metavar=
"TITLE", default=
None,
121 dest=
"title", help=
"Title of track.")
122 parser.add_option(
'-f',
"--filename", metavar=
"FILENAME", default=
None,
123 dest=
"filename", help=
"Filename of track.")
124 parser.add_option(
'-d',
'--debug', action=
"store_true", default=
False,
125 dest=
"debug", help=(
"Show debug messages"))
127 opts, args = parser.parse_args()
129 lyrics = utilities.Lyrics()
130 lyrics.source = __title__
131 lyrics.syncronized = __syncronized__
143 lyrics.artist = opts.artist
145 lyrics.album = opts.album
147 lyrics.title = opts.title
149 lyrics.filename = opts.filename
152 if fetcher.get_lyrics(lyrics):
156 utilities.log(
True,
"No lyrics found for this track")
159 if __name__ ==
'__main__':