Article dans GLMF #105
Je ne l’ai pas encore eu entre les mains, mais vous trouverez un nouvel article sur Ruby dans le GNU Linux Magazine France #105 du mois de mai.
Cette fois-ci, je vous explique comment créer un mini moteur de recherche avec Ferret et Mongrel.
L’idée n’est pas tant de rentrer dans les détails de ces deux librairies, mais surtout de montrer qu’avec peu de lignes nous pouvons faire de belles choses…
Bonne lecture à tous et surtout n’hésitez pas à faire vos remarques ici ou par mail.
[Mise à jour]
Il y a un petit bug dans le script de la page 90, à la ligne 39. Voici le script corrigé :
-
require ‘digest/md5′
-
require ‘net/http’
-
require ‘uri’
-
-
require ‘rubygems’
-
require ‘hpricot’
-
-
class WebIndexer
-
-
def initialize
-
@pagesMD5 = Array::new( )
-
end
-
-
def indexer( uri )
-
puts "Indexation de #{uri}"
-
end
-
-
def crawler( uri )
-
# Récupération de la ressource
-
url = URI.parse( uri )
-
response = Net::HTTP.get_response( url )
-
-
# Récupération du contenu de la page
-
pageContent = response.body
-
-
# Calcul du MD5 de la page
-
pageDigest = Digest::MD5.hexdigest( pageContent )
-
if @pagesMD5.include?( pageDigest )
-
return
-
end
-
@pagesMD5 << pageDigest
-
-
# Indexation
-
case response.content_type
-
when "text/html"
-
indexer( uri )
-
-
# Parcour des liens
-
pageDocument = Hpricot( pageContent )
-
(pageDocument/"a").each do |element|
-
href = element[‘href’]
-
if /#{url.host}/.match( href )
-
href += "/" if URI.parse( href ).path == ""
-
crawler( href )
-
else
-
puts "\t[INFO] - Ignore #{href} : Host not match!"
-
end
-
end
-
when "text/plain"
-
indexer( uri )
-
else
-
puts "\t[IGNORE] - #{uri} : Not Text or HTML!"
-
end
-
end
-
end
-
-
site = WebIndexer.new( )
-
site.crawler( ARGV[0] )





