Spotify AI Checker — Beslisboom van meldingen
Overzicht van welke melding de gebruiker krijgt bij welke situatie. Drie flowcharts: per-track classificatie, waarschuwingsboxen op resultaatniveau, en de Verify-knop-flow. Onderaan een referentietabel met alle teksten.
1. Per-track classificatie — welk badge krijgt een track?
De checker bepaalt per track of die als 🤖 AI detected, ✓ Clean of ? Unknown getoond wordt. Volgorde van bronnen: eerst DigiMuziek-database (eigen lijst), dan Deezer.
track_id zonder
artist/title?} URLpaste -->|Ja| Spotify[Spotify API call:
haal artist + titel op] URLpaste -->|Nee, CSV| DBcheck Spotify --> Sok{Spotify lukt?} Sok -->|Ja| DBcheck[DigiMuziek DB lookup] Sok -->|Nee 429/error| DBcheck DBcheck --> URI{Match op
spotify_id?} URI -->|Ja| AIflag[AI: TRUE
via DB-URI] URI -->|Nee| Name{Match op naam?} Name -->|Ja, met URI| AIflag Name -->|Ja, alleen naam| Pending[AI: TRUE
maar 'pending verification'] Name -->|Nee| Deezer[Deezer check:
hasIdentifiedAIContent] AIflag --> ResultAI([🤖 AI detected]) Pending --> ResultAIp([🤖 AI detected
met ⏳ pending]) Deezer --> Dz{Deezer-resultaat} Dz -->|true| ResultAI2([🤖 AI detected]) Dz -->|false| ResultClean([✓ Clean]) Dz -->|null / no-match| ResultUnk([❔ Unknown]) classDef ok fill:#dff0d8,stroke:#3a7f3a,color:#1a4a1a; classDef ai fill:#fde0e0,stroke:#a00,color:#600; classDef pen fill:#fff3cd,stroke:#9a6500,color:#5a3a00; classDef unk fill:#eee,stroke:#888,color:#444; class ResultClean ok; class ResultAI,ResultAI2 ai; class ResultAIp pen; class ResultUnk unk;
2. Waarschuwingen op resultaatniveau — welke boxen verschijnen?
Boven of onder de resultaattabel kunnen één of meerdere gele boxen verschijnen, afhankelijk van wat er onderweg gebeurd is.
(alleen URL-paste)} CheckSpotify -->|ok / cached / not_needed| NoSpotBox[Geen Spotify-melding] CheckSpotify -->|token_failed| BoxToken[/"⚠️ Spotify token request failed"/] CheckSpotify -->|rate_limited| BoxRate[/"⚠️ Spotify rate-limited (HTTP 429)
wait 30-60 seconds"/] CheckSpotify -->|all_failed| BoxAll[/"⚠️ Spotify lookups are failing"/] CheckSpotify -->|partial| BoxPart[/"⚠️ Spotify lookups are flaky"/] NoSpotBox --> CheckDeezer BoxToken --> CheckDeezer BoxRate --> CheckDeezer BoxAll --> CheckDeezer BoxPart --> CheckDeezer CheckDeezer{Deezer no-match
≥ 80% van tracks?} CheckDeezer -->|Ja| BoxDz[/"⚠️ Deezer is acting up
most tracks could not be matched"/] CheckDeezer -->|Nee| NoDzBox[Geen Deezer-melding] BoxDz --> CheckDB NoDzBox --> CheckDB CheckDB{DigiMuziek DB hits?} CheckDB -->|≥ 1 hit| LineDB[/"DigiMuziek DB hits:
X verified ID · Y pending · Z name-only"/] CheckDB -->|0 hits| NoDBLine[Geen DB-regel] LineDB --> CheckPending NoDBLine --> CheckPending CheckPending{Pending verification > 0?} CheckPending -->|Ja| RowVerify[/"X tracks match by name only.
🔍 Verify name matches"/] CheckPending -->|Nee| End([Tabel tonen]) RowVerify --> End classDef warn fill:#fff3cd,stroke:#9a6500,color:#5a3a00; classDef info fill:#d6eaf8,stroke:#1a4a6e,color:#1a3a5a; class BoxToken,BoxRate,BoxAll,BoxPart,BoxDz warn; class LineDB,RowVerify info;
3. Verify name matches — wat ziet de gebruiker bij klikken?
De Verify-knop verschijnt alleen als er name-only DB-matches zijn. Hij doet een AJAX-call
naar verify-tracks.php die per track de Spotify-ID ophaalt en vergelijkt met de DB.
max 50 IDs per call] AJAX --> Result{Response?} Result -->|rate_limited| Rate[/"⚠️ Spotify rate-limited (HTTP 429)
wait 30-60 seconds and click Retry
Knop: ↻ Retry verification"/] Result -->|spotify_error / no_token| Part[/"X verified, Y namesakes, Z still pending
Click to continue
Knop: ↻ Verify remaining"/] Result -->|alles verwerkt| Done2[/"✓ Verification complete
X confirmed AI · Y namesakes
(knop verdwijnt)"/] Result -->|netwerkfout| Net[/"Network error — please try again
(alert popup)"/] Rate --> Wacht[Gebruiker wacht en klikt opnieuw] Part --> Wacht2[Gebruiker klikt opnieuw] Wacht --> Klik Wacht2 --> Klik PerTrack{Per geverifieerde track:} Done2 -.->|status check| PerTrack Part -.->|status check| PerTrack PerTrack -->|verified_ai| Keep[Behoud 🤖 AI badge] PerTrack -->|false_positive| Switch[Wijzig naar ✓ Clean
= namesake] classDef warn fill:#fff3cd,stroke:#9a6500,color:#5a3a00; classDef ok fill:#dff0d8,stroke:#3a7f3a,color:#1a4a1a; classDef err fill:#fde0e0,stroke:#a00,color:#600; class Rate,Part warn; class Done2 ok; class Net err;
4. Volledige meldingenreferentie
Alle teksten die de gebruiker kan tegenkomen, gegroepeerd per situatie.
Per-track badges
| Badge | Wanneer? | Bron |
|---|---|---|
| 🤖 AI detected | DB-match op spotify_id, óf DB-naam-match (geverifieerd), óf Deezer flagt 'm | DB / Deezer |
| ✓ Clean | Geen DB-match én Deezer zegt expliciet false | Deezer |
| ? Unknown | Geen DB-match én Deezer geeft null/no-match terug | — |
Gele waarschuwingsboxen
| Tekst (verkort) | Wanneer? | Tip aan gebruiker |
|---|---|---|
| "Spotify token request failed right now" | Credentials kloppen niet of Spotify-auth onbereikbaar | Wachten + spotify-test.php openen |
| "Spotify rate-limited the app (HTTP 429)" | Te veel API-calls te snel | 30–60 sec wachten en opnieuw |
| "Spotify lookups are failing" | Alle calls mislukt (geen 429) | Wachten en opnieuw |
| "Spotify lookups are flaky" | Sommige calls gelukt, sommige niet | Wachten en opnieuw |
| "Deezer is acting up — most tracks could not be matched" | ≥ 80% no-match op Deezer | Even wachten, JWT vernieuwt zichzelf |
DigiMuziek DB-info-regel (blauw)
| Tekst | Betekenis |
|---|---|
| "X verified ID" | Aantal tracks waarvan de Spotify-ID exact matcht met een DB-rij — hoge zekerheid |
| "Y name match — pending verification" | Naam matcht een DB-naam; Spotify-ID nog niet vergeleken (kan naamgenoot zijn) |
| "Z name-only (could be different artist)" | Alleen-naam-match zonder URI in DB; minst zeker |
Verify-knop balk
| Toestand | Tekst | Knop |
|---|---|---|
| Begin | "X tracks match the database by name only. Verify their Spotify ID to be sure they're the actual AI artist (not a namesake)." | 🔍 Verify name matches |
| Na klik + 429 | "⚠️ Spotify rate-limited (HTTP 429) — wait 30-60 seconds and click Retry. X verified, Y namesakes, Z still pending." | ↻ Retry verification |
| Na klik + andere fout | "X verified, Y namesakes, Z still pending. Click to continue." | ↻ Verify remaining (Z) |
| Compleet | "✓ Verification complete — X confirmed AI · Y namesakes" | (verdwijnt) |
| Netwerkfout | "Network error — please try again." | 🔍 Verify name matches |
Per-track na verificatie
| verify-tracks.php status | Effect op de track in de tabel |
|---|---|
verified_ai | Behoudt 🤖 AI detected; "pending"-indicator verdwijnt |
false_positive | Verandert in ✓ Clean (naamgenoot, geen AI) |
rate_limited | Blijft pending; rij komt terug in volgende klik |
no_token / spotify_error | Blijft pending; gebruiker krijgt foutmelding boven de tabel |