[rhythmbox] lyrics: add parsers for jetlyrics.com and j-lyric.net
- From: Jonathan Matthew <jmatthew src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rhythmbox] lyrics: add parsers for jetlyrics.com and j-lyric.net
- Date: Sun, 21 Oct 2012 08:44:39 +0000 (UTC)
commit 14b9e2312cb6f92bce7d01c0510717af785615b2
Author: hejian <hejian he gmail com>
Date: Sun Oct 21 18:43:57 2012 +1000
lyrics: add parsers for jetlyrics.com and j-lyric.net
https://bugzilla.gnome.org/show_bug.cgi?id=674178
plugins/lyrics/JetlyricsParser.py | 75 +++++++++++++++++++++++++++++++++++++
plugins/lyrics/JlyricParser.py | 69 ++++++++++++++++++++++++++++++++++
plugins/lyrics/LyricsSites.py | 4 ++
plugins/lyrics/Makefile.am | 4 +-
4 files changed, 151 insertions(+), 1 deletions(-)
---
diff --git a/plugins/lyrics/JetlyricsParser.py b/plugins/lyrics/JetlyricsParser.py
new file mode 100644
index 0000000..95864c9
--- /dev/null
+++ b/plugins/lyrics/JetlyricsParser.py
@@ -0,0 +1,75 @@
+# -*- Mode: python; coding: utf-8; tab-width: 8; indent-tabs-mode: t; -*-
+#
+# Copyright (C) 2012 He Jian <hejian he gmail com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# The Rhythmbox authors hereby grant permission for non-GPL compatible
+# GStreamer plugins to be used and distributed together with GStreamer
+# and Rhythmbox. This permission is above and beyond the permissions granted
+# by the GPL license by which Rhythmbox is covered. If you modify this code
+# you may extend this exception to your version of the code, but you are not
+# obligated to do so. If you do not wish to do so, delete this exception
+# statement from your version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import rb
+import urllib
+import re
+
+class JetlyricsParser (object):
+ def __init__ (self, artist, title):
+ self.artist = artist
+ self.title = title
+
+ def search (self, callback, *data):
+ artist = re.sub('%20', '+', urllib.quote(self.artist))
+ title = re.sub('%20', '+', urllib.quote(self.title))
+ q = title + ' - ' + artist
+ url = 'http://www.jetlyrics.com/search.php?q=%s' % (q)
+ loader = rb.Loader()
+ loader.get_url (url, self.got_results, callback, *data)
+
+ def got_results (self, result, callback, *data):
+ if result is None:
+ callback (None, *data)
+ return
+
+ m = re.search('<a href=\'(http://jetlyrics\.com/viewlyrics\.php\?id=[0-9]*)\'>', result)
+ if m is None:
+ callback (None, *data)
+ return
+
+ loader = rb.Loader()
+ loader.get_url (m.group(1), self.parse_lyrics, callback, *data)
+
+ def parse_lyrics (self, result, callback, *data):
+ if result is None:
+ callback (None, *data)
+ return
+
+ lyrics = re.split ('<div id=lyricsText>', result)[1]
+ lyrics = re.split ('</div>', lyrics)[0]
+
+ lyrics = re.sub('<br/>', '\n', lyrics)
+ lyrics = re.sub('<br />', '\n', lyrics)
+ lyrics = re.sub('<br>', '\n', lyrics)
+ lyrics = re.sub('<noscript><a href=\'http://jetlyrics.com\'>Lyrics</a></noscript>', '', lyrics)
+ lyrics = re.sub('<a href=\'http://jetlyrics.com\'>Jet Lyrics</a>', '', lyrics)
+
+ lyrics = self.title + "\n\n" + lyrics
+ lyrics += "\n\nLyrics provided by jetlyrics.com"
+
+ callback (lyrics, *data)
+
diff --git a/plugins/lyrics/JlyricParser.py b/plugins/lyrics/JlyricParser.py
new file mode 100644
index 0000000..56f237f
--- /dev/null
+++ b/plugins/lyrics/JlyricParser.py
@@ -0,0 +1,69 @@
+# -*- Mode: python; coding: utf-8; tab-width: 8; indent-tabs-mode: t; -*-
+#
+# Copyright (C) 2012 He Jian <hejian he gmail com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# The Rhythmbox authors hereby grant permission for non-GPL compatible
+# GStreamer plugins to be used and distributed together with GStreamer
+# and Rhythmbox. This permission is above and beyond the permissions granted
+# by the GPL license by which Rhythmbox is covered. If you modify this code
+# you may extend this exception to your version of the code, but you are not
+# obligated to do so. If you do not wish to do so, delete this exception
+# statement from your version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+import rb
+import urllib
+import re
+
+class JlyricParser (object):
+ def __init__ (self, artist, title):
+ self.artist = artist
+ self.title = title
+
+ def search (self, callback, *data):
+ artist = re.sub('%20', '+', urllib.quote(self.artist))
+ title = re.sub('%20', '+', urllib.quote(self.title))
+ url = 'http://j-lyric.net/index.php?kt=%s&ka=%s' % (title, artist)
+ loader = rb.Loader()
+ loader.get_url (url, self.got_results, callback, *data)
+
+ def got_results (self, result, callback, *data):
+ if result is None:
+ callback (None, *data)
+ return
+
+ m = re.search('<div class=\'title\'><a href=\'(/artist/[^\.]*\.html)\'>', result)
+ if m is None:
+ callback (None, *data)
+ return
+
+ loader = rb.Loader()
+ loader.get_url ('http://j-lyric.net' + m.group(1), self.parse_lyrics, callback, *data)
+
+ def parse_lyrics (self, result, callback, *data):
+ if result is None:
+ callback (None, *data)
+ return
+
+ lyrics = re.split ('<p id=\'lyricBody\'>', result)[1]
+ lyrics = re.split ('</p>', lyrics)[0]
+
+ lyrics = re.sub('<br />', '', lyrics)
+ lyrics = self.title + "\n\n" + lyrics
+ lyrics += "\n\nLyrics provided by j-lyric.net"
+
+ callback (lyrics, *data)
+
diff --git a/plugins/lyrics/LyricsSites.py b/plugins/lyrics/LyricsSites.py
index 2edafe6..cf03b5f 100644
--- a/plugins/lyrics/LyricsSites.py
+++ b/plugins/lyrics/LyricsSites.py
@@ -29,6 +29,8 @@
from WinampcnParser import WinampcnParser
from TerraParser import TerraParser
from DarkLyricsParser import DarkLyricsParser
+from JlyricParser import JlyricParser
+from JetlyricsParser import JetlyricsParser
from gi.repository import RB
@@ -40,5 +42,7 @@ lyrics_sites = [
{ 'id': 'winampcn.com', 'class': WinampcnParser, 'name': _("WinampCN (www.winampcn.com)") },
{ 'id': 'terra.com.br', 'class': TerraParser, 'name': _("TerraBrasil (terra.com.br)") },
{ 'id': 'darklyrics.com', 'class': DarkLyricsParser, 'name': _("Dark Lyrics (darklyrics.com)") }
+ { 'id': 'j-lyric.net', 'class': JlyricParser, 'name': _("Jlyric (j-lyric.net)") },
+ { 'id': 'jetlyrics.com', 'class': JetlyricsParser, 'name': _("Jetlyrics (jetlyrics.com)") }
]
diff --git a/plugins/lyrics/Makefile.am b/plugins/lyrics/Makefile.am
index defba41..5b81981 100644
--- a/plugins/lyrics/Makefile.am
+++ b/plugins/lyrics/Makefile.am
@@ -11,7 +11,9 @@ plugin_PYTHON = \
LyricWikiParser.py \
WinampcnParser.py \
TerraParser.py \
- DarkLyricsParser.py
+ DarkLyricsParser.py \
+ JlyricParser.py \
+ JetlyricsParser.py
%.plugin: %.plugin.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache
plugin_DATA = $(plugin_in_files:.plugin.in=.plugin)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]