[grilo-plugins] metrolyrics: Looks up lyrics with metrolyrics.com
- From: Juan A. Suarez Romero <jasuarez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grilo-plugins] metrolyrics: Looks up lyrics with metrolyrics.com
- Date: Mon, 24 Feb 2014 23:35:23 +0000 (UTC)
commit 65d5f17d9491ffb0b51242243e6ae1232ce374f7
Author: Victor Toso <me victortoso com>
Date: Tue Feb 11 23:03:16 2014 -0200
metrolyrics: Looks up lyrics with metrolyrics.com
If media has Artist and Title keys, look up lyrics on
metrolyrics.com.
https://bugzilla.gnome.org/show_bug.cgi?id=711243
src/lua-factory/sources/Makefile.am | 3 +-
src/lua-factory/sources/grl-metrolyrics.lua | 105 +++++++++++++++++++++++++++
2 files changed, 107 insertions(+), 1 deletions(-)
---
diff --git a/src/lua-factory/sources/Makefile.am b/src/lua-factory/sources/Makefile.am
index f540d03..0885cee 100644
--- a/src/lua-factory/sources/Makefile.am
+++ b/src/lua-factory/sources/Makefile.am
@@ -5,7 +5,8 @@
#
# Copyright (C) 2013 Victor Toso. All rights reserved.
-lua_sources_DATA =
+lua_sources_DATA = \
+ grl-metrolyrics.lua
lua_sourcesdir = $(datadir)/$(LUA_FACTORY_SOURCE_LOCATION)
diff --git a/src/lua-factory/sources/grl-metrolyrics.lua b/src/lua-factory/sources/grl-metrolyrics.lua
new file mode 100755
index 0000000..473bf05
--- /dev/null
+++ b/src/lua-factory/sources/grl-metrolyrics.lua
@@ -0,0 +1,105 @@
+--[[
+ * Copyright (C) 2014 Victor Toso.
+ *
+ * Contact: Victor Toso <me victortoso com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+--]]
+
+---------------------------
+-- Source initialization --
+---------------------------
+
+source = {
+ id = "grl-metrolyrics",
+ name = "Metrolyrics",
+ description = "a source for lyrics",
+ supported_keys = { "lyrics" },
+ resolve_keys = {
+ ["type"] = "audio",
+ required = { "artist", "title" },
+ },
+}
+
+netopts = {
+ user_agent = "Grilo Source Metrolyrics/0.2.8",
+}
+
+------------------
+-- Source utils --
+------------------
+
+METROLYRICS_INVALID_URL_CHARS = "[" .. "%(%)%[%]%$%&" .. "]"
+METROLYRICS_DEFAULT_QUERY = "http://www.metrolyrics.com/%s-lyrics-%s.html"
+
+---------------------------------
+-- Handlers of Grilo functions --
+---------------------------------
+
+function grl_source_resolve()
+ local url, req
+ local artist, title
+
+ req = grl.get_media_keys()
+ if not req or not req.artist or not req.title then
+ grl.callback()
+ end
+
+ -- Prepare artist and title strings to the url
+ artist = req.artist:gsub(METROLYRICS_INVALID_URL_CHARS, "")
+ artist = artist:gsub("%s+", "-")
+ title = req.title:gsub(METROLYRICS_INVALID_URL_CHARS, "")
+ title = title:gsub("%s+", "-")
+ url = string.format(METROLYRICS_DEFAULT_QUERY, title, artist)
+ grl.fetch(url, "fetch_page_cb", netopts)
+end
+
+---------------
+-- Utilities --
+---------------
+
+function fetch_page_cb(feed)
+ local media = nil
+ if feed and not feed:find("notfound") then
+ media = metrolyrics_get_lyrics(feed)
+ end
+ grl.callback(media, 0)
+end
+
+function metrolyrics_get_lyrics(feed)
+ local media = {}
+ local res = {}
+ local lyrics_body = '<div class="lyrics%-body">(.-)</div>'
+ local lyrics_verse = "<p class='verse'>(.-)</p>"
+
+ -- from html, get lyrics line by line into table res
+ feed = feed:match(lyrics_body)
+ for verse in feed:gmatch(lyrics_verse) do
+ local start = 1
+ local e, s = verse:find("<br/>")
+ while (e) do
+ res[#res + 1] = verse:sub(start, e-1)
+ start = s+1
+ e, s = verse:find("<br/>", start)
+ end
+ res[#res + 1] = verse:sub(start, #verse) .. '\n\n'
+ end
+
+ -- switch table to string
+ media.lyrics = table.concat(res)
+ return media
+end
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]