You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.6 KiB
PHP
75 lines
2.6 KiB
PHP
<?php
|
|
/**
|
|
* Ce fichier contient la fonction de requêtage des données du plugin Nomenclatures via son API REST.
|
|
*
|
|
* @package SPIP\TERRITOIRES\API
|
|
*/
|
|
if (!defined('_ECRIRE_INC_VERSION')) {
|
|
return;
|
|
}
|
|
|
|
if (!defined('_TERRITOIRE_COEFF_MAX_DISTANT')) {
|
|
/**
|
|
* Coefficient multiplicateur de la constante SPIP `_INC_DISTANT_MAX_SIZE` permettant de calculer la taille max
|
|
* d'une réponse à `recuperer_url()` si aucune taille n'est précisée dans l'appel.
|
|
*/
|
|
define('_TERRITOIRE_COEFF_MAX_DISTANT', 8);
|
|
}
|
|
|
|
/**
|
|
* Renvoie, à partir de l'url du service, le tableau des données demandées.
|
|
* Le service utilise dans ce cas une chaine JSON qui est décodée pour fournir
|
|
* le tableau de sortie. Le flux retourné par le service est systématiquement
|
|
* transcodé dans le charset du site avant d'être décodé.
|
|
*
|
|
* @api
|
|
*
|
|
* @uses recuperer_url()
|
|
*
|
|
* @param mixed $url_base Endpoint du serveur Nomenclatures
|
|
* @param mixed $collection Nom de la collection
|
|
* @param mixed $filtres Tableau des filtres à appliquer à la collection
|
|
* @param null|int $taille_max Taille maximale du flux récupéré suite à la requête.
|
|
* `null` désigne la taille par défaut.
|
|
*
|
|
* @return array Tableau de la réponse. Si l'index `erreur est présent c'est que la requête s'est mal déroulée`et
|
|
* la valeur retournée est une chaine qui identifie l'erreur.
|
|
* Sinon, l'index `page` du flux reçu est retourné après décodage JSON.
|
|
*/
|
|
function inc_requeter_isocode_dist($url_base, $collection, $filtres, $taille_max = null) {
|
|
|
|
// Calcul de l'url complète
|
|
// -- initialisation
|
|
$url = "${url_base}/${collection}";
|
|
// -- ajout des filtres
|
|
foreach ($filtres as $_critere => $_valeur) {
|
|
$url .= "&${_critere}=${_valeur}";
|
|
}
|
|
|
|
// Options de la fonction de récupération du JSON
|
|
include_spip('inc/distant');
|
|
$options = array(
|
|
'transcoder' => true,
|
|
'taille_max' => $taille_max ? $taille_max : _INC_DISTANT_MAX_SIZE * _TERRITOIRE_COEFF_MAX_DISTANT,
|
|
);
|
|
|
|
// Acquisition du flux de données
|
|
$flux = recuperer_url($url, $options);
|
|
|
|
$reponse = array();
|
|
if (empty($flux['page'])) {
|
|
spip_log("URL indiponible : ${url}", 'territoires' . _LOG_ERREUR);
|
|
$reponse['erreur'] = 'url_indisponible';
|
|
} else {
|
|
try {
|
|
// Transformation de la chaîne json reçue en tableau associatif
|
|
$reponse = json_decode($flux['page'], true);
|
|
} catch (Exception $erreur) {
|
|
$reponse['erreur'] = 'analyse_json';
|
|
spip_log("Erreur d'analyse JSON pour l'URL `${url}` : " . $erreur->getMessage(), 'territoires' . _LOG_ERREUR);
|
|
}
|
|
}
|
|
|
|
return $reponse;
|
|
}
|