diff options
Diffstat (limited to 'info')
-rwxr-xr-x | info/10-azlyrics.pl | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/info/10-azlyrics.pl b/info/10-azlyrics.pl new file mode 100755 index 0000000..4b88bda --- /dev/null +++ b/info/10-azlyrics.pl @@ -0,0 +1,43 @@ +#!/usr/bin/env perl +# 10-azlyrics.pl: nncmpp info plugin to fetch song lyrics on AZLyrics +# +# Copyright (c) 2022, Přemysl Eric Janouch <p@janouch.name> +# SPDX-License-Identifier: 0BSD +# +# Inspired by a similar ncmpc plugin. + +use warnings; +use strict; +use utf8; +use open ':std', ':utf8'; +unless (@ARGV) { + print "Look up on AZLyrics\n"; + exit; +} + +use Encode; +my ($title, $artist, $album) = map {decode_utf8($_)} @ARGV; + +# TODO: An upgrade would be transliteration with, e.g., Text::Unidecode. +use Unicode::Normalize; +$artist = lc(NFD($artist) =~ s/^the\s+//ir =~ s/[^A-Za-z0-9]//gr); +$title = lc(NFD($title) =~ s/\(.*?\)//gr =~ s/[^A-Za-z0-9]//gr); + +# TODO: Consider caching the results in a location like +# $XDG_CACHE_HOME/nncmpp/info/azlyrics/$artist-$title +my $found = 0; +if ($title ne '') { + open(my $curl, '-|', 'curl', '-sA', 'nncmpp/2.0', + "https://www.azlyrics.com/lyrics/$artist/$title.html") or die $!; + while (<$curl>) { + next unless /^<div>/ .. /^<\/div>/; s/<!--.*?-->//g; s/\s+$//gs; + + $found = 1; + s/<\/?b>/\x01/g; s/<\/?i>/\x02/g; s/<br>/\n/; s/<.+?>//g; + s/</</g; s/>/>/g; s/"/"/g; s/'/'/g; s/&/&/g; + print; + } + close($curl) or die $?; +} + +print "No lyrics have been found.\n" unless $found; |