fix(backend): Kanaltreffer in der YTM-Suche verwirft nicht mehr die Trefferliste
getYtmVideoUrls wertete jedes /browse/UC in der Ausgabe als "yt-dlp hat einen Artist-Channel aufgeklappt" und gab [] zurueck — samt der bereits gesammelten Song-URLs. Bei "DAT ADAM UFO" stand der Kanal auf Platz 9 und riss sieben gute Treffer mit, darunter den offiziellen Art Track auf Platz 1; uebrig blieb der YouTube-Fallback mit einem Live-Mitschnitt. An 8 echten Suchen gemessen feuerte das in 7 Faellen, Schritt 1 der Kaskade war also praktisch tot. Mit --flat-playlist kann gar nichts aufgeklappt werden, ein Kanal ist EINE Zeile. pickYtmVideoUrls() behaelt daher alle watch?v=-Zeilen und ueberspringt browse/UC (Kanal) wie browse/MPREb_ (Album). Ueber 20k Zufallsausgaben geprueft: die neue Funktion ist eine Obermenge der alten, kann also nur Kandidaten hinzufuegen. Drei echte Downloads liefen end-to-end sauber durch (Dauer sekundengenau auf Deezer, korrekte Tags), alle aus Schritt 1 statt aus dem Fallback. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
33b3df609a
commit
eee98d193f
3 files changed
+68
-19
No files matched your search
@@ -76,3 +76,34 @@ test('"live" inside another word does not disable the rule', () => {
|
||||
assert.equal(variantAccepts('Deliver', 'Artist - Deliver (Live at Wembley)'), false);
|
||||
assert.equal(variantAccepts('Deliver', 'Artist - Deliver'), true);
|
||||
});
|
||||
|
||||
const { pickYtmVideoUrls } = require('../lib/ytdlp.js');
|
||||
|
||||
// Echte Ausgabe der YTM-Suche "DAT ADAM UFO": Songs, ein Album (MPREb_) und der
|
||||
// Kuenstlerkanal (UC…) auf Platz 9.
|
||||
const YTM_OUT = [
|
||||
'https://music.youtube.com/watch?v=ZG4XhPn3Yb4',
|
||||
'https://music.youtube.com/watch?v=2KVU6aikZF0',
|
||||
'https://music.youtube.com/browse/MPREb_IhxJPixC1QT',
|
||||
'https://music.youtube.com/watch?v=phLOTtJaqZk',
|
||||
'https://music.youtube.com/watch?v=p935nH6aj8Y',
|
||||
'https://music.youtube.com/watch?v=Pb2YcDBm5fA',
|
||||
'https://music.youtube.com/browse/MPREb_S7MMKVMduma',
|
||||
'https://music.youtube.com/watch?v=mNfsX2RbZ2M',
|
||||
'https://music.youtube.com/browse/UC5hilNPCUHEPf4VpG5_YpYA',
|
||||
'https://music.youtube.com/watch?v=O034JUlf1J4',
|
||||
].join('\n');
|
||||
|
||||
test('a channel hit no longer discards the whole result list', () => {
|
||||
const { urls, skipped } = pickYtmVideoUrls(YTM_OUT);
|
||||
assert.equal(urls.length, 7);
|
||||
assert.equal(skipped, 3); // 2 Alben + 1 Kanal
|
||||
assert.match(urls[0], /ZG4XhPn3Yb4/); // der offizielle Art Track
|
||||
assert.ok(!urls.some(u => u.includes('/browse/')));
|
||||
});
|
||||
|
||||
test('nothing but list entries yields no candidates', () => {
|
||||
const only = 'https://music.youtube.com/browse/UC5hilNPCUHEPf4VpG5_YpYA';
|
||||
assert.deepEqual(pickYtmVideoUrls(only).urls, []);
|
||||
assert.deepEqual(pickYtmVideoUrls('').urls, []);
|
||||
});
|
||||
Reference in new issue
Block a user