From 09be82bd750c773a6f082647e293723e9ad194ae Mon Sep 17 00:00:00 2001 From: wisp3rwind <17089248+wisp3rwind@users.noreply.github.com> Date: Sun, 4 Jul 2021 00:35:42 +0200 Subject: [PATCH 1/3] lyrics: slightly more consistent white space in Tekstowo source --- beetsplug/lyrics.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/beetsplug/lyrics.py b/beetsplug/lyrics.py index e39560c03..b6457fc47 100644 --- a/beetsplug/lyrics.py +++ b/beetsplug/lyrics.py @@ -442,14 +442,15 @@ class Tekstowo(Backend): search_results = self.fetch_url(url) if not search_results: return None - song_page_url = self.parse_search_results(search_results) + song_page_url = self.parse_search_results(search_results) if not song_page_url: return None song_page_html = self.fetch_url(song_page_url) if not song_page_html: return None + return self.extract_lyrics(song_page_html) def parse_search_results(self, html): From 0c285753fbf5602a7809b80428a71ed2f8535727 Mon Sep 17 00:00:00 2001 From: wisp3rwind <17089248+wisp3rwind@users.noreply.github.com> Date: Sun, 4 Jul 2021 00:45:12 +0200 Subject: [PATCH 2/3] lyrics: Add some missing None-checks to the Tekstowo source The previous code had the potential to crash if (when?) Tekstowo changes their website structure sufficiently. The new code is rather ugly due to the explicit checks after each and every function call. Unfortunately, the alternative would be to catch a bunch of very generic Exceptions (AttributeError, ...), since there's no such thing as a `BeautifulSoupNotFoundError`. --- beetsplug/lyrics.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/beetsplug/lyrics.py b/beetsplug/lyrics.py index b6457fc47..93c31d938 100644 --- a/beetsplug/lyrics.py +++ b/beetsplug/lyrics.py @@ -461,20 +461,27 @@ class Tekstowo(Backend): if not soup: return None - song_rows = soup.find("div", class_="content"). \ - find("div", class_="card"). \ - find_all("div", class_="box-przeboje") + content_div = soup.find("div", class_="content") + if not content_div: + return None + card_div = content_div.find("div", class_="card") + if not card_div: + return None + + song_rows = card_div.find_all("div", class_="box-przeboje") if not song_rows: return None song_row = song_rows[0] - if not song_row: return None - href = song_row.find('a').get('href') - return self.BASE_URL + href + link = song_row.find('a') + if not link: + return None + + return self.BASE_URL + link.get('href') def extract_lyrics(self, html): html = _scrape_strip_cruft(html) @@ -484,10 +491,11 @@ class Tekstowo(Backend): if not soup: return None - c = soup.find("div", class_="song-text") - if c: - return c.get_text() - return None + lyrics_div = soup.find("div", class_="song-text") + if not lyrics_div: + return None + + return lyrics_div.get_text() def remove_credits(text): From c336191cdf28f98b368ff66d1f0643674dbbf6a0 Mon Sep 17 00:00:00 2001 From: wisp3rwind <17089248+wisp3rwind@users.noreply.github.com> Date: Sun, 4 Jul 2021 13:54:03 +0200 Subject: [PATCH 3/3] lyrics: update and condense Tekstowo changelog entries --- docs/changelog.rst | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index 44dd407fa..25b09ff80 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -212,6 +212,9 @@ Other new things: * Get ISRC identifiers from musicbrainz Thanks to :user:`aereaux`. * :doc:`/plugins/metasync`: The ``metasync`` plugin now also fetches the ``Date Added`` field from iTunes databases and stores it in the``itunes_dateadded`` field.Thanks to :user:`sandersantema`. +* :doc:`/plugins/lyrics`: Added Tekstowo.pl lyrics provider. Thanks to various + people for the implementation and for reporting issues with the initial version. + :bug:`3344` :bug:`3904` :bug:`3905` :bug:`3994` .. _py7zr: https://pypi.org/project/py7zr/ @@ -294,8 +297,6 @@ Fixes: * Removed ``@classmethod`` decorator from dbcore.query.NoneQuery.match method failing with AttributeError when called. It is now an instance method. :bug:`3516` :bug:`3517` -* :doc:`/plugins/lyrics`: Added Tekstowo.pl lyrics provider - :bug:`3344` * :doc:`/plugins/lyrics`: Tolerate missing lyrics div in Genius scraper. Thanks to :user:`thejli21`. :bug:`3535` :bug:`3554` @@ -355,8 +356,6 @@ Fixes: :bug:`3870` * Allow equals within ``--set`` value when importing. :bug:`2984` -* :doc:`/plugins/lyrics`: Fix crashes for Tekstowo false positives - :bug:`3904` * :doc`/reference/cli`: Remove reference to rarfile version in link * Fix :bug:`2873`. Duplicates can now generate checksums. Thanks user:`wisp3rwind` for the pointer to how to solve. Thanks to :user:`arogl`.