home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import urllib
- import re
- import rb
-
- class AstrawebParser(object):
-
- def __init__(self, artist, title):
- self.artist = artist
- self.title = title
-
-
- def search(self, callback, *data):
- wartist = re.sub('%20', '+', urllib.quote(self.artist))
- wtitle = re.sub('%20', '+', urllib.quote(self.title))
- wurl = 'http://search.lyrics.astraweb.com/?word=%s+%s' % (wartist, wtitle)
- loader = rb.Loader()
- loader.get_url(wurl, self.got_results, callback, *data)
-
-
- def got_results(self, result, callback, *data):
- if result is None:
- callback(None, *data)
- return None
- results = re.sub('\n', '', re.sub('\r', '', result))
- if re.search('(<tr><td bgcolor="#BBBBBB".*)(More Songs >)', results) is not None:
- body = re.split('(<tr><td bgcolor="#BBBBBB".*)(More Songs >)', results)[1]
- entries = re.split('<tr><td bgcolor="#BBBBBB"', body)
- entries.pop(0)
- print 'found %d entries; looking for [%s,%s]' % (len(entries), self.title.lower().strip(), self.artist.lower().strip())
- for entry in entries:
- url = re.split('(\\/display[^"]*)', entry)[1]
- artist = re.split('(Artist:.*html">)([^<]*)', entry)[2]
- title = re.split('(\\/display[^>]*)([^<]*)', entry)[2][1:]
- print 'checking [%s,%s]' % (title.lower().strip(), artist.lower().strip())
- if title.lower().find(self.title.lower().strip()) != -1:
- if artist.lower().find(self.artist.lower().strip()) != -1:
- loader = rb.Loader()
- loader.get_url('http://display.lyrics.astraweb.com' + url, self.parse_lyrics, callback, *data)
- return None
- continue
- artist.lower().find(self.artist.lower().strip()) != -1
-
-
- callback(None, *data)
-
-
- def parse_lyrics(self, result, callback, *data):
- if result is None:
- callback(None, *data)
- return None
- result = re.sub('\n', '', re.sub('\r', '', result))
- artist_title = re.split('(<title>Lyrics: )([^<]*)', result)[2]
- artist = artist_title.split(' - ')[0]
- title = artist_title.split(' - ')[1]
- title = '%s - %s\n\n' % (artist, title)
- lyrics = re.split('(<font face=arial size=2>)(.*)(<\\/font><br></td><td*)', result)[2]
- lyrics = title + lyrics
- lyrics = re.sub('<[Bb][Rr][^>]*>', '\n', lyrics)
- lyrics += '\n\nLyrics provided by lyrics.astraweb.com'
- callback(lyrics, *data)
-
-
-