From 7a57bf96afb1a7f62d9b738126c6301c7701d38a Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 11 Apr 2016 17:08:46 +0200 Subject: [PATCH] API Fonctionnelle avec method/url/postdata/header Fonctionnement avec manifest.json --- api/client.php | 121 ++++++++++++++++++++++++++++++++++++-------- api/manifest.json | 26 ++++++---- automate.php | 13 ++--- view/js/settings.js | 1 - 4 files changed, 123 insertions(+), 38 deletions(-) diff --git a/api/client.php b/api/client.php index 143e641..06b5cb0 100644 --- a/api/client.php +++ b/api/client.php @@ -15,6 +15,14 @@ private $config_path = 'f/json/manifest/api'; public $error; + // liste des methodes + public static $METHODS = array( + 'POST' => array( CURLOPT_POST, true ), + 'GET' => array( CURLOPT_HTTPGET, true ), + 'PUT' => array( CURLOPT_CUSTOMREQUEST, 'PUT' ), + 'DELETE' => array( CURLOPT_CUSTOMREQUEST, 'DELETE' ) + ); + /*************/ /* ATTRIBUTS */ /*************/ @@ -61,51 +69,122 @@ + + /* ENVOI ET CONSTRUCTION D'UNE REQUETE + * + * @request_name Nom de la requete en question + * @parameters Liste des parametres de la requete + * + * @return response Reponse HTTP au format norme ou FAUX si une erreur occure + * + */ + public function send($request_name, $parameters=array()){ + /* [1] On construit la requete avec les parametres + =========================================================*/ + $build = $this->build($request_name, $parameters); + + // Si la construction a echoue, on retourne une erreur + if( $build === false ) return false; + + + /* [2] Header et pre-data de la requete + =========================================================*/ + /* (1) On definit l'URL */ + $curl = curl_init($build['url']); + + // permet de recupere le resultat au lieu de l'afficher + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + + + /* (2) On definit la methode */ + $method_arguments = self::$METHODS[ $build['method'] ]; + + curl_setopt($curl, $method_arguments[0], $method_arguments[1]); + + + /* (3) On definit les headers */ + $headers = array(); + + // On construit le header au bon format : 'name: value' + foreach($build['headers'] as $name=>$value) + array_push($headers, $name.': '.$value); + + curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); + + + /* (4) On definit les donnees POST */ + $postdata = ''; + + // On formatte les donnees au format 'key=value&key=value' + foreach($build['postdata'] as $key=>$value) + $postdata .= $key.'='.$value.'&'; + rtrim($postdata); // on supprime le '&' a la fin s'il y a + + // On envoie les donnees + curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata); + + + /* [4] Execution de la requete et recup de la response + =========================================================*/ + $response = curl_exec($curl); + curl_close($curl); + + + /* [5] On retourne la reponse + =========================================================*/ + return $response; + } + + + + + + + + + /* CONSTRUCTION D'UNE REQUETE * * @request_name Nom de la requete * @parameters Liste des parametres de la requete * - * @return response Reponse HTTP au format norme ou FAUX si une erreur occure + * @return filledRequest Renvoie la requete avec les bons parametres * */ - public function send($request_name, $parameters=array()){ + private function build($request_name, $parameters=array()){ /* [0] Gestion des INPUTS =========================================================*/ // On retourne une erreur si la requete n'existe pas if( !isset($this->requests[$request_name]) ) return false; - - /* [1] Remplacement des parametres (valeurs globales) - =========================================================*/ - /* (1) On enregistre une copie de la requete */ + // On enregistre une copie de la requete $request = $this->requests[$request_name]; - /* (2) Remplacement dans l'URL */ + + /* [1] Gestion de la methode + =========================================================*/ + // Si la methode n'est pas prise en compte, on retourne une erreur + if( !isset( self::$METHODS[$request['method']] ) ) return false; + + + + + /* [2] Remplacement des parametres (valeurs globales) + =========================================================*/ + /* (1) Remplacement dans l'URL */ $request['url'] = $this->fillParameters($request['url'], $parameters); - /* (3) Remplacement dans les headers */ + /* (2) Remplacement dans les headers */ foreach($request['headers'] as $name=>$value) $request['headers'][$name] = $this->fillParameters($value, $parameters); - /* (3) Remplacement dans les postdata */ + /* (2) Remplacement dans les postdata */ foreach($request['postdata'] as $name=>$value) $request['postdata'][$name] = $this->fillParameters($value, $parameters); - /* [2] On remplace dans les valeurs d'I/O + /* [3] Retour de la requete construite =========================================================*/ - /* (1) Remplacement dans les INPUT */ - foreach($request['input'] as $i=>$input) - foreach($input as $name=>$value) - $request['input'][$i][$name] = $this->fillParameters($value, $parameters); - - /* (2) Remplacement dans les OUTPUT */ - foreach($request['output'] as $i=>$output) - foreach($output as $name=>$value) - $request['output'][$i][$name] = $this->fillParameters($value, $parameters); - - return $request; } diff --git a/api/manifest.json b/api/manifest.json index 7f7f9f0..edd11c7 100644 --- a/api/manifest.json +++ b/api/manifest.json @@ -2,24 +2,30 @@ "name": "socioview_api", "version": "0.1", "description": "API de la plateforme d'acquisition et de visualisation de donnees dans le cadre d'etudes relationnelles en sociologie", + "requests": { "parse-call-log": { "url": "socioview/api/", "method": "POST", "headers": { "Authorization": "Digest @token" }, - "postdata": { "username": "@username", "password": "@password" }, - "description": "Renvoie a partir du contenu d'un fichier de journal d'appel XML un objet classant les relations SMS/MMS par nombre de messages recus et emis, et de meme pour les appels classes par nombre d'appels.", + "postdata": { + "path": "call_log/unserialize", + "data": "[@xmlstring]" + }, + "description": "Renvoie a partir du contenu d'un fichier de journal d'appel XML un objet classant les relations SMS/MMS par nombre de messages recus et emis, et de meme pour les appels classes par nombre d'appels." + }, - "input": [ - {"path": "callLog/unserialize"}, - {"data": "array"} - ], - "output": [ - {"ModuleError": "int"}, - {"data": "json"} - ] + + "generate-network-chart-data": { + "url": "socioview/api/", + "method": "POST", + "headers": { "Authorization": "Digest @token" }, + "postdata": { + "path": "charts/network_data" + }, + "description": "Renvoie un jeu de donnees pour un graphique de type network" } } diff --git a/automate.php b/automate.php index 8406b43..dcf5072 100755 --- a/automate.php +++ b/automate.php @@ -59,7 +59,7 @@ foreach($sms as $v) var_dump( $v[0] ." (".$contact[$v[0]].") \t\t\t". $v[1] ." appels"); - + var_dump("\n\n\nOBJET COMPLET"); var_dump( $sms ); var_dump( $call ); @@ -73,10 +73,11 @@ $api = new client(); - var_dump( $api->send('parse-call-log', array( - '@token'=> 'bb21158c733229347bd4e681891e213d94c685bf', - '@username' => 'xdrm', - '@password'=> 'mypassword' - ) )); + + $response = $api->send('generate-network-chart-data', array( + '@token'=> '48e701d4e72e4e35bc37c9a800b49d5400734d7b' + )); + + var_dump($response); ?> \ No newline at end of file diff --git a/view/js/settings.js b/view/js/settings.js index f3a5139..e31f884 100644 --- a/view/js/settings.js +++ b/view/js/settings.js @@ -40,7 +40,6 @@ var TOKEN = { // On lance la requete api.send(request, function(answer){ - console.log(answer); // Si la generation effectuee, on recharge la page if( answer.ModuleError == 0 ) reload();