package W3Search;
use strict;
+use vars qw(@W3Search_engines $W3Search_regex);
+@W3Search_engines = qw(AltaVista Dejanews Excite Gopher HotBot Infoseek
+ Lycos Magellan PLweb SFgate Simple Verity Google z);
+$W3Search_regex = join '|', @W3Search_engines;
-my $maxshow = 3;
+my $maxshow = 5;
sub W3Search {
my ($where, $what, $type) = @_;
my $retval = "$where can't find \002$what\002";
+ my $Search;
- return unless &main::loadPerlModule("WWW::Search");
-
- my @matches = grep { lc($_) eq lc($where) ? $_ : undef } @main::W3Search_engines;
+ my @matches = grep { lc($_) eq lc($where) ? $_ : undef } @W3Search_engines;
if (@matches) {
$where = shift @matches;
} else {
- &main::msg($main::who, "i don't know how to check '$where'");
+ &::msg($::who, "i don't know how to check '$where'");
+ return;
+ }
+
+ return unless &::loadPerlModule("WWW::Search");
+
+ eval {
+ $Search = new WWW::Search($where, agent_name => 'Mozilla/4.5');
+ };
+
+ if (!defined $Search) {
+ &::msg($::who, "$where is invalid search.");
+ return;
}
- my $Search = new WWW::Search($where);
my $Query = WWW::Search::escape_query($what);
$Search->native_query($Query,
-# {
+ {
+ num => 10,
# search_debug => 2,
# search_parse_debug => 2,
-# }
+ }
);
- $Search->http_proxy($main::param{'httpProxy'}) if (&main::IsParam("httpProxy"));
- my $max = $Search->maximum_to_retrieve(10); # DOES NOT WORK.
+ $Search->http_proxy($::param{'httpProxy'}) if (&::IsParam('httpProxy'));
+ #my $max = $Search->maximum_to_retrieve(10); # DOES NOT WORK.
- my ($Result, $count);
- my $r;
- ### TODO: don't duplicate hosts. minimize like with the files
- ### function.
+ my (@results, $count, $r);
+ $retval = "$where says \002$what\002 is at ";
while ($r = $Search->next_result()) {
- if ($Result) {
- $Result .= " or ".$r->url();
- } else {
- $Result = $r->url();
- }
+ my $url = $r->url();
+ $retval .= ' or ' if ($count > 0);
+ $retval .= $url;
last if ++$count >= $maxshow;
}
- if ($Result) {
- $retval = "$where says \002$what\002 is at $Result";
- }
-
- &main::performStrictReply($retval);
+ &::performStrictReply($retval);
}
1;