From 4da1fb25e23ef95536b2f7b3ef628e4a32283156 Mon Sep 17 00:00:00 2001 From: Honey Date: Sat, 23 May 2026 21:46:50 +0200 Subject: [PATCH] fix: OG scrape fills missing artist even when JSON-LD found track name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JSON-LD could set track_name but return empty byArtist, making the OG block (guarded by `if not track_name`) never run — leaving artist blank. Now OG runs whenever either name or artist is missing, and only fills fields that are still empty so JSON-LD name isn't overwritten. Co-Authored-By: Claude Sonnet 4.6 --- backend/spotify_resolve.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/backend/spotify_resolve.py b/backend/spotify_resolve.py index 9b461d8..fafe861 100644 --- a/backend/spotify_resolve.py +++ b/backend/spotify_resolve.py @@ -111,19 +111,21 @@ def resolve(sp_type, sp_id): except Exception as e: eprint(f'[spotapi] JSON-LD parse failed: {e}') - # 2) OG tags — artist is desc_parts[0], then type ("Song"), then year - if not track_name: + # 2) OG tags — fill in any fields still missing after JSON-LD + # Real format: "Artist · Song · Year" — artist is index 0 + if not track_name or not artist_name: og = {} for m in re.finditer(r']+(?:property|name)=["\']og:([^"\']+)["\']', page): og[m.group(2)] = _html.unescape(m.group(1)) desc_parts = [p.strip() for p in og.get('description', '').split('·')] - track_name = og.get('title', '') - # Real format: "Artist · Song · Year · N songs." — artist is index 0 - artist_name = desc_parts[0] if desc_parts else '' - album_name = '' - art_url = og.get('image', '') + if not track_name: + track_name = og.get('title', '') + if not artist_name: + artist_name = desc_parts[0] if desc_parts else '' + if not art_url: + art_url = og.get('image', '') eprint(f'[spotapi] OG scrape: name={track_name!r} artist={artist_name!r}') if track_name: