Hello,
Please find a few update for lyrics'plugin find in /usr/share/gmusicbrowser/plugins :
you can put this after "my %Sites="
lyricsondemand => [
'Lyricsondemand',
sub {
my $ID = $_[0];
my $artist = Songs::Get($ID,'artist') || '';
my $title = Songs::Get($ID,'title') || '';
# Nettoyer pour l'URL
$artist =~ s/\s+/_/g;
$artist =~ s/[^a-zA-Z0-9_]//g;
$artist = lc $artist;
$title =~ s/\s+/_/g;
$title =~ s/[^a-zA-Z0-9_]//g;
$title =~ s/_+/_/g;
$title = lc $title;
return "https://lyricsondemand.com/$artist/$title";
},
undef,
sub {
my $html = $_[0];
my $lyrics = '';
# Extraire tout le bloc mainlyrics
if ($html =~ m#<div\s+class="mainlyrics">(.*?)</div>\s*</div>\s*</div>#si) {
my $main = $1;
# Extraire toutes les lignes de paroles
my @lines = $main =~ m#<div\s+class="line main-single-line [^"]*"\s+data-line-index="\d+">(.*?)</div>#gis;
# Nettoyer chaque ligne
@lines = map {
my $line = $_;
$line =~ s/<[^>]+>//g; # retirer toutes les balises HTML restantes
$line =~ s/ / /gi; # espaces HTML
$line =~ s/&/&/gi; # ampersand HTML
$line =~ s/^\s+|\s+$//g; # trim
$line; # retourner la ligne nettoyée
} grep { $_ !~ /^\*/ } @lines; # filtrer les lignes qui commencent par *
# Joindre toutes les lignes avec saut HTML
$lyrics = join("<br>", @lines);
} else {
$_[0] = "No lyrics found";
return 0;
}
$_[0] = $lyrics;
return 1;
}],
parolesnet => [
'Paroles.net',
# -------- URL builder --------
sub {
my $ID = $_[0];
my $artist = Songs::Get($ID,'artist') // '';
my $title = Songs::Get($ID,'title') // '';
for ($artist, $title)
{
$_ = ::superlc($_);
$_ = lc $_;
$_ =~ s/\(.*?\)//g;
$_ =~ s/\bfeat\.?.*//g;
$_ =~ s/&/ et /g;
$_ =~ s/[^a-z0-9]+/-/g;
$_ =~ s/-{2,}/-/g;
$_ =~ s/^-|-$//g;
}
return "https://www.paroles.net/$artist/paroles-$title";
},
undef,
# -------- Lyrics extractor --------
sub {
my $html = $_[0];
my $lyrics = '';
# Extraire le bloc song-text complet
if ($html =~ m|<div\s+class="song-text">(.*?)</div>|s) {
warn "DEBUG: Match found!\n";
my $main = $1;
warn "DEBUG: Captured " . length($main) . " chars\n";
# Virer le h2 titre
$main =~ s|<h2.*?</h2>||si;
# Virer les blocs de pub
$main =~ s|<div[^>]*min-height[^>]*>.*?</div>||gsi;
$main =~ s|<div[^>]*optidigital[^>]*>.*?</div>||gsi;
# Marquer les doubles <br> (paragraphes) différemment des simples
$main =~ s|<br\s*/?>[\s\n]*<br\s*/?>|###PARA###|gi;
$main =~ s|<br\s*/?>|###BR###|gi;
$main =~ s|</div>|###BR###|gi;
# Virer toutes les balises HTML restantes
$main =~ s|<[^>]+>||g;
# Nettoyer entités HTML
$main =~ s/ / /gi;
$main =~ s/&/&/gi;
$main =~ s/</</gi;
$main =~ s/>/>/gi;
$main =~ s/"/"/gi;
# Nettoyer espaces
$main =~ s/^\s+|\s+$//gm;
$main =~ s/###BR###\s*###BR###/###PARA###/g;
# Remplacer les marqueurs par <br> pour gmusicbrowser
$main =~ s|###PARA###|<br><br>|g; # Double saut pour paragraphes
$main =~ s|###BR###|<br>|g; # Simple saut pour vers
$lyrics = $main;
warn "DEBUG: Final lyrics length: " . length($lyrics) . "\n";
} else {
warn "DEBUG: NO MATCH for song-text div!\n";
$_[0] = $notfound;
return 0;
}
return 0 unless length($lyrics) > 20;
$_[0] = $lyrics;
return 1;
}
],
Et la partie AuTO put them before my %Sites=
);
my @AUTO_SITES = grep { $_ ne 'AUTO' } qw(
musixmatch
genius
lyriki
parolesnet
lyricsondemand
);