Lyrics::Fetcher::AstraWeb - Get song lyrics from lyrics.astraweb.com


Lyrics-Fetcher-AstraWeb documentation Contained in the Lyrics-Fetcher-AstraWeb distribution.

Index


Code Index:

NAME

Top

Lyrics::Fetcher::AstraWeb - Get song lyrics from lyrics.astraweb.com

SYNOPSIS

Top

  use Lyrics::Fetcher;
  print Lyrics::Fetcher->fetch("<artist>","<song>","AstraWeb");

  # or, if you want to use this module directly without Lyrics::Fetcher's
  # involvement (be aware that using Lyrics::Fetcher is the recommended way):
  use Lyrics::Fetcher::AstraWeb;
  print Lyrics::Fetcher::AstraWeb->fetch('<artist>', '<song>');




DESCRIPTION

Top

This module tries to get song lyrics from lyrics.astraweb.com. It's designed to be called by Lyrics::Fetcher, and this is the recommended usage, but it can be used directly if you'd prefer.

INTERFACE

Top

fetch($artist, $title)

Attempts to fetch lyrics.

BUGS

Top

Probably. If you find any bugs, please let me know.

COPYRIGHT AND LICENCE

Top

AUTHOR

Top

David Precious <davidp@preshweb.co.uk>

LEGAL DISCLAIMER

Top


Lyrics-Fetcher-AstraWeb documentation Contained in the Lyrics-Fetcher-AstraWeb distribution.

package Lyrics::Fetcher::AstraWeb;

# AstraWeb - lyrics.astraweb.com implementation
#
# Copyright (C) 2003 Sir Reflog <reflog@mail15.com>
# All rights reserved.
#
# Maintainership of Lyrics::Fetcher transferred in Feb 07 to BIGPRESH
# (David Precious <davidp@preshweb.co.uk>)

# $Id: AstraWeb.pm 333 2008-04-24 18:53:53Z davidp $

use strict;
use warnings;
use WWW::Mechanize;
use vars qw($VERSION);

$VERSION = '0.33';

sub fetch {
    my($self,$artist, $title) = @_;
    my $agent = WWW::Mechanize->new();
    my($sartist) = join ("+", split(/ /, $artist));
    my($stitle) = join ("+", split(/ /, $title));
    
    # quote regexp meta-characters to avoid breakage:
    $title = quotemeta $title;
    $artist = quotemeta $artist;
    
    $agent->get("http://search.lyrics.astraweb.com/?word=$sartist+$stitle");
    
    if(grep { $_->text() =~ /$title/ }@{$agent->links}) {
        $agent->follow_link(text_regex => qr((?-xism:$title)));
        
        if(grep { $_->text() =~ /Printable/ }@{$agent->links}) {
		    $agent->follow_link(text_regex => qr((?-xism:Printable)));
        } else {
            $Lyrics::Fetcher::Error = 'Bad page format';
            return;
        }
    } else {
        $Lyrics::Fetcher::Error = 'Cannot find such title';
        return;
    }
    
    return $agent->content =~  /<blockquote>(.*)<\/blockquote>/ && $1;
}

1;