MythTV  master
lyricsScraper.py
Go to the documentation of this file.
1 #-*- coding: UTF-8 -*-
2 '''
3 Scraper for https://lrclib.net/
4 
5 lrclib
6 
7 https://github.com/rtcq/syncedlyrics
8 '''
9 
10 import requests
11 import difflib
12 from 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
culrcscrapers.lrclib.lyricsScraper.LyricsFetcher.DEBUG
DEBUG
Definition: lyricsScraper.py:21
utils
culrcscrapers.lrclib.lyricsScraper.LyricsFetcher.LYRIC_URL
LYRIC_URL
Definition: lyricsScraper.py:24
culrcscrapers.lrclib.lyricsScraper.LyricsFetcher.__init__
def __init__(self, *args, **kwargs)
Definition: lyricsScraper.py:20
culrcscrapers.lrclib.lyricsScraper.LyricsFetcher.SEARCH_URL
SEARCH_URL
Definition: lyricsScraper.py:23
culrcscrapers.lrclib.lyricsScraper.LyricsFetcher.get_lyrics
def get_lyrics(self, song)
Definition: lyricsScraper.py:26
culrcscrapers.lrclib.lyricsScraper.LyricsFetcher
Definition: lyricsScraper.py:19
culrcscrapers.lrclib.lyricsScraper.LyricsFetcher.get_lyrics_from_list
def get_lyrics_from_list(self, link)
Definition: lyricsScraper.py:56
xbmc.log
None log(str msg, int level=LOGDEBUG)
Definition: xbmc.py:9
culrcscrapers.lrclib.lyricsScraper.LyricsFetcher.settings
settings
Definition: lyricsScraper.py:22