Développer un agent intelligent en Ruby

Qui n'a pas un jour eu besoin d'un robot effectuant une action répétitive sur le Web. Une bibliothèque Ruby permet d'effectuer le cheminent que ferait un visiteur humain sur un site.

Qui n'a pas un jour eu besoin d'un robot effectuant une action répétitive sur un site Web. C'est ce que nous allons réaliser sous la forme d'un simple script Ruby.

Pièces détachées

Pour construire notre robot nous avons besoin des ces divers éléments :

 Ruby
 La bibliothèque Mechanize
 Un éditeur de texte, si vous êtes sous windows je vous conseille d'aller voir du côté de chez e-texteditor

Assemblage

Nous allons étudier un exemple fourni dans la documentation de Mechanize : celui qui permet d'envoyer automatiquement une image sur le site Flickr.

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new 

# Page de connexion à Flickr
page = agent.get('http://flickr.com/signin/flickr/')

# Remplissage du formulaire de connexion
form = page.forms.name('flickrloginform').first

form.email = ARGV[0]
form.password = ARGV[1]
page = agent.submit(form)

# Page de transfert
page = agent.click page.links.text('Upload')

# Remplissage du formulaire de transfert
form = page.forms.action('/photos_upload_process.gne').first

form.file_uploads.name('file1').first.file_name = ARGV[2]
agent.submit(form)

Rien qu'en lisant le code on arrive déjà à comprendre le fonctionnement général de cet exemple. On retrouve les classiques inclusions de bibliothèque et initialisations d'objets au debut du script.

Mechanize permet d'effectuer toutes les actions que ferrait un visiteur humain sur une page web. Notre robot commence donc par ouvrir la page de connexion de Flicker en utilisant le fonction get. Puis il trouve le formulaire avec forms.name('nom_du_formulaire').first et remplis chaque champs : la fonction précédente nous a retourné un objet initialisé avec tous les champs du formulaire, on peut y accéder directement.

Il ne nous reste plus qu'a soumettre ce formulaire, c'est ce que fait la méthode submit, ça reviendrait à cliquer sur le bouton Get in there si on était un vrai visiteur en chair et en os.

Voila, on est connecté, pour transférer une image il faut simuler un clic sur le lien texte Upload, c'est ce que fait le morceau de script qui suit (Le agent.clic ...) et remplir le nouveau formulaire, celui du transfert. On notera la fonction file_uploads qui facilite bien les choses...

Le transfert commence dès qu'on valide ce dernier formulaire.

Vous avez vu, c'est vraiment très simple. Il ne vous reste plus qu'a créer votre propre script pour automatiser vos tâches de navigation qui seraient un peut trop rébarbatives. Vous pouvez vous en servir pour exemple mettre à jour un site de façon régulière en plaçant votre script dans une tâche cron.

Contenu proposé sous licence Creative Commons par Stéphane Brun