Recommend Me


Mardi 22 avril 2008

Article dans GLMF #105

Classé dans : Projets, Ruby — greg @ 18:40

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é :

  1. require ‘digest/md5′
  2. require ‘net/http’
  3. require ‘uri’
  4.  
  5. require ‘rubygems’
  6. require ‘hpricot’
  7.  
  8. class WebIndexer
  9.  
  10.   def initialize
  11.     @pagesMD5 = Array::new( )
  12.   end
  13.  
  14.   def indexer( uri )
  15.     puts "Indexation de #{uri}"
  16.   end
  17.  
  18.   def crawler( uri )
  19.     # Récupération de la ressource
  20.     url = URI.parse( uri )
  21.     response = Net::HTTP.get_response( url )
  22.    
  23.     # Récupération du contenu de la page
  24.     pageContent = response.body
  25.    
  26.     # Calcul du MD5 de la page
  27.     pageDigest = Digest::MD5.hexdigest( pageContent )
  28.     if @pagesMD5.include?( pageDigest )
  29.       return
  30.     end
  31.     @pagesMD5 << pageDigest
  32.  
  33.     # Indexation
  34.     case response.content_type
  35.       when "text/html"
  36.         indexer( uri )
  37.        
  38.         # Parcour des liens
  39.         pageDocument = Hpricot( pageContent )
  40.         (pageDocument/"a").each do |element|
  41.           href = element[‘href’]
  42.           if /#{url.host}/.match( href )
  43.             href += "/" if URI.parse( href ).path == ""
  44.             crawler( href )
  45.           else
  46.             puts "\t[INFO] - Ignore #{href} : Host not match!"
  47.           end
  48.         end
  49.       when "text/plain"
  50.         indexer( uri )
  51.       else
  52.         puts "\t[IGNORE] - #{uri} : Not Text or HTML!"
  53.     end
  54.   end
  55. end
  56.  
  57. site = WebIndexer.new( )
  58. site.crawler( ARGV[0] )
• • •

Un commentaire »

  1. yeah ! j’ai relu la traduction du PDF d’Oreilly (http://www.oreilly.fr/catalogue/2354020694) et ca m’avait fait saliver. J’ai hâte de voir ton article :)

    Commentaire par fredix — Jeudi 24 avril 2008 @ 12:49

RSS des commentairesTrackBack URI

Laisser un commentaire

You must be logged in to post a comment.

Powered by: WordPress • Template adapted from the Simple Green' Wench theme - RSS