MythTV master
lyricsScraper.py
Go to the documentation of this file.
1#-*- coding: UTF-8 -*-
2'''
3Scraper for https://lrclib.net/
4
5lrclib
6
7https://github.com/rtcq/syncedlyrics
8'''
9
10import requests
11import difflib
12from lib.utils import *
13
14__title__ = "lrclib"
15__priority__ = '110'
16__lrc__ = True
17
18
20 def __init__(self, *args, **kwargs):
21 self.DEBUG = kwargs['debug']
22 self.settings = kwargs['settings']
23 self.SEARCH_URL = 'https://lrclib.net/api/search?q=%s-%s'
24 self.LYRIC_URL = 'https://lrclib.net/api/get/%i'
25
26 def get_lyrics(self, song):
27 log("%s: searching lyrics for %s - %s" % (__title__, song.artist, song.title), debug=self.DEBUG)
28 lyrics = Lyrics(settings=self.settings)
29 lyrics.song = song
30 lyrics.source = __title__
31 lyrics.lrc = __lrc__
32 try:
33 url = self.SEARCH_URL % (song.artist, song.title)
34 response = requests.get(url, timeout=10)
35 result = response.json()
36 except:
37 return None
38 links = []
39 for item in result:
40 artistname = item['artistName']
41 songtitle = item['name']
42 songid = item['id']
43 if (difflib.SequenceMatcher(None, song.artist.lower(), artistname.lower()).ratio() > 0.8) and (difflib.SequenceMatcher(None, song.title.lower(), songtitle.lower()).ratio() > 0.8):
44 links.append((artistname + ' - ' + songtitle, self.LYRIC_URL % songid, artistname, songtitle))
45 if len(links) == 0:
46 return None
47 elif len(links) > 1:
48 lyrics.list = links
49 for link in links:
50 lyr = self.get_lyrics_from_list(link)
51 if lyr:
52 lyrics.lyrics = lyr
53 return lyrics
54 return None
55
56 def get_lyrics_from_list(self, link):
57 title,url,artist,song = link
58 try:
59 log('%s: search url: %s' % (__title__, url), debug=self.DEBUG)
60 response = requests.get(url, timeout=10)
61 result = response.json()
62 except:
63 return None
64 if 'syncedLyrics' in result:
65 lyrics = result['syncedLyrics']
66 return lyrics
None log(str msg, int level=LOGDEBUG)
Definition: xbmc.py:9