From 236a19a8eff36ad98016298694261f730357dec7 Mon Sep 17 00:00:00 2001 From: lexitronic Date: Sun, 17 Aug 2025 04:19:36 -0400 Subject: [PATCH 1/5] Use rapidfuzz to compare strings --- deezspot/deezloader/__init__.py | 4 ++-- setup.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/deezspot/deezloader/__init__.py b/deezspot/deezloader/__init__.py index 98e0bad..44ccd6c 100644 --- a/deezspot/deezloader/__init__.py +++ b/deezspot/deezloader/__init__.py @@ -64,14 +64,14 @@ from deezspot.models.callback.album import albumObject as albumCbObject from deezspot.models.callback.playlist import playlistObject as playlistCbObject from deezspot.models.callback.common import IDs from deezspot.models.callback.user import userObject - +from rapidfuzz import fuzz def _sim(a: str, b: str) -> float: a = (a or '').strip().lower() b = (b or '').strip().lower() if not a or not b: return 0.0 - return SequenceMatcher(None, a, b).ratio() + return fuzz.partial_ratio(a, b) / 100 # Clean for searching on Deezer def _remove_parentheses(string: str) -> str: diff --git a/setup.py b/setup.py index c1a039b..a85ef95 100644 --- a/setup.py +++ b/setup.py @@ -27,6 +27,7 @@ setup( "fastapi==0.116.1", "uvicorn[standard]==0.35.0", "spotipy-anon==1.5.2", - "librespot-spotizerr==0.3.0" + "librespot-spotizerr==0.3.0", + "rapidfuzz" ], ) From 2adb28c2c748e9cc28ce57cb555e7d141e218ad0 Mon Sep 17 00:00:00 2001 From: lexitronic Date: Sun, 17 Aug 2025 04:22:15 -0400 Subject: [PATCH 2/5] remove parentheses from title when comparing with ISRC search --- deezspot/deezloader/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deezspot/deezloader/__init__.py b/deezspot/deezloader/__init__.py index 44ccd6c..ef12816 100644 --- a/deezspot/deezloader/__init__.py +++ b/deezspot/deezloader/__init__.py @@ -438,8 +438,8 @@ class DeeLogin: dz_json = dz tn = (dz_json.get('track_position') or dz_json.get('track_number') or 0) title_match = max( - _sim(spo_title, dz_json.get('title', '')), - _sim(spo_title, dz_json.get('title_short', '')), + _sim(_remove_parentheses(spo_title), _remove_parentheses(dz_json.get('title', ''))), + _sim(_remove_parentheses(spo_title), _remove_parentheses(dz_json.get('title_short', ''))) ) album_match = _sim(spo_album_title, (dz_json.get('album') or {}).get('title', '')) t_isrc = (dz_json.get('isrc') or '').upper() From a66f280b578298382df7fcda0978c24271d28df5 Mon Sep 17 00:00:00 2001 From: lexitronic Date: Sun, 17 Aug 2025 04:23:03 -0400 Subject: [PATCH 3/5] Remove redundant `title_match` entries --- deezspot/deezloader/__init__.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/deezspot/deezloader/__init__.py b/deezspot/deezloader/__init__.py index ef12816..3ebc458 100644 --- a/deezspot/deezloader/__init__.py +++ b/deezspot/deezloader/__init__.py @@ -460,15 +460,11 @@ class DeeLogin: candidates = [] for cand in candidates: - title_match_1 = max( - _sim(spo_title, dz_json.get('title', '')), - _sim(spo_title, dz_json.get('title_short', '')) - ) - title_match_2 = max( + title_match = max( _sim(_remove_parentheses(spo_title), _remove_parentheses(dz_json.get('title', ''))), _sim(_remove_parentheses(spo_title), _remove_parentheses(dz_json.get('title_short', ''))) ) - if max(title_match_1, title_match_2) < 0.90: + if title_match < 0.90: continue c_id = cand.get('id') if not c_id: From 3b8d1ea08c429008d1be16a076d6d36dfafe745b Mon Sep 17 00:00:00 2001 From: lexitronic Date: Sun, 17 Aug 2025 05:02:57 -0400 Subject: [PATCH 4/5] Remove difflib --- deezspot/deezloader/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/deezspot/deezloader/__init__.py b/deezspot/deezloader/__init__.py index 3ebc458..1b49c77 100644 --- a/deezspot/deezloader/__init__.py +++ b/deezspot/deezloader/__init__.py @@ -47,7 +47,6 @@ from deezspot.libutils.others_settings import ( ) from deezspot.libutils.logging_utils import ProgressReporter, logger, report_progress import requests -from difflib import SequenceMatcher from deezspot.models.callback.callbacks import ( trackCallbackObject, From 5886904a7231e87a5732ffbf307f8be74286a28e Mon Sep 17 00:00:00 2001 From: lexitronic Date: Sun, 17 Aug 2025 05:13:28 -0400 Subject: [PATCH 5/5] Correct typo --- deezspot/deezloader/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deezspot/deezloader/__init__.py b/deezspot/deezloader/__init__.py index 1b49c77..97928b7 100644 --- a/deezspot/deezloader/__init__.py +++ b/deezspot/deezloader/__init__.py @@ -460,8 +460,8 @@ class DeeLogin: for cand in candidates: title_match = max( - _sim(_remove_parentheses(spo_title), _remove_parentheses(dz_json.get('title', ''))), - _sim(_remove_parentheses(spo_title), _remove_parentheses(dz_json.get('title_short', ''))) + _sim(_remove_parentheses(spo_title), _remove_parentheses(cand.get('title', ''))), + _sim(_remove_parentheses(spo_title), _remove_parentheses(cand.get('title_short', ''))) ) if title_match < 0.90: continue