home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 May / maximum-cd-2010-05.iso / DiscContents / boxee-0.9.20.10711.exe / scripts / Lyrics / resources / scrapers / embedded / lyricsScraper.py < prev   
Encoding:
Python Source  |  2009-07-20  |  2.1 KB  |  67 lines

  1. """
  2. Scraper for embedded lyrics
  3.  
  4. Nuka1195
  5. """
  6.  
  7. if ( __name__ != "__main__" ):
  8.     import xbmc
  9. import re
  10.  
  11. __title__ = "Embedded Lyrics"
  12. __allow_exceptions__ = False
  13.  
  14.  
  15. class LyricsFetcher:
  16.     """ required: Fetcher Class for embedded lyrics """
  17.     def __init__( self ):
  18.         self.pattern = "USLT.*?[A-Za-z]{3}\x00([^\x00]*?)\x00"
  19.  
  20.     def get_lyrics( self, artist, song ):
  21.         """ *required: Returns song lyrics or a blank string if none found """
  22.         if ( __name__ == "__main__" ):
  23.             file_path = song
  24.         else:
  25.             file_path = xbmc.Player().getPlayingFile()
  26.         lyrics = self._fetch_lyrics( file_path )
  27.         # if no lyrics found return blank string as there is no song list for embedded lyrics
  28.         if ( lyrics is None ):
  29.             return ""
  30.         else:
  31.             return self._clean_text( lyrics )
  32.     
  33.     def get_lyrics_from_list( self, item ):
  34.         """ *required: Returns song lyrics from user selection - item[1] (not used for embedded) """
  35.         return None
  36.  
  37.     def _fetch_lyrics( self, file_path ):
  38.         """ Fetch lyrics if available """
  39.         try:
  40.             file_object = open( file_path , "rb" )
  41.             file_data = file_object.read()
  42.             file_object.close()
  43.             lyrics = re.findall( self.pattern, file_data )
  44.             return lyrics[ 0 ]
  45.         except:
  46.             return None
  47.  
  48.     def _clean_text( self, text ):
  49.         """ Convert line terminators and html entities """
  50.         text = text.replace( "\t", "" )
  51.         text = text.replace( "\r\n", "\n" )
  52.         text = text.replace( "\r", "\n" )
  53.         if ( text.endswith( "TEXT" ) or text.endswith( "TIT2" ) ):
  54.             text = text[ : -4 ]
  55.         return text
  56.  
  57.  
  58. if ( __name__ == "__main__" ):
  59.     path = "C:\\Documents and Settings\\All Users\\Documents\\My Music\\"
  60.     # used to test get_lyrics() 
  61.     artist = None
  62.     song = [ "The Verve - Bitter Sweet Symphony.mp3", "S.O.S.mp3", "S.O.S_wma.mp3", "Steve Miller Band - Abracadabra.mp3" ]
  63.     lyrics = LyricsFetcher().get_lyrics( artist, path + song[ 0 ] )
  64.     
  65.     # print the results
  66.     print lyrics.encode( "utf-8", "ignore" )
  67.