Exploiter Ziki avec WinDev

Stéphane Bertolotti

Il est possible assez simplement d'exploiter les données de Ziki via WinDev grâce à l'API mise à disposition. ♪

L'essentiel est de bien prendre en main les fonctions de requête Http et la manipulation des fichiers XML.

- Titre : Exploiter Ziki avec WinDev

- Auteur : Stéphane Bertolotti

- Parution : 14 décembre 2008

- Licence : Copyright ® 2008 Stéphane Bertolotti. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Faire une recherche de personne et récupérer les informations disponibles.

- II. Tirer des informations du résultat obtenu

- II-A. Récupération des informations

- II-B. Afficher l'image <thumbnail>

- III. Autres balises et recherche possible

I - Faire une recherche de personne et récupérer les informations disponibles.

Trois possibilités de recherche :

- par Nom ;

- par Prénom ;

- par Nom et Prénom.

Pour effectuer ces recherches, il faudra donc créer deux champs de recherche, nom et prénom.

Pour traiter la recherche, il faudra tester quels sont les champs renseignés pour envoyer la bonne requête. Un test de chaine vide sur les champs de saisie suffira.

Dans le code suivant

- SNomZiki est le champ de saisie Nom ;

- SPrenomZiki est le champ de saisie Prénom ;

- monresultat est une variable de type chaine.

SI SNomZiki <> "" ET SPrenomZiki <> "" ALORS
HTTPRequête("http://www.ziki.com/fr/web.xml?first_name=" + SPrenomZiki + "&last_name=" + SNomZiki)
monresultat = HTTPDonneRésultat(HTTPRésultat)
fSauveTexte("C:\Temp\resultat.xml", monresultat)
SINON
SI SNomZiki <> "" ET SPrenomZiki = "" ALORS
HTTPRequête("http://www.ziki.com/fr/web.xml?last_name=" + SNomZiki)
monresultat = HTTPDonneRésultat(HTTPRésultat)
fSauveTexte("C:\Temp\resultat.xml", monresultat)
SINON
SI SNomZiki = "" ET SPrenomZiki <> "" ALORS
HTTPRequête("http://www.ziki.com/fr/web.xml?first_name=" + SPrenomZiki)
monresultat = HTTPDonneRésultat(HTTPRésultat)
fSauveTexte("C:\Temp\resultat.xml", monresultat)
FIN
FIN
FIN

Déroulement de l'action de recherche

Test du cas d'emploi et envoi de la requête formatée correctement. La requête est la même pour chaque cas, seuls les paramètres de recherche changent.

La base est : http://www.ziki.com/fr/web.xml?

Les paramètres sont :

- pour le prénom : first_name= //suivi de votre variable prénom ;

- pour le nom : last_name= //suivi de votre variable Nom ;

- le signe & lie les paramètres de recherche entre eux dans le cas d'une recherche combinée Nom + Prénom.

Après cela, on stocke le résultat renvoyé dans une variable de type chaine (chaîne = HttpDonneResultat(HttpResultat)), ici monresultat et on sauvegarde cette chaine dans un fichier xml grâce à la fonction FSauveTexte(chemin + nom du fichier).

II - Tirer des informations du résultat obtenu

Afin d'exploiter le résultat, il nous faut initialiser une vue sur le document XML grâce à la fonction XMLDocument(Nom à attribuer à cette vue, source xml). Dans le cas de mon exemple, cela donne :

XMLDocument("ZIKI",monresultat)

L'affectation de la chaine monresultat comme source XML est possible puisqu’à aucun moment cette chaine n'a été modifiée depuis le début du traitement.

II-A - Récupération des informations

Les informations que nous souhaitons exploiter dans le résultat retourné et sur lequel nous avons ouvert une vue précédemment sont stockées entre balises. Le tout est de connaitre ces balises afin d'axer notre recherche.

Les balises utilisées par Ziki

response

pages

<current> - Page Courante

<total> - Nombre de pages de résultats trouvées, une page peut contenir 16 résultats Ziki différents

/pages

zikis

ziki

<Nickname> - pseudo

<First_Name> - Prénom

<Last_name> - Nom

<City> - Ville

<Country> - Code Pays (FR pourFrance par exemple)

Thumbnail

http://www.. - Indique l'url du thumbnail de l'utilisateur si une photo existe

/Thumbnail

URL

<Html> -URL du profil de l'utilisateur

<XML> - URL de l'XML de l'utilisateur

/URL

/Ziki

/Zikis

/Response

Maintenant que nous connaissons les informations de base que nous pouvons rechercher, passons à la méthode de recherche en elle-même grâce aux fonctions de navigation, de recherche, et d'extraction de données dans les flux XML de WinDev.

XMLRacine("ZIKI")
XMLRecherche("ZIKI","la balise à rechercher",XMLBalise+XMLSousElément,XMLExact+XMLIgnoreLaCasse)
SI XMLTrouve("ZIKI") ALORS
XMLFils("ZIKI")
mavariable = XMLDonnée("ZIKI")
FIN

Premièrement, on se positionne en haut de notre vue XML afin que la recherche se déroule hiérarchiquement et on donne les indications de recherche, ici on effectue une recherche sur notre vue ("ZIKI"), "le nom de la balise à rechercher", et les options de recherche. L'utilisation de XMLExact+XMLIgnoreCasse est possible lorsque l'on sait que chercher. Il est également possible de chercher directement dans la valeur des balises et des attributs en utilisant l'option de recherche XMLValeur.

Ensuite, nous poursuivons le traitement seulement si un résultat est renvoyé. Si tel est le cas, on se positionne sur le fils XML pour récupérer la valeur, même si ce n'est pas à chaque fois indispensable cela permet de prévoir les cas où ça l'est, et on attribue le résultat de la recherche à une variable que vous aurez créée.

Pour les noms, prénoms, ville et pseudo il est intéressant d'attribuer la variable qui va contenir le résultat par cette méthode :

mavariable = UTF8VersChaîne(XMLDonnée("ZIKI"),alphabetAnsi)

Cela permet d'obtenir un résultat interprétant convenablement les accents et autres caractères spéciaux.

II-B - Afficher l'image <thumbnail>

Ici le traitement diffère légèrement, la recherche sur la balise <thumbnail> est classique et renvoie l'URL de l'image utilisateur que nous devrons exploiter afin de pouvoir l'afficher dans un champ image.

XMLRecherche(&#8221;ZIKI&#8221;, &#8220;thumbnail&#8221;, XMLBalise+XMLSousElément, XMLExact+XMLIgnoreLaCasse)
SI XMLTrouve(&#8221;ZIKI&#8221;) ALORS
XMLFils(&#8221;ZIKI&#8221;)
monurl = XMLDonnée(&#8221;ZIKI&#8221;)

Afin de pouvoir afficher l'image, il va nous falloir l'enregistrer au préalable. Pour ce faire, nous allons créer un fichier Images.gif via la fonction FOuvre avec l'option FoCréation.

// Ouverture du fichier &#8220;C:\MesImages\Images.GIF&#8221;
IdFichier = fOuvre (&#8221;C:\Temp\Images.GIF&#8221; , foCréation )
SI IdFichier <> - 1 ALORS

Nous allons ensuite, envoyer une requête HTTP sur l'URL récupérée et stockée dans une variable en fin de recherche (monurl). Il nous faudra déterminer si la requête a abouti.

// Récupération de l'image
ResAppel = HTTPRequête ( monurl )

Si la requête est un succès, nous allons écrire son résultat directement dans le fichier Images.gif que nous avons créé via la fonction FEcrit avec la valeur HTTPDonneRésultat. Si la requête a échoué, nous n'écrivons rien et dans les deux cas, il ne faut pas oublier de fermer le fichier Images.gif créé afin de ne pas bloquer les futures utilisations de celui-ci.

SI ResAppel = Vrai ALORS
// Enregistrement de l'image récupérée dans le fichier
fEcrit(IdFichier, HTTPDonneRésultat())
FIN
// Fermeture du fichier
fFerme ( IdFichier )
FIN

On peut maintenant afficher notre image dans un champ prévu à cet effet. Iziki est ici un champ image.

IZiki = "C:\Temp\Images.GIF"
FIN

La récupération et l'affichage des images ne posent plus de soucis. Voici le code complet pour une vision d'ensemble.

XMLRecherche("ZIKI", "thumbnail", XMLBalise+XMLSousElément, XMLExact+XMLIgnoreLaCasse)
SI XMLTrouve("ZIKI") ALORS
XMLFils("ZIKI")
monurl = XMLDonnée("ZIKI")
// Ouverture du fichier &#8220;C:\MesImages\Images.GIF"
IdFichier = fOuvre ("C:\Temp\Images.GIF" , foCréation )
SI IdFichier <> - 1 ALORS
// Récupération de l'image
ResAppel = HTTPRequête ( monurl )
SI ResAppel = Vrai ALORS
// Enregistrement de l'image récupérée dans le fichier
fEcrit(IdFichier, HTTPDonneRésultat())
FIN
// Fermeture du fichier
fFerme ( IdFichier )
FIN
IZiki = &#8220;C:\Temp\Images.GIF"
FIN

III - Autres balises et recherche possible

Maintenant que vous êtes à l'aise avec la recherche et le traitement des informations, voici de quoi vous occuper encore un peu.

Une requête effectuée de cette manière renvoie un fichier XML beaucoup plus complet :

http://www.ziki.com/fr/people/"PSEUDO".xml

Les balises de ce fichier XML :

<response version="1.0?>
<ziki>
<url></url>
<nickname></nickname>
<first_name></first_name>
<last_name></last_name>
<gender></gender>
<birthday>0000-00-00</birthday>
<city></city>
<country></country>
<lang></lang>
<website></website>
<vcard action= "/>
<baseline></baseline>
<photos>
<thumb></thumb>
<small></small>
<medium></medium>
</photos>
<stats>
<feeds></feeds>
<followings></followings>
<followers></followers>
<connections></connections>
<technorati_rank></technorati_rank>
<feedburner_circulation></feedburner_circulation>
</stats>
<feeds>
<feed title=></feed>
</feeds>
<network>
<followings></followings>
<followers></followers>
<connections></connections>
</network>
<profiles>
<profile>
<name>LinkedIn</name>
<url></url>
</profile>
<profile>
<name>Dailymotion</name>
<url></url>
</profile>
<profile>
<name>Facebook</name>
<url></url>
</profile>
</profiles>
</ziki>
</response>

C'est un exemple d'ossature, celle-ci diffère bien sûr suivant les profils utilisateurs que vous recherchez.

Vous pouvez également effectuer ces recherches :

- Fans d'un Ziki : http://www.ziki.com/fr/people/"PSEUDO"/favorites/fans.xml

- Connexions d'un Ziki : http://www.ziki.com/fr/people/"PSEUDO"/favorites/connections.xml (Prochainement)

Pour ces deux recherches, vous pouvez ajouter ?page="numero de la page que vous souhaitez consulter" en fin d'URL afin de naviguer dans les pages de résultats.

Une dernière pour la route, la recherche par mot clé simple et composée.

Simple : http://www.ziki.com/fr/people.xml?tags="MOT CLE 1?

Composée : http://www.ziki.com/fr/people.xml?tags="MOT CLE 1? +"MOT CLE 2?

Il va de soi qu'il va vous falloir intégrer ces traitements dans des boucles pour des recherches multirésultats et que les extractions XML des fonctions WinDev seraient une piste à approfondir afin de, par exemple, créer une vue par page puis par résultat.

Enfin, pour approfondir le sujet, je vous conseille d'aller jeter un œil par là

Et bien voilà. Je précise que c'est une manière de coder sous WinDev avec l'API de ZIKI et certainement ni la seule ni la meilleure.