tuto – ruby – rexml

Comme spécifier en intro de ce site, c’est le coté tout terrain easy de ruby qui m’a séduit. Je vais vous présenter un exemple d’utillisation de
ruby pour le xml avec la libraire rexml. J’ai développé ce code lorsque j’ai réalisé une brique pour communiquer avec la plateforme de partage
vidéo kewego. Le principe est de créer un flux xml et d’alimenter les valeurs classiques lors de l’upload d’une vidéo, à savoir le titre, la description, les mots clés, la catégorie et la langue.

 

lib à inclure :

require 'rexml/document'

 

instanciation de la librairie :

doc = REXML::Document.new

 

on ajoute une balise principale nommé « kewego_call » et une sous balise « params » :

doc.add_element("kewego_call")
doc.root.add_element("params")

 

on place notre variable video à la racine du flux et c’est à partir de là qu’on va pouvoir ajouter et alimenter les balises :

video = doc.root.elements[1]

 

création des élèments titre, description, catégories, keywords et langue :

title = REXML::Element.new("title")
title.text = "mon titre"
video.elements << title

desc = REXML::Element.new("description")
desc.text = "ma description"
video.elements << desc

cat = REXML::Element.new("categories")
cat.add_element("category")
cat.elements["category"].text = "ma catégorie choisit parmi celles proposées par kewego"
video.elements << cat

 

pour chacun des mots clés contenus dans le tableau meta, on créé une sous-balise keyword :

key = REXML::Element.new("keywords")
meta.each{ |keywrd|
    sub_key = key.add_element("keyword")
    sub_key.text = keywrd
 }
video.elements << key

lang = REXML::Element.new("language")
lang.text = "fr"
video.elements << lang

 

on obtient alors un flux de la forme :

<kewego_call>
    <params>
        <title>
            mon titre
        </title>
        <description>
            ma description
        </description>
        <categories>
            <category>
                ma catégorie choisit parmi celles proposées par kewego
            </category>
        </categories>
        <keywords>
            <keyword>
                premier mot-clé    
            </keyword>
            <keyword>
                second mot clé    
            </keyword>    
        </keywords>
        <language>
            fr
        </language>
    </params>
</kewego_call>

 

 

Après l’écriture d’un flux xml facile avec ruby et le gem rexml, voici un autre exemple mais de lecture de flux xml. Nous avons vu plus haut comment créer un flux xml, celui-ci servant à envoyer les informations en même temps que la vidéo que nous voulons uploader. Nous requêtons de la même manière pour obtenir l’url de la vidéo nouvellement uploadée à partir du flux xml recu en retour.

 

création d’une instance de REXML, xml_data correspond à la réponse en réponse d’une requête :

doc = REXML::Document.new(xml_data)

 

on parse le flux recu et on récupère le contenu de la balise que nous recherchons :

sig_node = doc.get_elements("/kewego_response/message/sig").first
if sig_node
    sig = sig_node.text
end

 

le flux recu et parsé ci-dessus était donc de la forme :

<kewego_response>
    <message>
        <sig>
            la donnée que je recherche
        </sig>
    </message>
</kewego_response>

 

et voilà rien de plus simple que d’utiliser le xml avec ruby et le gem rexml.