html/google.pl
1 # - Google.pl
2
3 # - You have to modify this line to the path
4 # - of your LWP-dir
5
6 use lib '/usr/lib/perl5/vendor_perl/5.6.1';
7
8 use Irssi;
9 use LWP::UserAgent;
10 use strict;
11 use vars qw($VERSION %IRSSI);
12
13 $VERSION = '1.00';
14 %IRSSI = (
15 authors => 'Oddbjørn Kvalsund',
16 contact => 'oddbjorn.kvalsund@hiof.no',
17 name => 'Google',
18 description => 'This script queries google.com and returns the results.',
19 license => 'Public Domain',
20 );
21
22 ## Usage:
23 ## /google [-p, prints to current window] [-<number>, number of searchresults returned] search-criteria1 search-criteria2 ...
24 ##
25 ## History:
26 ## - Sun May 19 2002
27 ## Version 0.1 - Initial release
28 ## -------------------------------
29
30 #-------------------------------------------------
31 my $nr_sites = 3; # Search-results returned
32 my $prefix = ""; # Message printed before results
33 #-------------------------------------------------
34
35 sub cmd_google {
36
37 my ($data, $server, $witem) = @_;
38 my $url = "";
39 my $nr_sites = 3;
40 my $i = 0;
41 my (@lines, @pages);
42 my $mode = "quiet";
43
44 # If user supplied nr_sites, activate his setting
45 if ( $data =~ /-(\d\s)/ ) { $nr_sites = $1 };
46 if ($data =~ /-10/) { $nr_sites = 10 };
47 $data =~ s/-\d+//g; # remove nr_sites from $data
48
49 # Switch to public mode
50 # and return error msg if invalid window
51 if ( $data =~ /-p/ ) {
52 $mode = "public";
53 if ( ! $witem ) {
54 Irssi::active_win()->print("Must be run run in a valid window (CHANNEL|QUERY)");
55 return;
56 }
57 }
58 $data =~ s/-p//g; # remove -p from $data
59
60 # Format the query-string
61 $data =~ s/\s/+/g;
62 my $query = $data;
63
64 # Initialize LWP
65 my $ua = new LWP::UserAgent;
66 $ua->agent("AgentName/0.1 " . $ua->agent);
67
68 # Do the actual seach
69 my $req = new HTTP::Request GET => "http://www.google.com/search?hl=en&q=$query";
70 my $res = $ua->request($req);
71 my $content = $res->content;
72
73 # Replace <br> with newlines
74 # and remove tags
75 $content =~ s/\<br\>/\n/g;
76 $content =~ s/\<.+?\>//sg;
77
78 # Make array @pages of all search-results
79 @lines = split("\n", $content);
80 @pages = grep (/pages$/, @lines);
81
82 # Remove empty entries in @pages
83 for ($i=0;$i<=$#pages;$i++) {
84 $pages[$i] =~ s/\s+.*//g;
85 if ($pages[$i] =~ /(^\n|\s+\n)/){ splice(@pages, $i, 1) };
86 if ($pages[$i] !~ /\./){ splice(@pages, $i, 1) };
87 }
88
89 if($nr_sites > $#pages) { $nr_sites = $#pages + 1};
90
91 # Print pages to current window if public-mode specified
92 # else display a private notice of returned pages
93 if ( $mode eq "public") {
94 if ($prefix ne "") { $witem->command("/SAY $prefix") } ;
95 for ($i=0; $i<$nr_sites; $i++) {
96 $pages[$i] =~ s/\s+.*//g;
97 $witem->command("/SAY http://$pages[$i]");
98 }
99 }
100 else {
101 for ($i=0; $i<$nr_sites; $i++) {
102 $pages[$i] =~ s/\s+.*//g;
103 Irssi::active_win()->print("http://$pages[$i]");
104 }
105 }
106 }
107
108 Irssi::command_bind('google', 'cmd_google');