Télécharger ang Wikiloc : exemple d'utilisation des API SFR dans un script PHP

Éditeur : Hervé Hoareau   +
Mise à jour le : 22/02/2011  ·   Licence : Démonstration  ·   Téléchargé 26 fois   ·   Date de sortie : 22/02/2011
Présentation
Il suffit d'envoyer depuis une ligne SFR, le SMS : "#wikiloc# wiki" au 6010. Vous recevez dans les 5 minutes, la réponse par SMS sous forme d'un lien cliquable. Ce service ne fonctionne qu'avec des lignes SFR.
il est également possible d'obtenir un numéro court pour ne plus avoir besoin du #wikiloc# en envoyant "#wikiloc# short" au 6010.

Les requêtes ont été construites via l'API Test Tool de SFR API. Il est conseiller de s'inscrire pour utiliser votre propre identifiant plutôt que l'identifiant de l'exemple dont le compteur de crédits peut être épuisé.

Le code PHP, doit être appelé automatiquement a fréquence régulière via un cron afin d'analyser la file des SMS entrants. Dans notre exemple, ce code est hébergé chez free et régulièrement appelé par cronjobonline.
Téléchargement :






		
  1. <?php
  2.  
  3. //TOKEN g?n?r? ? titre de demonstration par SFR
  4. //le nombre de SMS disponibles sur ce compte peut ?tre ?puis?
  5. //il est conseiller de vous inscrire sur api.sfr.fr pour obtenir votre propre token
  6. define("DEVTOKEN","81e3d203dd52a852fa986624c718929c");
  7.  
  8. // RestRequest est une fonction g?n?rique pour ex?cuter des requ?tes REST en PHP
  9. // cette fonction utilise fopen. Elle est compatible avec l'h?bergement gratuit chez Free.
  10. function RestRequest ($url, $method='GET', $data=null, $optional_headers = null) {
  11. $params = array('http' =>
  12. array('method'=>$method,
  13. 'content'=>$data,
  14. 'timeout'=>20
  15. ));
  16.  
  17. if ($optional_headers !== null) {$params['http']['header'] = $optional_headers;}
  18.  
  19. $ctx = stream_context_create($params);
  20. $fp = @fopen($url, 'rb', false, $ctx);
  21.  
  22. if (!$fp) {
  23. //throw new Exception("Problem with $url, $php_errormsg");
  24. echo("Requete en echec\n");
  25. return(null);
  26. }
  27. $response = @stream_get_contents($fp);
  28.  
  29. if ($response === false) {throw new Exception("Problem reading data from $url, $php_errormsg");}
  30.  
  31. return $response;
  32. }
  33.  
  34.  
  35. //Le code principale est appell? r?guli?rement via un cron
  36. //Sur cronjobonline il est possible de mettre en place
  37. //gratuitement un appel r?gulier pour une page php.
  38.  
  39. //Via la m?thode Consume on interroge la file des SMS entrants
  40. //cette m?thode ? ?t? construite via l'API Test Tool d'SFR API : api.sfr.fr/apitesttool
  41. $event=simplexml_load_string(RestRequest("http://ws.red.sfr.fr/red-ws/red-b2c/resources/event/consume?responseType=xml&token=".DEVTOKEN));
  42. if($event->redEvent->eventCode==11)
  43. {
  44. //On r?cup?re le num?ro de l'exp?diteur
  45. $exp=$event->redEvent->eventSource;
  46.  
  47. //Si le message est "wiki"...
  48. if(strtolower($event->redEvent->eventMessage)=="wiki"){
  49.  
  50. //... On g?olocalise la ligne ?metrice
  51. //la premi?re fois il faut qu'elle confirme qu'elle accepte d'?tre g?olocalis?e par WikiLoc
  52. //si elle confirme la localization peut ?tre r?alis?e
  53. $url="http://ws.red.sfr.fr/red-ws/red-b2c/resources/loc/localize?responseType=xml&token=".DEVTOKEN.
  54. "&userIdentifier=".$exp."&type=PhoneNumber";
  55. $rc=simplexml_load_string(RestRequest($url));
  56.  
  57. //Si la localisation a pu ?tre r?alis?e errorcode=0 ...
  58. if(($rc)&&($rc->errorCode==0)){
  59. $lng=$rc->location->longitude;
  60. $lat=$rc->location->latitude;
  61.  
  62. //... On interroge le service geoname pour r?cup?r? les articles wikipedia les plus proches
  63. //Le service est interog? avec le username "sfrapi", il est conseiller de vous inscrire
  64. //afin d'utiliser votre propre compte
  65. $xml=simplexml_load_string(RestRequest("http://api.geonames.org/findNearbyWikipedia?lat=".$lat."&lng=".$lng."&username=sfrapi&style=full"));
  66. if($xml)
  67. //puis on recherche l'article le plus pertinent dans la liste des articles
  68. //retourn?s par geoname
  69. for($i=0;$i<count($xml->entry);$i++){
  70. $article=$xml->entry[$i];
  71. if($article->rank>$max){$max=$article->rank;$best=$article;}
  72. }
  73.  
  74. //Enfin le lien vers l'article le plus pertinent est renvoy? via SMS au demandeur.
  75. RestRequest("http://ws.red.sfr.fr/red-ws/red-b2c/resources/sms/send?responseType=xml&token=".DEVTOKEN."&to=".$exp."&type=PhoneNumber&msg=".$best->wikipediaUrl);
  76. }
  77. }
  78.  
  79. //Si le message est "short" on affecte un num?ro court ? l'exp?diteur qui
  80. //pourra ?tre utilis? pour ?viter l'usage du 6010 avec l'alias #wikiloc#
  81. if(strtolower($event->redEvent->eventMessage)=="short"){
  82. $xml=simplexml_load_string(RestRequest("http://ws.red.sfr.fr/red-ws/red-b2c/resources/shortcode/generateSmsShortcode?responseType=json&token=".DEVTOKEN."&msisdn=".$exp));
  83. if($xml->errorCode==0)
  84. RestRequest("http://ws.red.sfr.fr/red-ws/red-b2c/resources/sms/send?responseType=xml&token=".DEVTOKEN."&to=".$exp."&type=PhoneNumber&msg=utilisez%20ce%20numero%20pour%20interroger%20wikiloc%20en%repondant%20wiki");
  85. }
  86. }
  87. ?>
  88.  
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.

Connexion

Identifiant
Mot de passe
S'inscrireMot de passe oublié ?
 
 
 
 
Partenaires

Hébergement Web