gmusicbrowser Forum

Main board => Suggestions => Topic started by: ReVeNaNt on January 11, 2026, 18:35:01

Title: New Update lyrics.pm from lyricsondemand
Post by: ReVeNaNt on January 11, 2026, 18:35:01
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/&nbsp;/ /gi;       # espaces HTML
            $line =~ s/&amp;/&/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;
}],
Title: Re: New Update lyrics.pm from lyricsondemand
Post by: ReVeNaNt on January 12, 2026, 10:11:34
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/&nbsp;/ /gi;
            $main =~ s/&amp;/&/gi;
            $main =~ s/&lt;/</gi;
            $main =~ s/&gt;/>/gi;
            $main =~ s/&quot;/"/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;
    }
],
Title: Re: New Update lyrics.pm from lyricsondemand
Post by: ReVeNaNt on January 12, 2026, 10:12:09
Et la partie AuTO put them before my %Sites=

);
my @AUTO_SITES = grep { $_ ne 'AUTO' } qw(
    musixmatch
    genius
    lyriki
    parolesnet
    lyricsondemand
);