MythTV master
lyricsScraper.py
Go to the documentation of this file.
1#-*- coding: UTF-8 -*-
2import sys
3import requests
4import urllib.parse
5import re
6from lib.utils import *
7
8__title__ = 'lyricsmode'
9__priority__ = '220'
10__lrc__ = False
11
13 def __init__(self, *args, **kwargs):
14 self.DEBUG = kwargs['debug']
15 self.settings = kwargs['settings']
16
17 def get_lyrics(self, song):
18 log('%s: searching lyrics for %s - %s' % (__title__, song.artist, song.title), debug=self.DEBUG)
19 lyrics = Lyrics(settings=self.settings)
20 lyrics.song = song
21 lyrics.source = __title__
22 lyrics.lrc = __lrc__
23 artist = deAccent(song.artist)
24 title = deAccent(song.title)
25 url = 'http://www.lyricsmode.com/lyrics/%s/%s/%s.html' % (artist.lower()[:1], artist.lower().replace('&','and').replace(' ','_'), title.lower().replace('&','and').replace(' ','_'))
26 result = self.direct_url(url)
27 if not result:
28 result = self.search_url(artist, title)
29 if result:
30 lyr = result.split('style="position: relative;">')[1].split('<div')[0]
31 lyrics.lyrics = lyr.replace('<br />', '')
32 return lyrics
33
34 def direct_url(self, url):
35 try:
36 log('%s: direct url: %s' % (__title__, url), debug=self.DEBUG)
37 song_search = requests.get(url, timeout=10)
38 response = song_search.text
39 if response.find('lyrics_text') >= 0:
40 return response
41 except:
42 log('error in direct url', debug=self.DEBUG)
43
44 def search_url(self, artist, title):
45 try:
46 url = 'http://www.lyricsmode.com/search.php?search=' + urllib.parse.quote_plus(artist.lower() + ' ' + title.lower())
47 log('%s: search url: %s' % (__title__, url), debug=self.DEBUG)
48 song_search = requests.get(url, timeout=10)
49 response = song_search.text
50 matchcode = re.search('lm-list__cell-title">.*?<a href="(.*?)" class="lm-link lm-link--primary', response, flags=re.DOTALL)
51 try:
52 url = 'http://www.lyricsmode.com' + (matchcode.group(1))
53 result = self.direct_url(url)
54 if result:
55 return result
56 except:
57 return
58 except:
59 log('error in search url', debug=self.DEBUG)
def deAccent(str)
Definition: utils.py:32
None log(str msg, int level=LOGDEBUG)
Definition: xbmc.py:9