Lac de Brennilis

icone ruby

Module de recherche cgi en Ruby

Un programme CGI en Ruby de recherche par mots clefs sur un site web en html statique ou généré par compilation. Ce module est composé des fichiers suivants :

yann@berder:recherche_web$ ls cgi*
cgi-bin:
cgi_look_for.rb  index.txt  template.erb

cgi-lib:
index.rb  search.rb  words_with_files_in_index.rb

Les éléments qui sont décrits ici sont les fichiers :

  • index.rb qui implémentent la classe Index
  • cgi_look_for.rb pour le programme cgi de recherche.
  • Un exemple de formulaire pour utiliser le module de recherche dans une page HTML.

La classe Index

Première partie d'un ensemble de classes, modules et scripts qui vont composer ce module de recherche, la classe Index qui me permet d'instancier un objet index qui représente l'index dans un ou plusieurs fichiers des mots qui y sont contenus :

class Index 
 
  attr_reader :index
 
  def initialize
    @index = {}
  end
 
  def add_file_to_index(file_to_index)
    # pour chaque ligne du fichier, extraction des mots et indexation.
    File.open(file_to_index, "r") do |file|
      file.each_line do |line|
        line.scan(/\w[-\w]+\w/) do |word|      # Recherche des mots dans 1 ligne.
          word.downcase!
          @index[word] = [] if @index[word].nil?
          @index[word].push(file_to_index) unless @index[word].include?(file_to_index)
        end
      end
    end
  end
 
  def search(word)
    @index[word.downcase]
  end
 
end

Le programme cgi de recherche

Le programme ruby /cgi-bin/cgi_look_for.rb récupère la chaine de recherche expr du formulaire et va chercher dans le fichier index, index_tuxcoffee.txt, les fichiers répondants à cette expression.

require 'erb'
require 'cgi'
require 'words_with_files_in_index'
 
cgi = CGI.new("html4Tr")
 
# Get cgi entry parameter
expr = cgi['expr']
 
template = ""
File.open("./template_search_result.erb", "r") do |file|
  file.each_line { |line| template += line }
end
 
rhtml = ERB.new(template)
 
# setup the template data
words_with_files = WordsWithFilesInIndex.new("./index_tuxcoffee.txt", expr)
 
# Produce result.
out = rhtml.result(words_with_files.get_binding)
 
# HTML view
cgi.out { out }

Un exemple de formulaire de recherche

Une autre partie du module de recherche CGI en langage Ruby, le programme d'appel, appelé à partir d'un formulaire HTML. Le formulaire de recherche ressemble à ceci :

<form action="/cgi-bin/cgi_look_for.rb">
  <input type="text" name="expr" />
  <input type="submit" value="Rechercher" />
</form>

Archive d'un exemple complet

Discussion

Entrer votre commentaire:
IFBVI

Linkbacks

Use the following URL for manually sending trackbacks: http://hibou.eu/lib/plugins/linkback/exe/trackback.php/articles:devel:ruby:module_de_recherche_cgi_en_ruby
articles/devel/ruby/module_de_recherche_cgi_en_ruby.txt · Dernière modification: 13/07/2010 00:51 par yann
page made in 0.179 seconds