Nous allons réaliser une recherche dans un PMB distant, récupérer les 5 premières notices résultantes et afficher leur titre/auteur principal.
Le script est développé en PHP 5. L'appel se fera via le protocole SOAP, l'extension php-soap sur votre environnement de test doit donc être installée.
Le webservice appelé est disponible sur le site de démonstration de PMB : demo.bibli.fr
L'adresse du webservice SOAP du site de démonstration est : http://demo.bibli.fr/ws/connector_out.php?source_id=2&wsdl
Créez un fichier recherche.php
sur un serveur web php5 (ou téléchargez le à l'adresse :
http://doc.sigb.net/ressources/doc_presentation_webservices/exemple1/recherche.php.txt
et renommez le fichier en recherche.php
)
Saisir le contenu suivant :
Appelez le fichier dans un navigateur : http://monserveur/[chemin_du_fichier]/recherche.php
Le résultat doit ressembler à l'écran ci-dessous.
Il y a dix résultats, les cinq premiers sont affichés
Le code peut être découpé en 3 parties :
Evidemment, c'est la deuxième partie qui est la plus importante et qui constitue le coeur du script.
Les éléments HTML de la page
Ils sont essentiellement déclarés au début et à la fin du code, avant et après la partie PHP proprement dite.
<html>
<head>
<title>Recherche documentaire</title>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
<style type='text/css'>
table {
border:1px solid #000;
}
td {
border:1px solid #000;
}
</style>
</head>
<body>
...
</body></html>
On reconnaît les éléments indispensables du HTML : <html><head> et <body>. Le jeu de caractère de la page est déclaré en UTF-8. L'élément de style (balise <style> sert juste à mettre des bordures aux cases du tableau d'affichage des réponses afin d'améliorer la lisibilité.
La recherche et la récupération des résultats
C'est dans cette partie qu'est réalisée l'interaction avec PMB. Au début, on instancie le client SOAP en lui donnant l'adresse du webservice de PMB :
//Connexion au webservice SOAP
$ws=new SoapClient("http://demo.bibli.fr/ws/connector_out.php?source_id=2&wsdl");
Au bout de l'adresse du webservice, on passe un argument : &wsdl
. Cela demande au serveur de renvoyer la liste des fonctions disponibles ainsi que leur arguments d'appel au format wsdl : Web Service Description Language, qui est un format XML normalisé. Le wsdl fait partie de SOAP.
Le client SOAP va construire les méthodes correspondantes au wsdl, qui sont dès lors utilisables en PHP.
Une des méthodes proposées par PMB permet de faire l'équivalent d'une recherche simple : pmbesSearch_simpleSearch
. Le nom des méthodes est toujours composé de deux parties séparées par un _
. La première partie pmbesSearch
représente un groupe de fonctions thématiques auquel appartient la méthode (ici des fonctions de recherche). La deuxième partie est la méthode proprement dite : simpleSearch
au sein de ce groupe.
$resultat=$ws->pmbesSearch_simpleSearch(0,$mots);
Les arguments passés :
Le premier représente le type de recherche (tous les champs, titre, auteur, ...). Dans notre cas, 0
signifie recherche sur tous les champs.
Le deuxième donne l'expression recherchée (ici la variable $mots
qui vaut "cuisine").
Le résultat des stocké dans la variable $resultat
. Il consiste en un objet qui possède deux propriétés :
searchId
: qui permet d'identifier par la suite la recherche sur le serveur afin de manipuler les résultats.nbResults
: qui donne le nombre de notices trouvées correspondantes à la recherche. Cette dernière propriété est utilisée pour afficher le nombre de résultats :
print "Recherche de ".$mots.", nombre de résultats : ".$resultat->nbResults;
La méthode fetchSearchRecords
du groupe pmbesSearch
renvoie un tableau de notices issues d'une recherche. C'est une récupération paginée. $notices=$ws->pmbesSearch_fetchSearchRecords($resultat->searchId,0,$nb,"header");
Les arguments passés sont les suivants :
L'identifiant de la recherche dont on veut récupérer le résultat, c.a.d la propriété searchId
de la réponse de la recherche : $resultat->searchId
La notice de départ : 0 = la première
Le nombre de notices que l'on veut récupérer : $nb
a été calculé précédemment pour ne pas demander plus de notices que le nombre de résultats trouvés. Dans notre cas, $nb
vaut 5
Le format des notices : header
signifie en format texte l'entête titre/auteur de la notice. Différents formats sont possibles : en UNIMARC, XML, ISBD, Tableau PHP, Ojet JSON, ... Les formats ne sont pas détaillés ici.
D'autres paramètres sont possibles, comme le jeu de caractère souhaité (iso-8859-1 au lieu d'UTF-8), récupérer les exemplaires ou non, les liens entre notices ou non.
Le résultat est un tableau qui contient le détail de chaque notice.
Affichage des résultats
Les lignes
print "<table>";
print "<tr><td>Identifiant PMB</td><td>Titre</td></tr>";
servent à préparer l'affichage en tableau HTML des notices.
Chaque élément du tableau de réponse est un objet notice qui possède deux propriétés :
noticeId
: le numéro unique de la notice dans la base de PMBnoticeContent
: le contenu de la notice au format demandéLa boucle
foreach ($notices as $notice) {
print "<td>".$notice->noticeId."</td>"."<td>".$notice->noticeContent."</td></tr>";
}
affiche donc pour chaque notice, sont identifiant dans PMB ainsi que son entête titre/auteur.