1 # WWWSearch backend, with queries updating the is-db (optionally)
2 # Uses WWW::Search::Google and WWW::Search
3 # originally Google.pl, drastically altered.
8 use vars qw(@W3Search_engines $W3Search_regex);
9 @W3Search_engines = qw(AltaVista Dejanews Excite Gopher HotBot Infoseek
10 Lycos Magellan PLweb SFgate Simple Verity Google);
11 $W3Search_regex = join '|', @W3Search_engines;
16 my ($where, $what, $type) = @_;
17 my $retval = "$where can't find \002$what\002";
19 return unless &main::loadPerlModule("WWW::Search");
22 &main::DEBUG("W3S: type => $type");
25 my @matches = grep { lc($_) eq lc($where) ? $_ : undef } @W3Search_engines;
27 $where = shift @matches;
29 &main::msg($main::who, "i don't know how to check '$where'");
32 my $Search = new WWW::Search($where);
33 my $Query = WWW::Search::escape_query($what);
34 $Search->native_query($Query,
37 # search_parse_debug => 2,
40 $Search->http_proxy($main::param{'httpProxy'}) if (&main::IsParam("httpProxy"));
41 my $max = $Search->maximum_to_retrieve(10); # DOES NOT WORK.
43 my (%results, $count, $r);
44 while ($r = $Search->next_result()) {
48 ### TODO: use array to preserve order.
49 if ($url =~ /^http:\/\/([\w\.]*)/) {
51 next if (exists $results{$hostname});
52 $results{$hostname} = $url;
54 &main::DEBUG("W3S: url isn't good? ($url).");
57 last if ++$count >= $maxshow;
60 if (scalar keys %results) {
61 $retval = "$where says \002$what\002 is at ".
62 join(' or ', map { $results{$_} } sort keys %results);
65 &main::performStrictReply($retval);