Show page Old revisions Backlinks This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. <html><table><tr><td></html> {{ :lpro:soap.png?nolink&100 |}} <html></td><td></html> {{ :lpro:webservice-soap.jpg.png?nolink&100 |}} <html></td></tr></table></html> ====== Cours WebServices ====== ===== Cours - Documents à télécharger ===== {{:lpro:cours-ws.odp|Cours WebServices}} {{:lpro:ws2.zip| Exemples}} {{:lpro:rest.pdf| Cours REST}} {{:lpro:restws.pdf| WebServices REST}} {{:lpro:restfulwebservices.pdf| Restful webservices}} {{:lpro:05-rest.pdf| Introduction REST}} * http://blog.programmableweb.com/2012/01/11/12-json-weather-apis/ * [[lpro:ws:rest_php|Exemple en php]] * WSDL : http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl * WSDL : ===== Exercice 1 : Consommer des WebServices en PHP (Conversion de température Celsius -> fahrenheit) / Partie 1===== * http://www.w3schools.com/xml/tempconvert.asmx?WSDL * Client PHP <code php> <?php // The weather // Chose your method, with or without user info $wsdl = 'http://www.w3schools.com/xml/tempconvert.asmx?WSDL'; // Make the connection $client = new SoapClient($wsdl); // Use this to see what services are available //var_dump($client->__getFunctions()); $listeFonctions = $client->__getFunctions(); //afficher foreach($listeFonctions as $k => $v) { echo $k."--".$v."\n" ; } // Actually call the service $result = $client->CelsiusToFahrenheit(array("Celsius"=>"25")); //var_dump($result); //afficher echo "les données\n" ; foreach($result as $k => $v) { echo $k."\n" ; print_r($v); } ?> </code> * Accéder à un objet PHP <code php> stdClass Object ( [MorningLow] => [DaytimeHigh] => 83 ) $monOnject->MorningLow ; </code> * Python <code python> from SOAPpy import WSDL import zeep client = zeep.Client('http://www.webservicex.net/ConvertSpeed.asmx?WSDL') result = client.service.ConvertSpeed( 102, 'kilometersPerhour', 'milesPerhour') print result </code> ===== Exercice 2 : Consommer des WebServices en PHP / Java (Partie 2) ===== * Conversion de température fahrenheit -> Celsius * Réalisez le même exercice que précédemment en utilisant la fonction inverse pour convertir une température de fahrenheit -> Celsius. * Utilisez Eclipse pour vous connecter à ce webservice : http://www.webservicex.net/ConvertSpeed.asmx?WSDL <code java> public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("test"); try { TempConvertSoapProxy temp = new TempConvertSoapProxy(); System.out.println(temp.fahrenheitToCelsius("123")); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } </code> <code java> public class TestSpeed { public static void main(String[] args) { // TODO Auto-generated method stub ConvertSpeedsSoapProxy c = new ConvertSpeedsSoapProxy(); SpeedUnit s1 = new SpeedUnit(SpeedUnit._kilometersPerhour); SpeedUnit s2 = new SpeedUnit(SpeedUnit._milesPerhour); try { System.out.println(c.convertSpeed(102, s1, s2)); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } </code> ===== Exercice 3 : Consommer des WebServices en PHP/Java ===== * client Java / PHP * URL : http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx * WSDL : http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx?WSDL * Lister les différentes fonctions * Créer une mini application qui permet de : * Lister les pays * Lister les jours fériés par mois * Indiquer la date pour chaque jours férié ===== Exercice 4 : Créer son WebService (Quel jour ?) en PHP (client PHP/Java) ===== * Créer le webservice "quel jour est il ?" en PHP (partie cliente et server) * Le formulaire devra prendre en entrée une date et en sortie renvoyer le jour de la semaine * Consommer le WS avec des clients PHP / Java / Python / Ruby * Créez votre propre fichier wsdl avec eclipse * [[lpro:ws:ws_avec_wsdl|Exemple avec fichier WSDL]] * {{ :lpro:151216.zip |}} * Exemple serveur php <code php> <?php // serv.php class MyService { public function add($x, $y) { return $x + $y; } public function multi($x, $y) { return $x * $y; } } //à adapter en fonction de votre configuration $options = array( 'uri' => 'http://localhost/LPRO/2016/serv.php', 'location' => 'http://localhost/LPRO/2016/serv.php', ); $server = new SOAPServer(null, $options); $server->setObject(new MyService()); $server->handle(); ?> </code> * Exemple client php <code php> <?php // cli.php // à adapter en fonction de votre configuration $options = array( 'uri' => 'http://localhost/LPRO/2016/serv.php', 'location' => 'http://localhost/LPRO/2016/serv.php', ); $client = new SOAPClient(null, $options); echo $client->multi(10, 15); ?> </code> * WSDL : Client <code php> <?php // Pour supprimer le cache du web-service ini_set('soap.wsdl_cache_enabled', 0); // Nouveau Client SOAP try { // Nouvelle instance de la classe soapClient $client = new SoapClient('http://127.0.0.1/lpro/ws1/Hello.wsdl', array('trace' => 1)); $parm = 'LPRO'; // Appel de la méthode hellotest du service web try{ $oReturn = $client->bonjour("LPRO"); } catch (Exception $e) { echo 'erreur1'.$e; } catch (SoapFault $fault) { echo "il y a une erreur"; trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR); } // affiche le résultat echo "Resultat : ".$oReturn."<br/>" ; } catch (SoapFault $fault) { echo 'erreur : '.$fault; } // Affichage des requetes et reponses SOAP (pour debug) echo '<br />Requete SOAP : '.htmlspecialchars($client->__getLastRequest()).'<br />'; echo '<br />Reponse SOAP : '.htmlspecialchars($client->__getLastResponse()).'<br />'; echo '<br/>'.var_dump($oReturn); ?> </code> ====== Exercice 5 : Manipuler le format JSON (open data Nantes) ====== * Json http://www.php.net/manual/en/function.json-decode.php * Utilisez les URL ci-dessous et affichez les données : * http://data.nantes.fr/donnees/fonctionnement-de-lapi/getdisponibiliteparkingspublics/ * Créez un formulaire pour retrouver une adresse complète * https://adresse.data.gouv.fr/api/ * Créez une page album des dernières images flickr avec un formulaire de saisie: * http://api.flickr.com/services/feeds/photos_public.gne?tags=90210&tagmode=all&format=json&nojsoncallback=1 <code php> <?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?> </code> * Exemple Json * [[http://www.actualitix.com/utiliser-manipuler-fichier-json-php.html]] <code json> { "response": { "version": "0.9" ,"termsofService": "http://www.actualitix.com" ,"features": { "date": "24/09/2013" } }, "cotation_bourse": [ { "bourse": { "heure": "15", "minute": "04" }, "total": { "compagnie": "Total", "cotation": "43,15", "tendance": "+ 1,04"}, "michelin": { "compagnie": "Michelin", "cotation": "82,42", "tendance": "+ 1,20"} }, { "bourse": { "heure": "09", "minute": "04" }, "yahoo": { "compagnie": "Yahoo", "cotation": "30,26", "tendance": "- 1,06"}, "google": { "compagnie": "Google", "cotation": "886,50", "tendance": "- 3,89"} } ] } </code> * Opendata Nantes <code php> <?php //$json = file_get_contents("cotation_bourse.json"); $json = file_get_contents("http://data.nantes.fr/api/getDisponibiliteParkingsPublics/1.0/39W9VSNCSASEOGV/?output=json"); $p_json = json_decode($json); $test = $p_json->{'opendata'}->{'request'}; //var_dump($p_json->{'opendata'}->{'answer'}->{'data'}->{'Groupes_Parking'}->{'Groupe_Parking'}); foreach($p_json->{'opendata'}->{'answer'}->{'data'}->{'Groupes_Parking'}->{'Groupe_Parking'} as $k=>$v) { foreach($v as $k2=>$v2) { echo $k2."=>".$v2."<br/>" ; } echo "-------------------------</br>" ; } //var_dump(json_decode($json, true)); //print_r($parsed_json->{'opendata'}); //echo prettyPrint(prettyPrint($json)); //echo json_encode($json, JSON_PRETTY_PRINT); ?> </code> ====== Manipuler le format XML (parsing simple) ====== <code php> $data = file_get_contents("http://?????.???"); $dom = new DomDocument(); //$dom->load('fichier.xml'); $dom->loadXML($data); $racine = $dom->documentElement; echo $racine->nodeName; $title=$dom->getElementsByTagName('title'); foreach($title as $v) { echo $v->firstChild->nodeValue."<br/>"; } </code> ===== Exercice 6 ===== * [[lpro:exercice6|Rest exercice]] * Recherchez un webservice permettant de lister les villes en fonction d'un code postal ===== Mots clés ===== * SOA, Architectures Orientés Services, REST * SOAP, WSDL, UDDI ===== Liens ===== http://fr.wikipedia.org/wiki/Service_Web http://fr.wikipedia.org/wiki/REST http://fr.wikipedia.org/wiki/SOAP http://fr.wikipedia.org/wiki/Architecture_orient%C3%A9e_services http://fr.wikipedia.org/wiki/Web_Services_Description_Language http://fr.wikipedia.org/wiki/JavaScript_Object_Notation http://fr.wikipedia.org/wiki/Universal_Description_Discovery_and_Integration http://fr.wikipedia.org/wiki/Asynchronous_JavaScript_And_XML http://gomashup.com/cms/ http://www.zippopotam.us/ http://www.flickr.com/services/feeds/ http://blog.visual.ly/data-sources/ {{ :lpro:openapi.png?900 |}} {{ :lpro:twitter.png?800 |}} http://eusebius.developpez.com/php5dom/ <code php> $values=simplexml_load_file("http://....."); </code> ===== Consommer des webservices ===== * **Exercices** : * [[conso-ws1 | Webservice population]] * Testez le webservice weather de yahoo * Testez le webservice translate de google utilisez les API XML et JSON de php pour afficher le résultat ==== Yahoo ==== * Weather [[http://developer.yahoo.com/weather/]] * Music [[http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20music.artist.search%20where%20keyword%3D%27Coldplay%27&diagnostics=true]] ==== Google ==== * Search [[https://www.googleapis.com/customsearch/v1?key=AIzaSyC_gM_6SV2kauoP4NyNx_4YVC370bpIzRk&cx=017576662512468239146:omuauf_lfve&q=tennis&callback=handleResponse&prettyprint=true]] * Search (JSON format) [[https://www.googleapis.com/customsearch/v1?key=AIzaSyC_gM_6SV2kauoP4NyNx_4YVC370bpIzRk&cx=017576662512468239146:omuauf_lfve&q=tennis&alt=json]] <code php> <?php $json = file_get_contents("VOTRE URL REST", true); //getting the file content $decode = json_decode($json, true); //getting the file content as array echo "<pre>"; print_r($decode); echo "</pre>"; foreach($decode["items"] as $k=>$v) { echo utf8_decode($v["displayLink"])."<br/>" ; } ?> </code> * http://search.twitter.com/search.atom?q=elkstein&count=5 * http://search.twitter.com/search.json?q=elkstein&count=5 ===== Création de webservice ===== * [[exercice1| Exercice1]] : Créer un webservice en PHP et consommez ce webservice avec un client PHP et Ruby * Exercice 2 : Créer ce même webservice "Restful" * [[lpro/ws/ex3 | Exercice 3]] : Créer un forumaire pour utiliser un moteur de recherche * [[.:Exercice4| Exercice 4]] : Formulaire interrogation XML API search de twitter * [[.:Exercice5| Exercice 5]] : Formulaire interrogation JSON API search de twitter * [[.:Exercice6| Exercice 6]] : Creer un WebService RESTful