home *** CD-ROM | disk | FTP | other *** search
/ Internet 1996 World Exposition / park.org.s3.amazonaws.com.7z / park.org.s3.amazonaws.com / cgi-bin / park-search.cgi < prev    next >
Text File  |  2017-09-21  |  4KB  |  162 lines

  1. #!/usr/local/bin/perl -- -*-perl-*-
  2. #
  3. #  file: swish-search.cgi
  4. #  auth: brad burdick
  5. #  desc: process swish search using specified keywords and max hits
  6. #
  7.  
  8. eval 'exec /usr/local/bin/perl -s $0 ${1+"$@"}'
  9.   if 0;
  10.  
  11. # who am i?
  12. ($prog = $0) =~ s#.*/##;
  13.  
  14. # where we find local libraries
  15. push(@INC, '/web/fair/cgi-bin');
  16.  
  17. # CGI processing
  18. require 'cgi-lib.pl';
  19.  
  20. # generate HTML header
  21. &html_header('Search Results');
  22.  
  23. # parse the form input
  24. &parse_request(*query);
  25.  
  26. $status = 0;
  27.  
  28. if (defined(%query)) {
  29.     # perform the search
  30.     $status = &search(*query);
  31. } else {
  32.     # error processing input
  33.     print "<h1>Error processing form input</h1>\n";
  34.     print "<hr>\n";
  35.     print "<p>\n";
  36.     print "We were unable to process the input from the search form.\n";
  37.  
  38.     $status = 1;
  39. }
  40.  
  41. # generate HTML trailer
  42. &html_trailer;
  43.  
  44. exit $status;
  45.  
  46.  
  47. #
  48. #  perform the search
  49. #
  50. sub search {
  51.     local(*query) = shift;
  52.     local($keywords, $maxhits, $command);
  53.     # Where is the swish program.
  54.     local($swishprog) = '/usr/local/bin/swish';
  55.     # What is the name of the swish index file
  56.     local($swishindex) = '/usr/local/swish/sources/index-park.swish';
  57.  
  58.     $keywords = $query{'_keywords'};
  59.     $maxhits = $query{'_maxhits'};
  60.  
  61.     $command = "$swishprog -f $swishindex -w $keywords";
  62.    
  63.     if ($maxhits ne "ALL")  {
  64.         $command .= " -m $maxhits";
  65.     }
  66.  
  67.     open(SEARCH, "$command |") ||
  68.       die "$prog: unable to execute search engine: $!\n";
  69.  
  70.     $cnt = 0;
  71.     while (<SEARCH>)  {
  72.         chop;
  73.         if (/^#/)  {
  74.             next;                                  # comment
  75.         } elsif (/^\./)  {
  76.             next;                                  # END OF DATA
  77.         } elsif (/^err:/)  {
  78.             &search_problem($_);                   # an error occurred
  79.             return 1;
  80.         } elsif (/^search words:/)  {
  81.             ($stuff, $search_words) = split(/:/);
  82. #            push(@matches, "<font size=+1>T</font>he results of your search using");
  83. #            push(@matches, " the keyword(s): <b>$search_words</b><p>");
  84.         } else {
  85.             ($score, $url) = split(/ /);
  86.             ($other, $title, $size) = split(/"/);
  87.  
  88.             $cnt++;
  89. #            push(@matches, "<b>$cnt:</b> <a href=\"$url\">$title</a><br>");
  90.             push(@matches, "<li><a href=\"$url\">$title</a><br>");
  91.             push(@matches, " Score: <b>$score</b>, Size: <b>$size</b> bytes<p>");
  92.         }
  93.     }
  94.  
  95.     close(SEARCH);
  96.  
  97.     print "<h2>Results for the search of:</h2>";
  98.         print "<center>\n";
  99.         print "Keyword(s): <b>$keywords</b>\n";
  100.     print "Hits: <b>$cnt</b>\n";
  101.         print "<\/center>\n";
  102.     print "<hr width=\"75%\" align=\"center\">\n";
  103.     print "<p>\n";
  104.     print "<ol>\n";
  105.  
  106.     print join("\n", @matches), "\n";
  107.  
  108.     print "<p>\n";
  109.     print "</ol>\n";
  110.     print "<hr>\n";
  111.  
  112.     return 0;
  113. }
  114.  
  115.  
  116. #
  117. #  A problem occurred in the search
  118. #
  119. sub search_problem {
  120.     local($error) = shift;
  121.     # Swish diagnostic constants
  122.     local($ERR_NO_RESULTS)    = "err: no results";
  123.     local($ERR_NO_FILE_OPEN)  = "err: could not open index file";
  124.     local($ERR_NO_DATA)       = "err: no search words specified";
  125.     local($ERR_TOO_COMMON)    = "err: a word is too common";
  126.     local($ERR_EMPTY_INDEX)   = "err: the index file is empty";
  127.     local($ERR_UNKNOWN_INDEX) = "err: the index file format is unknown";
  128.  
  129.  
  130.     print "<BLOCKQUOTE>\n";
  131.  
  132.     if ($error eq $ERR_NO_RESULTS)  {
  133.         print "<font size=+1>N</font>o results were found.";
  134.     } elsif ($error eq $ERR_NO_FILE_OPEN)  {
  135.         print "<font size=+1>T</font>he index file could not be";
  136.         print " found or opened.  Contact the system administrator";
  137.         print " at <i>fairmaster\@park.org</i>";
  138.     } elsif ($error eq $ERR_NO_DATA)  {
  139.         print "<font size=+1>N</font>o search words were specified.";
  140.         print " Please return to search form and enter some criteria";
  141.         print " to search for.";
  142.     } elsif ($error eq $ERR_TOO_COMMON)  {
  143.         print "<font size=+1>T</font>he search words specified are";
  144.         print " too common.  Please return to search form and try again.";
  145.     } elsif ($error eq $ERR_EMPTY_INDEX)  {
  146.         print "<font size=+1>T</font>he index file contains";
  147.         print " no data.  Contact the system administrator";
  148.         print " at <i>fairmaster\@park.org</i>";
  149.     } elsif ($error eq $ERR_UNKNOWN_INDEX)  {
  150.         print "<font size=+1>T</font>he index file is unknown.";
  151.         print " Contact the system administrator";
  152.         print " at <i>fairmaster\@park.org</i>";
  153.     } else  {
  154.         print "<font size=+1>A</font>n unknown error occurred. ";
  155.         print " Contact the system administrator";
  156.         print " at <i>fairmaster\@park.org</i>";
  157.     }
  158.  
  159.     print "</BLOCKQUOTE>\n";
  160. }
  161.  
  162.