Classe wikiloc

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 967 fois - Téléchargée 15 fois

Contenu du snippet

Ceci est une source ré-écrite à partir de la source se trouvant à cette url :
http://www.phpcs.com/codes/WIKILOC-ARTICLE-WIKIPEDIA-SUR-VOTRE-MOBILE-SFR-PLUS_52839.aspx

Titre de la source : L'ARTICLE WIKIPEDIA SUR VOTRE MOBILE SFR LE PLUS PROCHE DE L'ENDROIT OU VOUS ÊTES PAR UN SIMPLE SMS VIA SFR API

Le service wikiloc peut être customisé en bas du script et les classes peuvent être ré-utilisées à d'autres fins.

Source / Exemple :


<?php

	/**



	/**

  • Classe d'erreur générique
  • /
class WikiLoc_Exception extends Exception { } /**
  • Classe d'erreur du webservice
  • /
class WikiLoc_Exception_WS extends WikiLoc_Exception { } /**
  • Classe générique gérant la communication avec le webservice
  • /
class WikiLoc_WS { /**
  • Nom du serveur contenant le webservice
  • /
private $server; /** public static $context = array( 'http' => array( 'method' => 'GET', 'timeout' => 20 ) ); public function __construct($server) { $this->server = $server; } /**
  • Execute un appel vers le webservice et retourne la réponse sous forme de chaine
  • @params string l'url a executer
  • @params array un tableau associatif d'arguments
  • @returns string la réponse de la page
  • /
public function Run($uri, $parameters = null) { // crée l'url $url = 'http://'.$this->server.$uri; if (is_array($parameters)) { $url .= '?'; foreach($parameters as $name => $value) { $url .= $name.'='.urlencode($value).'&'; } } // crée le contexte $context = stream_context_create(self::$context); if (!$content) { throw new WikiLoc_Exception_WS( 'Unable to create the context : '.print_r(self::$context, true) ); } // ouvre la connexion $fp = @fopen($url, 'rb', false, $context); if (!$fp) { throw new WikiLoc_Exception_WS( 'Unable to execute the page : '.$url ); } // charge la page $response = @stream_get_contents($fp); fclose($fp); // lit la réponse if ($response === false) { throw new WikiLoc_Exception_WS( 'Problem reading data from : '.$url ) } return $response; } /** public function RunAsXml($uri, $parameters = null) { $return = @simplexml_load_string( $this->Run($uri, $parameters) ); if ($return === false) { throw new WikiLoc_Exception_WS( 'Unable to read response for '.$uri ); } else return $return; } } /**
  • Wrapper du webservice
  • /
class WikiLoc extends WikiLoc_WS { /** private $token = ''; /**
  • L'identifiant de l'api WIKI
  • /
private $wiki_account = ''; /**
  • Chargement du webservice
  • /
public function __construct($token, $wiki_account) { parent::__construct('ws.red.sfr.fr'); if (strlen($token) != 32) { throw new WikiLoc_Exception( 'Le token est un clef MD5 de 32 caracteres !' ); } $this->token = $token; $this->wiki_account = $wiki_account; } /**
  • Lit la file des SMS entrants et retourne le dernier non lu
  • @returns array
  • /
public function getIncommingSMS() { $event = $this->RunAsXml( '/red-ws/red-b2c/resources/event/consume', array( 'responseType' => 'xml', 'token' => $this->token ) ); if ($event->redEvent->eventCode == 11) { return array( 'sender' => $event->redEvent->eventSource, 'message' => $event->redEvent->eventMessage ); } else return null; } /**
  • Géolocalise la ligne émetrice
  • la première fois il faut qu'elle confirme qu'elle accepte d'être géolocalisée par WikiLoc
  • si elle confirme la localization peut être réalisée
  • /
public function Localize($phoneNumber) { $event = $this->RunAsXml( '/red-ws/red-b2c/resources/loc/localize', array( 'responseType' => 'xml', 'token' => $this->token, 'userIdentifier' => $phoneNumber, 'type' => 'PhoneNumber' ) ); if($event->errorCode==0) { return array( 'longitude' => $event->location->longitude, 'latitude' => $event->location->latitude ); } else return null; } /**
  • Envoie un SMS
  • /
public function Send($phoneNumber, $message) { $event = $this->RunAsXml( '/red-ws/red-b2c/resources/sms/send', array( 'responseType' => 'xml', 'token' => $this->token, 'to' => $phoneNumber, 'type' => 'PhoneNumber', 'msg' => $message ) ); return true; } /**
  • Cherche l'url de l'article wiki le plus proche
  • selon la longitude et latitude indiquées
  • /
public function FindNearestWikiUrl($longitude, $latitude) { $ws = new WikiLoc_WS('api.geonames.org'); $event = $ws->RunAsXml( '/findNearbyWikipedia', array( 'lat' => $latitude, 'lng' => $longitude, 'username' => $this->wiki_account, 'style' => 'full' ) ); if (isset($event->entry)) { $max = 0; foreach($event->entry as $id => $entry) { if ($event->entry[$max]->rank < $entry->rank) { $max = $id; } } return $event->entry[$max]->wikipediaUrl; } else return null; } /**
  • affecte un numéro court à l'expéditeur qui
  • pourra être utilisé pour éviter l'usage du 6010
  • avec l'alias #wikiloc#
  • /
public function generateSmsShortCode($phoneNumber) { $event = $this->RunAsXml( '/red-ws/red-b2c/resources/shortcode/generateSmsShortcod', array( 'responseType' => 'xml', 'token' => $this->token, 'msisdn' => $phoneNumber ) ); return ($event->errorCode==0); } } /**
  • TOKEN généré à titre de demonstration par SFR
  • /
$service = new WikiLoc( '81e3d203dd52a852fa986624c718929c', 'sfrapi' ); $sms = $service->getIncommingSMS(); if ($sms) { switch(strtolower($sms['message'])) { case 'wiki': $position = $service->Localize($sms['sender']); if ($position) { $url = $service->FindNearestWikiUrl( $position['longitude'], $position['latitude'] ); if ($url) { $service->Send( $sms['sender'], $url ); } } break; case 'short': if ($service->generateSmsShortCode($sms['sender'])) { $service->Send( $sms['sender'], 'utilisez ce numero pour interroger wikiloc en repondant wiki' ); } break; } }

A voir également

Ajouter un commentaire

Commentaires

cs_hhoareau
Messages postés
15
Date d'inscription
lundi 1 septembre 2003
Statut
Membre
Dernière intervention
11 octobre 2011
-
Merci aKheNathOn pour la réécriture d'une version plus propre de mon exemple d'usage des API SFR. Je rappelle aux personnes intéressées qu'il est souhaitable d'obtenir sur le site SFR API votre propre token.
cs_zave
Messages postés
14
Date d'inscription
mardi 1 mars 2005
Statut
Membre
Dernière intervention
18 décembre 2007
-
Etant chez SFR, je suis concerné, j'ai lu vite fait mais ça me semble intéressant je vais regarder cette source de plus près ainsi que celle à l'origine de cette source.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.