Este entrega la letra (o lyric) de una cierta canción!
Como funciona:
Fácil, solo tienen que correr el Escri por linea de comando (usa Perl) y pasarle como parámetro el nombre del artista y el nombre de la canción.
El script buscará la letra en dos sitios distintos (en caso de que falle el primero, se utiliza el segundo ;) ) y si dá con él entonces lo mostrará por pantalla, sino, se queda callado y termina la ejecución del script corta y fome :P
Yap, espero que en este código no se me haya quedado una password o algo por el estilo (información sensible) ya que últimamente he cometido ese tipo de errores (pero gracias a Dios que tengo buenos amigos ;) )
Bueno, ahí está el código... Enjoy!
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
use HTML::Entities;
if (($ARGV[0] eq '') || ($ARGV[1] eq '')) {
print "GetLyric 1.0 ( http://wischv.blogspot.com/ )\n";
print "Autor: Walter Schmidt\n";
print "Usage: $0 \"Artist\" \"Song\"\n";
exit;
}
#################################################
#my $artist = '311';
#my $song = 'Do You Right';
my $artist = $ARGV[0];
my $song = $ARGV[1];
my $lyric = '';
if ($lyric = get_lyric_lyricsplugin($artist, $song)) {
print $lyric;
}
elsif ($lyric = get_lyric_songlyrics($artist, $song)) {
print $lyric;
}
#################
## FUNCIONES ##
#################
sub get_lyric_songlyrics {
my $body;
my $artist_song = lc($_[0] . '/' . $_[1]);
$artist_song =~ s/' / /g; # Livin' And Rockin' => livin-and-rockin
$artist_song =~ s/'$//g; # Livin' And Rockin' => livin-and-rockin
$artist_song =~ s/'$//g; # Livin' And Rockin' => livin-and-rockin
$artist_song =~ s/[\?\&\.' ]/-/g; # It's Alright => it-s-alright
$artist_song =~ s/[^a-zA-Z0-9\-\/]//g;
# El exceso de '-' (Ej: '---') son limpiados por el server
my $ua = new LWP::UserAgent;
my $resource = $ua->get("http://www.songlyrics.com/$artist_song-lyrics/");
if ($resource->is_success) {
$body = $resource->content;
$body =~ s/[^[:print:]]//g;
$body =~ /(<p id="songLyricsDiv".*)<p id="songLyricsSmallDiv"/i;
my $lyric = $1;
decode_entities($lyric);
$lyric =~ s/<br \/>/\n/g; # Convierte los <br /> en <ENTER>'s
$lyric =~ s/<[^>]*>//g; # Elimina los TAGs de HTML existentes
$lyric =~ s/\n\[ [^\n]+ are found on www.songlyrics.com \]//g; # Elimina los mensajes de Songlyric
$lyric =~ s/ +/ /g; # Elimina el exceso de espacios entre las palabras
$lyric =~ s/^\s+//g; # Elimina los espacios y <ENTER>'s del comienzo del Lyric
$lyric =~ s/\n +/\n/g; # Elimina los espacios del comienzo de cada linea
$lyric =~ s/ +\n/\n/g; # Elimina los espacios del final de cada linea
$lyric =~ s/\n+$/\n/g; # Elimina el exceso de <ENTER> al final del Lyric
return $lyric;
}
else {
#print $resource->status_line . "\n";
return 0;
}
}
sub get_lyric_lyricsplugin {
my $artist = shift;
my $song = shift;
my $site = 'http://www.lyricsplugin.com';
my $ua = new LWP::UserAgent;
my $resource = $ua->get("$site/wmplayer03/plugin/?title=$song&artist=$artist");
if ($resource->is_success) {
my $body = $resource->content;
$body =~ /javascript:getContent\('([^']*)', '([^']*)', '([^']*)', '([^']*)'\)/;
$resource = $ua->get("$site/wmplayer03/plugin/content.php?artist=$1&title=$2×tamp=$3&hash=$4", 'Referer' => "http://www.lyricsplugin.com/wmplayer03/plugin/?title=$2&artist=$1");
if ($resource->is_success) {
my $lyric = '';
my $lyric_flag = 0;
foreach my $line (split /\n/, $resource->content) {
last if (($line =~ /<\/div>/) && ($lyric_flag));
if ($lyric_flag) {
$line =~ s/\r//;
$line =~ s/<br \/>/\n/;
$lyric .= $line;
}
$lyric_flag = 1 if ($line =~ /<div id="lyrics">/);
}
return ($lyric eq '') ? 0 : $lyric . "\n";
}
else {
#print $resource->status_line . "\n";
return 0;
}
}
else {
#print $resource->status_line . "\n";
return 0;
}
}
use strict;
use LWP::UserAgent;
use HTML::Entities;
if (($ARGV[0] eq '') || ($ARGV[1] eq '')) {
print "GetLyric 1.0 ( http://wischv.blogspot.com/ )\n";
print "Autor: Walter Schmidt\n";
print "Usage: $0 \"Artist\" \"Song\"\n";
exit;
}
#################################################
#my $artist = '311';
#my $song = 'Do You Right';
my $artist = $ARGV[0];
my $song = $ARGV[1];
my $lyric = '';
if ($lyric = get_lyric_lyricsplugin($artist, $song)) {
print $lyric;
}
elsif ($lyric = get_lyric_songlyrics($artist, $song)) {
print $lyric;
}
#################
## FUNCIONES ##
#################
sub get_lyric_songlyrics {
my $body;
my $artist_song = lc($_[0] . '/' . $_[1]);
$artist_song =~ s/' / /g; # Livin' And Rockin' => livin-and-rockin
$artist_song =~ s/'$//g; # Livin' And Rockin' => livin-and-rockin
$artist_song =~ s/'$//g; # Livin' And Rockin' => livin-and-rockin
$artist_song =~ s/[\?\&\.' ]/-/g; # It's Alright => it-s-alright
$artist_song =~ s/[^a-zA-Z0-9\-\/]//g;
# El exceso de '-' (Ej: '---') son limpiados por el server
my $ua = new LWP::UserAgent;
my $resource = $ua->get("http://www.songlyrics.com/$artist_song-lyrics/");
if ($resource->is_success) {
$body = $resource->content;
$body =~ s/[^[:print:]]//g;
$body =~ /(<p id="songLyricsDiv".*)<p id="songLyricsSmallDiv"/i;
my $lyric = $1;
decode_entities($lyric);
$lyric =~ s/<br \/>/\n/g; # Convierte los <br /> en <ENTER>'s
$lyric =~ s/<[^>]*>//g; # Elimina los TAGs de HTML existentes
$lyric =~ s/\n\[ [^\n]+ are found on www.songlyrics.com \]//g; # Elimina los mensajes de Songlyric
$lyric =~ s/ +/ /g; # Elimina el exceso de espacios entre las palabras
$lyric =~ s/^\s+//g; # Elimina los espacios y <ENTER>'s del comienzo del Lyric
$lyric =~ s/\n +/\n/g; # Elimina los espacios del comienzo de cada linea
$lyric =~ s/ +\n/\n/g; # Elimina los espacios del final de cada linea
$lyric =~ s/\n+$/\n/g; # Elimina el exceso de <ENTER> al final del Lyric
return $lyric;
}
else {
#print $resource->status_line . "\n";
return 0;
}
}
sub get_lyric_lyricsplugin {
my $artist = shift;
my $song = shift;
my $site = 'http://www.lyricsplugin.com';
my $ua = new LWP::UserAgent;
my $resource = $ua->get("$site/wmplayer03/plugin/?title=$song&artist=$artist");
if ($resource->is_success) {
my $body = $resource->content;
$body =~ /javascript:getContent\('([^']*)', '([^']*)', '([^']*)', '([^']*)'\)/;
$resource = $ua->get("$site/wmplayer03/plugin/content.php?artist=$1&title=$2×tamp=$3&hash=$4", 'Referer' => "http://www.lyricsplugin.com/wmplayer03/plugin/?title=$2&artist=$1");
if ($resource->is_success) {
my $lyric = '';
my $lyric_flag = 0;
foreach my $line (split /\n/, $resource->content) {
last if (($line =~ /<\/div>/) && ($lyric_flag));
if ($lyric_flag) {
$line =~ s/\r//;
$line =~ s/<br \/>/\n/;
$lyric .= $line;
}
$lyric_flag = 1 if ($line =~ /<div id="lyrics">/);
}
return ($lyric eq '') ? 0 : $lyric . "\n";
}
else {
#print $resource->status_line . "\n";
return 0;
}
}
else {
#print $resource->status_line . "\n";
return 0;
}
}
2 comentarios:
por que razón no utilizas el motor de búsqueda de google?
Dame un ejemplo
Publicar un comentario