]> git.donarmstrong.com Git - infobot.git/blob - src/Modules/zfi.pl
dee9f5f5bc309309600036169c71e49abc751ac6
[infobot.git] / src / Modules / zfi.pl
1 package zfi;
2
3 # Search Zaurus Feeds Index (ZFI)
4 # Version 1.0
5 # Released 02 Oct 2002
6
7 # Based on ZSI package by Darien Kruss <darien@kruss.com>
8 # Modified by Jordan Wiens <jordan@d0pe.com> (numatrix on #zaurus) and
9 # Eric Lin <anselor@d0pe.com> (anselor on #zaurus) to search ZFI instead of ZSI
10
11 # This script relies on the following page returning results
12 # http://zaurii.com/zfi/zfibot.php
13 # Returns the 5 latest/newest entries
14
15 # http://zaurii.com/zfi/zfibot.php?query=XXXX
16 # Returns all matches where XXX is in the name, description, etc
17
18 # Returned matches are pipe-separated, one record per line
19 # name|URL|description
20
21 # These are the phrases we get called for:
22
23 # 'zfi'  or  'zfi <search>'
24
25 # We reply publicly or privately, depending how we were called
26
27 use strict;
28
29 my $no_zfi;
30
31 BEGIN {
32         $no_zfi = 0;
33         eval "use LWP::UserAgent";
34         $no_zfi++ if ($@);
35 }
36
37 sub queryText {
38         my ($query) = @_;
39
40         if ($no_zfi) {
41                 &::status("zfi module requires LWP::UserAgent.");
42                 return '';
43         }
44
45         my $res_return = 5;
46
47         my $ua = new LWP::UserAgent;
48         $ua->proxy('http', $::param{'httpProxy'}) if (&::IsParam('httpProxy'));
49
50         $ua->timeout(10);
51
52         my $searchpath;
53         if ($query) {
54                 $searchpath = "http://zaurii.com/zfi/zfibot.php?query=$query";
55         } else {
56                 $searchpath = "http://zaurii.com/zfi/zfibot.php";
57         }
58
59         my $request = new HTTP::Request('GET', "$searchpath");
60         my $response = $ua->request($request);
61
62         if (!$response->is_success) {
63                 return "Something failed in connecting to the ZFI web server. Try again later.";
64         }
65
66         my $content = $response->content;
67
68         if ($content =~ /No entries found/im) {
69                 return "No results were found searching ZFI for '$query'.";
70         }
71
72         my $res_count = 0; #local counter
73         my $res_display = 0; #results displayed
74
75         my @lines = split(/\n/,$content);
76
77         my $result = '';
78         foreach my $line (@lines) {
79                 if (length($line) > 10) {
80                         my ($name, $href, $desc) = split(/\|/,$line);
81
82                         if ($res_count < $res_return) {
83                                 $result .= "$name ($desc) $href : ";
84                                 $res_display ++;
85                         }
86                         $res_count ++;
87                 }
88         }
89
90         if (($query) && ($res_count > $res_display)) {
91                 $result .= "$res_display of $res_count shown. All at http://zaurii.com/zfi/index.phtml?p=r&r=$query";
92         }
93
94         return $result;
95 }
96
97 sub query {
98         my ($args) = @_;
99         &::performStrictReply(&queryText($args));
100         return;
101 }
102
103 1;
104 # vim: shiftwidth=2 tabstop=2
105 __END__