Image-Grab

 view release on metacpan or  search on metacpan

lib/Image/Grab.pm  view on Meta::CPAN


use Carp;
use Config;
require HTTP::Request;
require HTML::TreeBuilder;
require URI::URL;
require Image::Grab::RequestAgent;
use POSIX qw(strftime);

require Exporter;

@ISA = qw(Exporter);
@EXPORT_OK = qw(
  &expand_url &grab
);

# %fields, new, AUTOLOAD are from perltoot

my %fields = (
	      cookiefile => undef,
	      cookiejar  => undef,
	      date       => undef,
	      image      => undef,
	      "index"    => undef,
	      md5        => undef,
	      refer      => undef,
	      regexp     => undef,
	      type       => undef,
	      ua         => undef,
	      url        => undef,
	      search_url => undef,
	      debug      => undef,
	      do_posix   => ($Config{patchlevel} && $Config{patchlevel} >= 5 and
			     $Config{baserev} && $Config{baserev}    >= 5) ? 1 : undef,
	     );

sub DESTROY {}

sub new {
  my $that  = shift;
  my $class = ref($that) || $that;
  my $self = {
	      _permitted => \%fields,
	      %fields,
	     };

  if(@_) {
    my %arg = @_;

    foreach (keys %arg) {
      croak "Can't access `$_' field"
	unless exists $self->{_permitted}->{lc($_)};
      $self->{lc($_)} = $arg{$_};
    }
  }

  bless ($self, $class);
  $self->ua(new Image::Grab::RequestAgent);
  $self->{have_DigestMD5} = eval {require Digest::MD5};
  $self->{have_MD5} = eval {require MD5;};
  $self->{have_magick} = eval {require Image::Magick;};
  return $self;
}

sub AUTOLOAD {
  my $self = shift;
  my $type = ref($self)
    or croak "$self is not an object";

  my $name = $AUTOLOAD;
  $name =~ s/.*://;

  unless (exists $self->{_permitted}->{$name} ) {
    croak "Can't access `$name' field in class $type";
  }

  if(@_) {
    my $val = shift;
    carp "$name: $val" if $self->debug;
    return $self->{$name} = $val;
  } elsif (defined $self->{$name}) {
    return $self->{$name};
  }

  return undef;

}

# Accessor functions that we have to write.
sub realm {
  my $self = shift;
  my $type = ref($self)
    or croak "$self is not an object";

  if($#_ == 2){
    $self->ua->register_realm(shift, shift, shift);
    return 1;
  } 

  croak "usage: realm(\$realm, \$user, \$pass)";
}

sub getAllURLs {
  my $self = shift;
  my $type = ref($self)
    or croak "$self is not an object";
  my $times = (shift or 10);
  my $req;
  my $count = 0;
  my @link;
  my @now;

  # Need to load Cookie Jar?
  $self->loadCookieJar;

  @now = localtime;
  $self->search_url(strftime $self->search_url, @now) 
    if defined $self->search_url and defined $self->do_posix;
  croak "Need to specify a search_url!" if !defined $self->search_url;
  $req = $self->ua->request(new HTTP::Request 'GET', $self->search_url);



( run in 1.351 second using v1.01-cache-2.11-cpan-39bf76dae61 )