package WWW::Search::Google;
use strict;
use Carp;
use Net::Google;
use WWW::Search qw(generic_option);
use WWW::SearchResult;
use vars qw(@ISA $VERSION);
@ISA = qw(WWW::Search);
$VERSION = "0.22";
=head1 NAME
WWW::Search::Google - Search Google via SOAP
=head1 SYNOPSIS
use WWW::Search;
my $search = WWW::Search->new('Google', key => $key);
$search->native_query("leon brocard");
while (my $result = $search->next_result()) {
print $result->title, "\n";
print $result->url, "\n";
print $result->description, "\n";
print "\n";
}
=head1 DESCRIPTION
This class is a Google specialization of WWW::Search. It handles
searching Google F using its new SOAP API
F.
All interaction should be done through WWW::Search objects.
Note that you must register for a Google Web API account and have a
valid Google API license key before using this module.
This module reports errors via croak().
This module uses Net::Google to do all the dirty work.
=cut
sub native_setup_search {
my($self, $query) = @_;
my $key = $self->{key};
croak("No license key given to WWW::Search::Google!") unless defined $key;
$self->{_query} = $query;
$self->{_offset} = 0;
}
sub native_retrieve_some {
my $self = shift;
my $key = $self->{key};
my $query = $self->{_query};
my $offset = $self->{_offset};
my $google = Net::Google->new(key => $key);
my $search = $google->search();
$search->query($query);
$search->starts_at($offset);
$search->max_results(10);
$search->return_estimatedTotal(1);
my $response = $search->response->[0];
return unless defined $response;
my @responses = @{$response->resultElements};
$self->approximate_result_count($response->estimatedTotalResultsCount);
if (@responses) {
foreach my $element (@responses) {
my $hit = WWW::SearchResult->new();
$hit->title($element->title || "");
$hit->url($element->URL || "");
$hit->description($element->summary || $element->snippet || "");
push @{$self->{cache}}, $hit;
}
} else {
return;
}
return if scalar(@responses) < 10;
$self->{_offset} += 10;
return 1;
}
1;
=head1 AUTHOR
Leon Brocard EFE
=head1 COPYRIGHT
Copyright (C) 2002, Leon Brocard
This module is free software; you can redistribute it or modify it
under the same terms as Perl itself.
=cut