package W3Search;
use strict;
+use vars qw(@W3Search_engines $W3Search_regex);
-my $maxshow = 3;
+@W3Search_engines = qw(AltaVista Dejanews Excite Gopher HotBot Infoseek
+ Lycos Magellan PLweb SFgate Simple Verity Google z);
+$W3Search_regex = join '|', @W3Search_engines;
+
+my $maxshow = 5;
sub W3Search {
- my ($where, $what, $type) = @_;
+ 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'");
+ $where = shift @matches;
+ }
+ else {
+ &::msg( $::who, "i don't know how to check '$where'" );
+ return;
}
- my $Search = new WWW::Search($where);
- my $Query = WWW::Search::escape_query($what);
- $Search->native_query($Query,
-# {
-# 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.
-
- my (%results, $count, $r);
- while ($r = $Search->next_result()) {
- my $url = $r->url();
-
- ### TODO: fix regex.
- ### TODO: use array to preserve order.
- if ($url =~ /^http:\/\/([\w\.]*)/) {
- my $hostname = $1;
- next if (exists $results{$hostname});
- $results{$hostname} = $url;
- } else {
- &main::DEBUG("W3S: url isn't good? ($url).");
- }
-
- last if ++$count >= $maxshow;
+ 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;
}
- if (scalar keys %results) {
- $retval = "$where says \002$what\002 is at ".
- join(' or ', map { $results{$_} } sort keys %results);
+ my $Query = WWW::Search::escape_query($what);
+ $Search->native_query(
+ $Query,
+ {
+ num => 10,
+
+ # search_debug => 2,
+ # search_parse_debug => 2,
+ }
+ );
+ $Search->http_proxy( $::param{'httpProxy'} ) if ( &::IsParam('httpProxy') );
+
+ #my $max = $Search->maximum_to_retrieve(10); # DOES NOT WORK.
+
+ my ( @results, $count, $r );
+ $retval = "$where says \002$what\002 is at ";
+ while ( $r = $Search->next_result() ) {
+ my $url = $r->url();
+ $retval .= ' or ' if ( $count > 0 );
+ $retval .= $url;
+ last if ++$count >= $maxshow;
}
- &main::performStrictReply($retval);
+ &::performStrictReply($retval);
}
1;
+
+# vim:ts=4:sw=4:expandtab:tw=80