[rhythmbox/wip/python3: 22/35] lyrics: more python 3 porting
- From: Jonathan Matthew <jmatthew src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rhythmbox/wip/python3: 22/35] lyrics: more python 3 porting
- Date: Sun, 21 Apr 2013 00:04:39 +0000 (UTC)
commit b8a0090f46825345900e209767b11ec63bde8f6f
Author: Jonathan Matthew <jonathan d14n org>
Date: Tue Apr 16 20:56:36 2013 +1000
lyrics: more python 3 porting
plugins/lyrics/AstrawebParser.py | 9 ++---
plugins/lyrics/DarkLyricsParser.py | 6 ++--
plugins/lyrics/JetlyricsParser.py | 72 ++++++++++++++++++++------------------
plugins/lyrics/JlyricParser.py | 63 +++++++++++++++++----------------
plugins/lyrics/LyricWikiParser.py | 8 ++---
plugins/lyrics/LyricsParse.py | 3 --
plugins/lyrics/TerraParser.py | 21 ++++++-----
plugins/lyrics/WinampcnParser.py | 24 ++++---------
plugins/lyrics/lyrics.py | 6 ++--
9 files changed, 101 insertions(+), 111 deletions(-)
---
diff --git a/plugins/lyrics/AstrawebParser.py b/plugins/lyrics/AstrawebParser.py
index b2b0d86..bf4e488 100644
--- a/plugins/lyrics/AstrawebParser.py
+++ b/plugins/lyrics/AstrawebParser.py
@@ -25,7 +25,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-import urllib
+import urllib.parse
import re
import rb
@@ -39,8 +39,8 @@ class AstrawebParser (object):
self.title = title
def search(self, callback, *data):
- wartist = re.sub('%20', '+', urllib.quote(self.artist))
- wtitle = re.sub('%20', '+', urllib.quote(self.title))
+ wartist = urllib.parse.quote_plus(self.artist)
+ wtitle = urllib.parse.quote_plus(self.title)
wurl = 'http://search.lyrics.astraweb.com/?word=%s+%s' % (wartist, wtitle)
@@ -52,6 +52,7 @@ class AstrawebParser (object):
callback (None, *data)
return
+ result = result.decode('iso-8859-1') # no indication of anything else..
results = re.sub('\n', '', re.sub('\r', '', result))
if re.search('(<tr><td bgcolor="#BBBBBB".*)(More Songs >)', results) is not None:
@@ -85,6 +86,7 @@ class AstrawebParser (object):
callback (None, *data)
return
+ result = result.decode('iso-8859-1')
result = re.sub('\n', '', re.sub('\r', '', result))
artist_title = re.split('(<title>Lyrics: )([^<]*)', result)[2]
@@ -98,4 +100,3 @@ class AstrawebParser (object):
lyrics += "\n\nLyrics provided by lyrics.astraweb.com"
callback (lyrics, *data)
-
diff --git a/plugins/lyrics/DarkLyricsParser.py b/plugins/lyrics/DarkLyricsParser.py
index e9a57c5..ae179ff 100644
--- a/plugins/lyrics/DarkLyricsParser.py
+++ b/plugins/lyrics/DarkLyricsParser.py
@@ -58,8 +58,8 @@ class DarkLyricsParser (object):
if artist_page is None:
callback (None, *data)
return
- link_section = re.split ('tban.js',
- artist_page, 1)[1]
+ artist_page = artist_page.decode('iso-8859-1')
+ link_section = re.split ('tban.js', artist_page, 1)[1]
pattern_link = '<a href="'
pattern_artist = '([^"]*)">*([^<]*)<'
links = re.split (pattern_link, link_section.lower())
@@ -108,6 +108,7 @@ class DarkLyricsParser (object):
if songlist is None:
callback (None, *data)
return
+ songlist = songlist.decode('iso-8859-1')
# Search for all the <a>
# filter for those that has the artist name string_match
# and for those which its content is artist string_match
@@ -147,6 +148,7 @@ class DarkLyricsParser (object):
if album is None:
callback (None, *data)
return
+ album = album.decode('iso-8859-1')
titleline = '<a name="%s">%s. %s(.*?)</a>' % \
(self.titlenumber, self.titlenumber, re.escape(self.title.title()))
lyricmatch = re.split (titleline, album)
diff --git a/plugins/lyrics/JetlyricsParser.py b/plugins/lyrics/JetlyricsParser.py
index 95864c9..dbe3e25 100644
--- a/plugins/lyrics/JetlyricsParser.py
+++ b/plugins/lyrics/JetlyricsParser.py
@@ -25,51 +25,53 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
import rb
-import urllib
+import urllib.parse
import re
class JetlyricsParser (object):
- def __init__ (self, artist, title):
- self.artist = artist
- self.title = title
+ 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 search (self, callback, *data):
+ artist = urllib.parse.quote_plus(self.artist)
+ title = urllib.parse.quote_plus(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
+ def got_results (self, result, callback, *data):
+ if result is None:
+ callback (None, *data)
+ return
+ result = result.decode('utf-8')
- m = re.search('<a href=\'(http://jetlyrics\.com/viewlyrics\.php\?id=[0-9]*)\'>', result)
- if m 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)
+ 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
+ def parse_lyrics (self, result, callback, *data):
+ if result is None:
+ callback (None, *data)
+ return
+ result = result.decode('utf-8')
- lyrics = re.split ('<div id=lyricsText>', result)[1]
- lyrics = re.split ('</div>', lyrics)[0]
+ 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 = 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"
+ lyrics = self.title + "\n\n" + lyrics
+ lyrics += "\n\nLyrics provided by jetlyrics.com"
- callback (lyrics, *data)
+ callback (lyrics, *data)
diff --git a/plugins/lyrics/JlyricParser.py b/plugins/lyrics/JlyricParser.py
index 56f237f..ce1ae7b 100644
--- a/plugins/lyrics/JlyricParser.py
+++ b/plugins/lyrics/JlyricParser.py
@@ -25,45 +25,46 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
import rb
-import urllib
+import urllib.parse
import re
class JlyricParser (object):
- def __init__ (self, artist, title):
- self.artist = artist
- self.title = title
+ 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 search (self, callback, *data):
+ artist = urllib.parse.quote_plus(self.artist)
+ title = urllib.parse.quote_plus(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
+ 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
+ result = result.decode('utf-8')
+ 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
+ loader = rb.Loader()
+ loader.get_url ('http://j-lyric.net' + m.group(1), self.parse_lyrics, callback, *data)
- lyrics = re.split ('<p id=\'lyricBody\'>', result)[1]
- lyrics = re.split ('</p>', lyrics)[0]
+ def parse_lyrics (self, result, callback, *data):
+ if result is None:
+ callback (None, *data)
+ return
- lyrics = re.sub('<br />', '', lyrics)
- lyrics = self.title + "\n\n" + lyrics
- lyrics += "\n\nLyrics provided by j-lyric.net"
+ result = result.decode('utf-8')
+ lyrics = re.split ('<p id=\'lyricBody\'>', result)[1]
+ lyrics = re.split ('</p>', lyrics)[0]
- callback (lyrics, *data)
+ 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/LyricWikiParser.py b/plugins/lyrics/LyricWikiParser.py
index a333a90..969e4ef 100644
--- a/plugins/lyrics/LyricWikiParser.py
+++ b/plugins/lyrics/LyricWikiParser.py
@@ -25,7 +25,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-import urllib
+import urllib.parse
import rb
from xml.dom import minidom
@@ -35,8 +35,8 @@ class LyricWikiParser(object):
self.title = title
def search(self, callback, *data):
- artist = urllib.quote(self.artist.replace(' ', '_'))
- title = urllib.quote(self.title.replace(' ', '_'))
+ artist = urllib.parse.quote(self.artist.replace(' ', '_'))
+ title = urllib.parse.quote(self.title.replace(' ', '_'))
htstring = 'http://lyricwiki.org/api.php?artist=%s&song=%s&fmt=text' % (artist, title)
@@ -48,7 +48,7 @@ class LyricWikiParser(object):
callback (None, *data)
return
+ result = result.decode('iso-8859-1')
result += "\n\nLyrics provided by lyricwiki.org"
callback (result, *data)
-
diff --git a/plugins/lyrics/LyricsParse.py b/plugins/lyrics/LyricsParse.py
index 3103438..5722551 100644
--- a/plugins/lyrics/LyricsParse.py
+++ b/plugins/lyrics/LyricsParse.py
@@ -24,9 +24,6 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-import urllib
-import re
-
import rb
from gi.repository import GObject, Gio
diff --git a/plugins/lyrics/TerraParser.py b/plugins/lyrics/TerraParser.py
index 1d42db8..d131667 100644
--- a/plugins/lyrics/TerraParser.py
+++ b/plugins/lyrics/TerraParser.py
@@ -26,12 +26,12 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-import urllib
+import urllib.parse
import rb
import re
import sys
-# Deal with html entitys and utf-8
+# Deal with html entities and utf-8
# code taken from django/utils/text.py
from html.entities import name2codepoint
@@ -47,12 +47,12 @@ def _replace_entity(match):
c = int(text[1:], 16)
else:
c = int(text)
- return unichr(c)
+ return chr(c)
except ValueError:
return match.group(0)
else:
try:
- return unichr(name2codepoint[text])
+ return chr(name2codepoint[text])
except (ValueError, KeyError):
return match.group(0)
@@ -65,11 +65,11 @@ class TerraParser (object):
self.title = title
def search(self, callback, *data):
- path = 'http://letras.terra.com.br/'
+ path = 'http://letras.mus.br/'
- artist = urllib.quote(self.artist)
- title = urllib.quote(self.title)
- join = urllib.quote(' - ')
+ artist = urllib.parse.quote(self.artist)
+ title = urllib.parse.quote(self.title)
+ join = urllib.parse.quote(' - ')
wurl = 'winamp.php?t=%s%s%s' % (artist, join, title)
print("search URL: " + wurl)
@@ -83,7 +83,7 @@ class TerraParser (object):
return
if result is not None:
- result = result.decode('iso-8859-1').encode('UTF-8')
+ result = result.decode('utf-8')
if re.search('Música não encontrada', result):
print("not found")
callback (None, *data)
@@ -107,6 +107,5 @@ class TerraParser (object):
lyrics = re.sub('<[Bb][Rr]/>', '', lyrics)
lyrics = unescape_entities(artistitle) + "\n" + unescape_entities(lyrics)
- lyrics += "\n\nEsta letra foi disponibilizada pelo site\nhttp://letras.terra.com.br"
-
+ lyrics += "\n\nEsta letra foi disponibilizada pelo site\nhttp://letras.mus.br"
return lyrics
diff --git a/plugins/lyrics/WinampcnParser.py b/plugins/lyrics/WinampcnParser.py
index 4f9a546..216e89d 100644
--- a/plugins/lyrics/WinampcnParser.py
+++ b/plugins/lyrics/WinampcnParser.py
@@ -25,20 +25,11 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
import sys
-import urllib
+import urllib.parse
import re
import rb
from xml.dom import minidom
-def detect_charset(s):
- charsets = ('iso-8859-1', 'gbk', 'utf-8')
- for charset in charsets:
- try:
- return unicode(unicode(s, 'utf-8').encode(charset), 'gbk')
- except:
- continue
- return s
-
class WinampcnParser(object):
def __init__(self, artist, title):
self.artist = artist
@@ -47,8 +38,8 @@ class WinampcnParser(object):
def search(self, callback, *data):
# encode search string
- title_encode = urllib.quote(detect_charset(self.title).encode('gbk').replace(' ', ''))
- artist_encode = urllib.quote(detect_charset(self.artist).encode('gbk').replace(' ',''))
+ title_encode = urllib.parse.quote(self.title.replace(' ', '').encode('gbk'))
+ artist_encode = urllib.parse.quote(self.artist.replace(' ', '').encode('gbk'))
url =
'http://www.winampcn.com/lyrictransfer/get.aspx?song=%s&artist=%s&lsong=%s&Datetime=20060601' %
(title_encode, artist_encode, title_encode)
loader = rb.Loader()
@@ -60,9 +51,9 @@ class WinampcnParser(object):
print("no response")
callback (None, *data)
return
+ xmltext = xmltext.decode('gbk')
try:
- xmltext = xmltext.decode('gbk').encode('UTF-8')
xmltext = xmltext.replace('encoding="gb2312"', 'encoding="UTF-8"')
xmldoc = minidom.parseString(xmltext)
root = xmldoc.documentElement
@@ -91,16 +82,13 @@ class WinampcnParser(object):
return
# transform it into plain text
- lrcplaintext = lyrics
+ lrcplaintext = lyrics.decode('gbk')
try:
lrcplaintext = re.sub('\[.*?\]', '', lrcplaintext)
- lrcplaintext = lrcplaintext.decode('gbk').encode('UTF-8')
except:
print("unable to decode lyrics")
- callback (lrcplaintext, *data)
+ callback (None, *data)
return
- # callback and show
lrcplaintext += "\n\nLyrics provided by winampcn.com"
callback(lrcplaintext, *data)
-
diff --git a/plugins/lyrics/lyrics.py b/plugins/lyrics/lyrics.py
index cd08255..31e68d5 100644
--- a/plugins/lyrics/lyrics.py
+++ b/plugins/lyrics/lyrics.py
@@ -27,7 +27,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
import os, re
-import urllib
+import urllib.request
import rb
from gi.repository import Gtk, Gio, GObject, Peas
@@ -150,7 +150,7 @@ class LyricGrabber(object):
if status:
l = rb.Loader()
- l.get_url('file://' + urllib.pathname2url(self.cache_path), callback)
+ l.get_url('file://' + urllib.request.pathname2url(self.cache_path), callback)
elif cache_only:
self.callback(_("No lyrics found"))
elif self.artist == "" and self.title == "":
@@ -158,7 +158,7 @@ class LyricGrabber(object):
else:
def lyric_callback (text):
if text is not None:
- f = file (self.cache_path, 'w')
+ f = open(self.cache_path, 'wt')
f.write (text)
f.close ()
self.callback(text)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]