mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 16:42:42 +01:00
Lyrics plugin: fix google backend
Give config on backends init so the Google backend can get the API key and Engine Id. Fix #1226
This commit is contained in:
parent
c1ce71f35c
commit
b49cd3b73b
2 changed files with 16 additions and 10 deletions
|
|
@ -157,7 +157,7 @@ def search_pairs(item):
|
||||||
|
|
||||||
|
|
||||||
class Backend(object):
|
class Backend(object):
|
||||||
def __init__(self, log):
|
def __init__(self, config, log):
|
||||||
self._log = log
|
self._log = log
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
@ -335,6 +335,11 @@ def scrape_lyrics_from_html(html):
|
||||||
|
|
||||||
class Google(Backend):
|
class Google(Backend):
|
||||||
"""Fetch lyrics from Google search results."""
|
"""Fetch lyrics from Google search results."""
|
||||||
|
def __init__(self, config, log):
|
||||||
|
super(Google, self).__init__(config, log)
|
||||||
|
self.api_key = config['google_API_key'].get(unicode)
|
||||||
|
self.engine_id = config['google_engine_ID'].get(unicode)
|
||||||
|
|
||||||
def is_lyrics(self, text, artist=None):
|
def is_lyrics(self, text, artist=None):
|
||||||
"""Determine whether the text seems to be valid lyrics.
|
"""Determine whether the text seems to be valid lyrics.
|
||||||
"""
|
"""
|
||||||
|
|
@ -407,10 +412,8 @@ class Google(Backend):
|
||||||
|
|
||||||
def fetch(self, artist, title):
|
def fetch(self, artist, title):
|
||||||
query = u"%s %s" % (artist, title)
|
query = u"%s %s" % (artist, title)
|
||||||
api_key = self.config['google_API_key'].get(unicode)
|
|
||||||
engine_id = self.config['google_engine_ID'].get(unicode)
|
|
||||||
url = u'https://www.googleapis.com/customsearch/v1?key=%s&cx=%s&q=%s' % \
|
url = u'https://www.googleapis.com/customsearch/v1?key=%s&cx=%s&q=%s' % \
|
||||||
(api_key, engine_id, urllib.quote(query.encode('utf8')))
|
(self.api_key, self.engine_id, urllib.quote(query.encode('utf8')))
|
||||||
|
|
||||||
data = urllib.urlopen(url)
|
data = urllib.urlopen(url)
|
||||||
data = json.load(data)
|
data = json.load(data)
|
||||||
|
|
@ -464,9 +467,9 @@ class LyricsPlugin(plugins.BeetsPlugin):
|
||||||
available_sources.remove('google')
|
available_sources.remove('google')
|
||||||
self.config['sources'] = plugins.sanitize_choices(
|
self.config['sources'] = plugins.sanitize_choices(
|
||||||
self.config['sources'].as_str_seq(), available_sources)
|
self.config['sources'].as_str_seq(), available_sources)
|
||||||
self.backends = []
|
|
||||||
for key in self.config['sources'].as_str_seq():
|
self.backends = [self.SOURCE_BACKENDS[key](self.config, self._log)
|
||||||
self.backends.append(self.SOURCE_BACKENDS[key](self._log))
|
for key in self.config['sources'].as_str_seq()]
|
||||||
|
|
||||||
def commands(self):
|
def commands(self):
|
||||||
cmd = ui.Subcommand('lyrics', help='fetch song lyrics')
|
cmd = ui.Subcommand('lyrics', help='fetch song lyrics')
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,9 @@ import os
|
||||||
import _common
|
import _common
|
||||||
import sys
|
import sys
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
from mock import MagicMock
|
||||||
|
|
||||||
from _common import unittest
|
from _common import unittest
|
||||||
from beetsplug import lyrics
|
from beetsplug import lyrics
|
||||||
from beets.library import Item
|
from beets.library import Item
|
||||||
|
|
@ -25,8 +28,8 @@ from beets.util import confit
|
||||||
from beets import logging
|
from beets import logging
|
||||||
|
|
||||||
log = logging.getLogger('beets.test_lyrics')
|
log = logging.getLogger('beets.test_lyrics')
|
||||||
raw_backend = lyrics.Backend(log)
|
raw_backend = lyrics.Backend({}, log)
|
||||||
google = lyrics.Google(log)
|
google = lyrics.Google(MagicMock(), log)
|
||||||
|
|
||||||
|
|
||||||
class LyricsPluginTest(unittest.TestCase):
|
class LyricsPluginTest(unittest.TestCase):
|
||||||
|
|
@ -337,7 +340,7 @@ class LyricsGooglePluginTest(unittest.TestCase):
|
||||||
lyrics.MusiXmatch], DEFAULT_SOURCES):
|
lyrics.MusiXmatch], DEFAULT_SOURCES):
|
||||||
url = s['url'] + s['path']
|
url = s['url'] + s['path']
|
||||||
if os.path.isfile(url_to_filename(url)):
|
if os.path.isfile(url_to_filename(url)):
|
||||||
res = source(log).fetch(s['artist'], s['title'])
|
res = source({}, log).fetch(s['artist'], s['title'])
|
||||||
self.assertTrue(google.is_lyrics(res), url)
|
self.assertTrue(google.is_lyrics(res), url)
|
||||||
self.assertTrue(is_lyrics_content_ok(s['title'], res), url)
|
self.assertTrue(is_lyrics_content_ok(s['title'], res), url)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue