avant de commencer
Avant de commencer, merci de lire les informations ci-dessous.
Vous pourrez ensuite continuer avec la section 'pour commencer'.
généralités
prérequis au service
accès au service
rappels sur XML-RPC
généralités
Le Service Localisation d'Orange permet de fournir aux clients de la plate-forme d'accès Orange entreprise la possibilité de localiser les numéros de mobile appartenant à un Groupe Fermé d'Utilisateurs (GFU) entreprise.
Le service de localisation s'appuie sur la technologie du Cell-ID (Identification de cellule) qui donne les coordonnées du barycentre de la cellule à laquelle le mobile est attaché.
La précision de la localisation dépend de la densité du réseau GSM/GPRS d'Orange.
Pour information, le niveau de précision atteint environ 100-500 m en ville et 5-10 km en campagne.
L'information du rayon de la cellule est désormais disponible via le service de localisation depuis début juillet 2005.
A noter :

La forme d'une cellule dépend de la topologie du relief (obstacles, hauteur de l'antenne relais), de la puissance et de l'angle d'émission. Afin de fournir une donnée utilisable simplement, la forme de la cellule a été schématisée par un cercle dont le service de localisation fournit le
rayon (en mètres) et le barycentre.

Dans le cas d'antenne bi-directionnelle (exemple : sur autoroute), les formes des 2 cellules seront très allongées : il est possible que le mobile soit en dehors de la zone prévisionnelle.

Aussi, l'information du
rayon ournie par le service de localisation Orange est donnée à titre indicatif et non contractuel.
prérequis au service
Les conditions ci-dessous sont nécessaires à l'utilisation du service :
le client doit souscrire au service de localisation et remplir une fiche de déclaration qu'il devra soumettre à la CNIL
chaque utilisateur mobile doit signer une attestation de consentement (conserver par le client) et autoriser la localisation de son mobile
chaque utilisateur mobile doit être listé dans un groupe fermé d'utilisateur
le terminal doit contenir une carte SIM Orange, être allumé et sous couverture du réseau Orange France
Des informations complémentaires sont disponibles dans la section « développer » accessible en tant que Membre Premium.
accès au service
Ce service est disponible sous la forme d'un Service Web XML-RPC.
L'authentification au service est basée sur le « Basic HTTP » (cf. RFC 2617) .
La confidentialité et l'intégrité des données sont garanties grâce au protocole HTTPS (secure HTTP) qui permet de sécuriser toutes les informations circulant au travers du réseau pour accéder au service.
rappels sur XML-RPC
Qu'est-ce que XML/RPC
XML-RPC est avant tout une spécification et des implémentations qui permettent à des applications logicielles s'exécutant sur des systèmes hétérogènes, d'effectuer des appels de procédures (RPC) à travers un réseau de type Internet.
Cette spécification d'appel de procédure utilise le protocole HTTP pour le transport et une instance XML pour l'encodage. Le XML-RPC a été conçu pour être aussi simple que possible, permettant aussi que des structures de données complexes puissent être transmises, traitées et retournées.
La communauté XML-RPC
La communauté XML-RPC est extrêmement active et une liste d'implémentations disponibles en témoigne. Diverses implémentations pour systèmes d'exploitation, langages de programmation, Open Source ou commerciaux sont disponibles.
Pré-requis à l'utilisation du Service Localisation
Avant de pouvoir utiliser le service Web de localisation, un certain nombre de pré-requis sont à vérifier.
L'implémentation XML-RPC choisie doit permettre :
L'utilisation de SSL pour les requêtes HTTP
Le passage d'un couple login/password à travers le mécanisme de Basic Authentication.
Implémentations XML-RPC
Les implémentations XML-RPC suivantes satisfont aux critères énoncés ci-dessus :
Cette liste n'est pas exhaustive et n'a pas valeur de référence. Pour plus de détail, consultez le site http://www.xmlrpc.org/.
pour commencer
Maintenant que vous avez lu la section "avant de commencer', nous allons vous apporter quelques exemples de codes.
Java source code
PHP source code
C# source code
Code source JAVA
L'implémentation utilisée est celle développée par Apache (http://xml.apache.org/) A noter que le support SSL nécessite des classes supplémentaires (classes JSSE) dans le cas d'une utilisation avec un JDK1.3. Aucune classe supplémentaire n'est nécessaire avec le JDK1.4 et plus.
Pour plus d'informations, voir le § Ressources du guide 'développement avancé'.
LocationClient.java
|
import java.util.Hashtable;
import java.util.Vector;
import org.apache.xmlrpc.XmlRpcClient;
public class LocationClient
{
/**Constructor for the LocationClient object */
public LocationClient()
{
super();
}
public void sendRequest() throws Exception
{
// Identifier for the positioning service
String username="MyUserName"; // example : LOCxxxxxxxx208-01
// Password for the positioning service
String password = "MyPassword";
String application = "MyApplication"; // informative
// List of mobiles to locate
Vector msisdns = new Vector();
// Attention, the MSISDN format is E164 (international)
// Location of the mobile 336xxxxxxxx corresponds 06xxxxxxxx in France
msisdns.add("336xxxxxxxx");
// XML-RPC positioning server URL
String server_url = "https://api.orangemib.net/location/xmlrpc/service";
// Name of the localisation method
String method_name = "location.locate";
Vector parameters = new Vector();
parameters.add(username);
parameters.add(application);
Hashtable requestInfo = new Hashtable();
requestInfo.put("geodeticDatum","WGS-84");
requestInfo.put("coordinateSystem","LL");
requestInfo.put("positionFormat","DMS0");
//management of the cell shape
//v1.3
requestInfo.put("shape",new Boolean(true));
//v1.3
parameters.add(requestInfo);
parameters.add(msisdns);
// Creation of the server object
XmlRpcClient xmlRpcClient = new XmlRpcClient(server_url);
xmlRpcClient.setBasicAuthentication(username, password);
// Call the method
Object result = xmlRpcClient.execute(method_name, parameters);
Hashtable positions = (Hashtable)result;
System.out.println("Submitted items " + positions.get("submittedCount"));
System.out.println("Accepted items " + positions.get("acceptedCount"));
System.out.println("Operation time " + positions.get("operationTime"));
System.out.println("Items");
Vector items = (Vector)positions.get("items");
for(int i=0;i <items.size();i++){
Hashtable item = (Hashtable) items.get(i);
System.out.println("\tItem " +i);
System.out.println("\tMSISDN " +item.get("msisdn"));
System.out.println("\tPosition Time " +item.get("positionTime"));
System.out.println("\tResult Code " +item.get("resultCode"));
System.out.println("\tResult Description " +item.get("resultDescription"));
System.out.println("\tType " +item.get("type"));
if (item.get("type")!=null){
Hashtable point = (Hashtable) item.get("point");
Hashtable latitude = (Hashtable) point.get("ll_latitude");
Hashtable longitude = (Hashtable) point.get("ll_longitude");
//management of the cell shape
//v1.3
Hashtable shape = (Hashtable) item.get("shape");
//v1.3 : management of the cell shape
System.out.println("\tLatitude " +latitude.get("direction")
+ " "+latitude.get("degrees")+"'"+latitude.get("minutes") + "'"+latitude.get("seconds")+"\"");
System.out.println("\tLongitude " +longitude.get("direction")
+" "+longitude.get("degrees")+"'"+longitude.get("minutes") +"'"+longitude.get("seconds")+"\"");
//management of the cell shape
//v1.3
System.out.println("\tRayon " +shape.get("radius"));
System.out.println("\tStartAngle " +shape.get("start_angle"));
System.out.println("\tEndAngle " +shape.get("end_angle"));
System.out.println("\tName " +shape.get("name"));
//v1.3
}
}
}
/**
* LocationClient main class programme
*
*/
public static void main(String[] args) throws Exception
{
// If you use a proxy, please complete the 2 lines below:
// and replace "nom_proxy" and "port_proxy" with the name of the proxy // and its port
//System.setProperty("https.proxyHost", "nom_proxy");
//System.setProperty("https.proxyPort","port_proxy");
LocationClient client = new LocationClient();
client.sendRequest();
}
}
|
Code source PHP
L'implémentation utilisée est basée sur l'extension phpxmlprc (http://phpxmlrpc.sourceforge.net/). A noter que le support SSL nécessite le module "curl". Sa disponibilité dans la distribution est à vérifier.
LocationClient.php
<?php
include("xmlrpc/xmlrpc.inc");
// Identifier for the positioning service
$username = "MyUserName"; // exemple : LOCxxxxxxxx208-01
// Password for the positioning service
$password = "MyPassword";
$application = "MyApplication";
// List of mobiles to locate
$phones = new xmlrpcval(array(
new xmlrpcval("336xxxxxxxx")
), "array"); // corresponds to the mobile n° 06xxxxxxxx in France
// XML-RPC positioning server URL
$server_hostname = "api.orangemib.net";
$server_path = "/location/xmlrpc/service";
$server_port = 443;
// Name of the localisation method
$method_name = "location.locate";
$client = new xmlrpc_client ($server_path, $server_hostname, $server_port);
$client->setCredentials($username, $password);
$client->setSSLVerifyPeer(false);
$client->setSSLVerifyHost(false);
$req = new xmlrpcmsg($method_name);
$req -> addParam(new xmlrpcval($username));
$req -> addParam(new xmlrpcval($application));
$geodesic = new xmlrpcval(array(
"geodeticDatum" => new xmlrpcval("WGS-84"),
"coordinateSystem" => new xmlrpcval("LL"),
"positionFormat" => new xmlrpcval("DMS0")), "struct");
$req -> addParam($geodesic);
$req -> addParam($phones);
print $req->serialize();
$res = $client->send($req, 30, "https");
$value = $res->value();
print $value;
if (!$res->faultCode()) {
print "Response\n";
print $res->serialize();
} else {
print "Fault\n";
print "Code: " . $res->faultCode() . "\n";
print " Reason '" .$res->faultString()."'\n";
}
?>
|
Code source C#
Ce code utilise la bibliothèque ouverte XML-RPC.NET(http://www.xml-rpc.net/).Il faudra donc ajouter en référence à votre projet la bibliothèque 'CookComputing.XmlRpcV2.dll' dans le cas du C# 2 ou 'CookComputing.XmlRpc.dll' dans le cas du C# 1.
using System;
using System.Collections;
using CookComputing.XmlRpc;
namespace Localisation
{
class Localisation_Sample
{
// Definition of the LocationRequestInfo structure
public struct LocationRequestInfo
{
public string geodeticDatum;
public string coordinateSystem;
public string positionFormat;
public bool shape;
}
// Definition of the XML-RPC 'location.locate' method
[XmlRpcUrl("https://api.orangemib.net/location/xmlrpc/service")]
public interface ILocalisation : IXmlRpcProxy
{
[XmlRpcMethod("location.locate")]
XmlRpcStruct GetLocalisation(
string enterpriseLogin,
string applicationName,
LocationRequestInfo requestInfo,
string[] msisdns);
}
[STAThread]
static void Main(string[] args)
{
// Définition of the login/password, application's name and MSISDNs
string login = "MyLogin";
string motdepasse = "MyPassword";
string applicationName = "LocalisationTest";
string[] msisdns = new string[]{"336XXXXXXXXX"};
// Defintion of the type of query
LocationRequestInfo requestinfo;
requestinfo.geodeticDatum = "WGS-84";
requestinfo.coordinateSystem = "LL";
requestinfo.positionFormat = "DMS0";
//management of the cell shape
//v1.3
requestinfo.shape = true;
//v1.3
// Instantiate a proxy
Localisation proxy =
(ILocalisation)XmlRpcProxyGen.Create(typeof(ILocalisation));
// The timestamp sent by Orange is not standard for the library
// It must be authorised
proxy.NonStandard = XmlRpcNonStandard.AllowNonStandardDateTime;
// The authentication goes into the message header
byte[] credentialBuffer =
new System.Text.UTF8Encoding().GetBytes(login + ":" + password);
proxy.Headers.Add("Authorization", "Basic " +
Convert.ToBase64String(credentialBuffer));
// The XML-RPC method is called
XmlRpcStruct result =
proxy.GetLocalisation(login, applicationName, requestinfo, msisdns);
// Display coordinates
Console.WriteLine("Submitted items " + result["submittedCount"]);
Console.WriteLine("Accepted items " + result["acceptedCount"]);
Console.WriteLine("Operation time " + result["operationTime"]);
Console.WriteLine("Items ");
Array items = (Array)result["items"];
for (int i=0; i<items.Length; i++)
{
XmlRpcStruct item = (XmlRpcStruct)items.GetValue(i);
Console.WriteLine("\tItem " + i);
Console.WriteLine("\tMSISDN " + item["msisdn"]);
Console.WriteLine("\tPosition Time " + item["positionTime"]);
Console.WriteLine("\tResult Code " + item["resultCode"]);
Console.WriteLine("\tResult Description " + item["resultDescription"]);
Console.WriteLine("\tType " + item["type"]);
if ((string)item["type"] == "LL")
{
XmlRpcStruct point = (XmlRpcStruct)item["point"];
XmlRpcStruct latitude = (XmlRpcStruct)point["ll_latitude"];
XmlRpcStruct longitude = (XmlRpcStruct)point["ll_longitude"];
//management of the cell shape
//v1.3
XmlRpcStruct shape = (XmlRpcStruct)item["shape"];
//v1.3
Console.WriteLine("\tLatitude " + latitude["direction"] +" " + latitude["degrees"]+"'"+ latitude["minutes"]+"'"+ latitude["seconds"]+"\"");
Console.WriteLine("\tLongitude " + longitude["direction"]+" " + longitude["degrees"]+"'"+ longitude["minutes"]+"'"+ longitude["seconds"]+"\"");
//management of the cell shape
//v1.3
Console.WriteLine("\tRayon " + shape["radius"]);
Console.WriteLine("\tStartAngle " + shape["start_angle"]);
Console.WriteLine("\tEndAngle " + shape["end_angle"]);
Console.WriteLine("\tName " + shape["name"]);
//v1.3
}
}
}
}
}
|
développement avancé
Si vous êtes assez bon developpeur, ou très expérimenté, et que vous vous en êtes sorti de la partie « pour commencer », alors cette section est là pour vous apporter tout ce dont vous pouvez avoir besoin pour vos développements.
télécharger le manuel de développement avancé de l'API Service Localisation
développement avec les SDKs
Merci de télécharger le SDK ainsi que le manuel de référénce et les sources ci-dessous.