Changeset 113783 in spip-zone


Ignore:
Timestamp:
Feb 6, 2019, 8:01:03 PM (2 months ago)
Author:
root
Message:

Mise au point des services de Taxonomie avec l'API des caches de Cache Factory.
A voir aussi comment gérer les get unitaires avec la sérialisation.
On change l'ordre des composants en mettant le tsn est premier pour un meilleur classement.

Location:
_plugins_/taxonomie/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/taxonomie/trunk/cache/taxonomie.php

    r113758 r113783  
    2424        $configuration = array(
    2525                'racine'        => _DIR_VAR,
    26                 'nom'           => array('service', 'action', 'tsn', 'langue', 'section'),
     26                'nom'           => array('tsn', 'service', 'action', 'language', 'section'),
    2727                'extension'     => '.txt',
    2828                'securisation'  => false,
  • _plugins_/taxonomie/trunk/services/itis/itis_api.php

    r113715 r113783  
    355355        if (intval($tsn)) {
    356356                // Construction des options permettant de nommer le fichier cache.
    357                 include_spip('inc/taxonomie_cacher');
    358                 $options_cache = array();
    359 
    360                 if (!$file_cache = cache_taxonomie_existe('itis', 'record', $tsn, $options_cache)
     357                include_spip('inc/cache');
     358                $cache = array(
     359                        'service'  => 'itis',
     360                        'action'   => 'record',
     361                        'tsn'      => $tsn
     362                );
     363
     364                if ((!$file_cache = cache_existe('taxonomie', $cache))
    361365                or !filemtime($file_cache)
    362366                or (time() - filemtime($file_cache) > _TAXONOMIE_ITIS_CACHE_TIMEOUT)
    363                 or (_TAXONOMIE_CACHE_FORCER)) {
     367                or (defined('_TAXONOMIE_CACHE_FORCER') ? _TAXONOMIE_CACHE_FORCER : false)) {
    364368                        // Construire l'URL de l'api sollicitée
    365369                        $url = itis_build_url('json', 'getfull', 'record', strval($tsn));
     
    417421
    418422                        // Mise en cache systématique pour gérer le cas où la page cherchée n'existe pas.
    419                         cache_taxonomie_ecrire(serialize($record), 'itis', 'record', $tsn, $options_cache);
     423                        cache_ecrire('taxonomie', $cache, $record);
    420424                } else {
    421425                        // Lecture et désérialisation du cache
    422                         lire_fichier($file_cache, $contenu);
    423                         $record = unserialize($contenu);
     426                        $record = cache_lire('taxonomie', $file_cache);
    424427                }
    425428        }
     
    457460function itis_get_information($action, $tsn) {
    458461
    459         include_spip('inc/taxonomie_cacher');
    460         $options_cache = array();
    461 
    462         if (!$file_cache = cache_taxonomie_existe('itis', $action, $tsn, $options_cache)
    463         or !filemtime($file_cache)
    464         or (time() - filemtime($file_cache) > _TAXONOMIE_ITIS_CACHE_TIMEOUT)
    465         or (_TAXONOMIE_CACHE_FORCER)) {
    466                 // Construire l'URL de l'api sollicitée
    467                 $url = itis_build_url('json', 'get', $action, strval($tsn));
    468 
    469                 // Acquisition des données spécifiées par l'url
    470                 $requeter = charger_fonction('taxonomie_requeter', 'inc');
    471                 $data = $requeter($url);
    472 
    473                 // On vérifie que le tableau est complet sinon on retourne un tableau vide
    474                 $api = $GLOBALS['itis_webservice']['get'][$action];
    475                 include_spip('inc/filtres');
    476                 $data = $api['list'] ? table_valeur($data, $api['list'], null) : $data;
    477                 $type = $api['type'];
    478                 $index = $api['index'];
    479 
    480                 if ($type == 'string') {
    481                         // L'information est limitée à une chaine ou un entier unique.
    482                         // On renvoie la valeur seule.
    483                         $information = '';
    484                         if (!empty($data[$index])) {
    485                                 $information = $data[$index];
    486                                 if (in_array($action, array('rankname', 'kingdomname'))) {
    487                                         $information = strtolower($information);
    488                                 } elseif ($action == 'parent') {
    489                                         $information = intval($information);
     462        $information = array();
     463
     464        if (intval($tsn)) {
     465                // Construction des options permettant de nommer le fichier cache.
     466                include_spip('inc/cache');
     467                $cache = array(
     468                        'service'  => 'itis',
     469                        'action'   => $action,
     470                        'tsn'      => $tsn
     471                );
     472
     473                if ((!$file_cache = cache_existe('taxonomie', $cache))
     474                or !filemtime($file_cache)
     475                or (time() - filemtime($file_cache) > _TAXONOMIE_ITIS_CACHE_TIMEOUT)
     476                or (defined('_TAXONOMIE_CACHE_FORCER') ? _TAXONOMIE_CACHE_FORCER : false)) {
     477                        // Construire l'URL de l'api sollicitée
     478                        $url = itis_build_url('json', 'get', $action, strval($tsn));
     479
     480                        // Acquisition des données spécifiées par l'url
     481                        $requeter = charger_fonction('taxonomie_requeter', 'inc');
     482                        $data = $requeter($url);
     483
     484                        // On vérifie que le tableau est complet sinon on retourne un tableau vide
     485                        $api = $GLOBALS['itis_webservice']['get'][$action];
     486                        include_spip('inc/filtres');
     487                        $data = $api['list'] ? table_valeur($data, $api['list'], null) : $data;
     488                        $type = $api['type'];
     489                        $index = $api['index'];
     490
     491                        // TODO : problème si l'information est une chaine
     492                        if ($type == 'string') {
     493                                // L'information est limitée à une chaine ou un entier unique.
     494                                // On renvoie la valeur seule.
     495                                $information = '';
     496                                if (!empty($data[$index])) {
     497                                        $information = $data[$index];
     498                                        if (in_array($action, array('rankname', 'kingdomname'))) {
     499                                                $information = strtolower($information);
     500                                        } elseif ($action == 'parent') {
     501                                                $information = intval($information);
     502                                        }
    490503                                }
    491                         }
    492                 } else {
    493                         // L'information demandée est un tableau.
    494                         $information = array();
    495                         if (!empty($data)) {
    496                                 $format = "itis_format_$action";
    497                                 if (function_exists($format)) {
    498                                         $information = $format($tsn, $data, $index);
    499                                 } else {
    500                                         foreach ($data as $_data) {
    501                                                 $item = array();
    502                                                 foreach ($index as $_key_information => $_key_data) {
    503                                                         $item[$_key_information] = $_data[$_key_data];
     504                        } else {
     505                                // L'information demandée est un tableau.
     506                                $information = array();
     507                                if (!empty($data)) {
     508                                        $format = "itis_format_$action";
     509                                        if (function_exists($format)) {
     510                                                $information = $format($tsn, $data, $index);
     511                                        } else {
     512                                                foreach ($data as $_data) {
     513                                                        $item = array();
     514                                                        foreach ($index as $_key_information => $_key_data) {
     515                                                                $item[$_key_information] = $_data[$_key_data];
     516                                                        }
     517                                                        $information[] = $item;
    504518                                                }
    505                                                 $information[] = $item;
    506519                                        }
    507520                                }
    508521                        }
     522
     523                        // Mise en cache systématique pour gérer le cas où la page cherchée n'existe pas.
     524                        cache_ecrire('taxonomie', $cache, $information);
     525                } else {
     526                        // Lecture et désérialisation du cache
     527                        $information = cache_lire('taxonomie', $file_cache);
    509528                }
    510 
    511                 // Mise en cache systématique pour gérer le cas où la page cherchée n'existe pas.
    512                 cache_taxonomie_ecrire(serialize($information), 'itis', $action, $tsn, $options_cache);
    513         } else {
    514                 // Lecture et désérialisation du cache
    515                 lire_fichier($file_cache, $contenu);
    516                 $information = unserialize($contenu);
    517529        }
    518530
  • _plugins_/taxonomie/trunk/services/iucn/iucn_api.php

    r113279 r113783  
    153153        if (!empty($search['scientific_name'] and !empty($search['tsn']))) {
    154154                // Construction des options permettant de nommer le fichier cache.
    155                 include_spip('inc/taxonomie_cacher');
    156                 $options_cache = array();
    157 
    158                 if (!$file_cache = cache_taxonomie_existe('iucn', 'assessment', $search['tsn'], $options_cache)
     155                include_spip('inc/cache');
     156                $cache = array(
     157                        'service'  => 'iucn',
     158                        'action'   => 'assessment',
     159                        'tsn'      => $search['tsn']
     160                );
     161
     162                if ((!$file_cache = cache_existe('taxonomie', $cache))
    159163                or !filemtime($file_cache)
    160164                or (time() - filemtime($file_cache) > _TAXONOMIE_IUCN_CACHE_TIMEOUT)
    161                 or (_TAXONOMIE_CACHE_FORCER)) {
     165                        or (defined('_TAXONOMIE_CACHE_FORCER') ? _TAXONOMIE_CACHE_FORCER : false)) {
    162166                        // Construire l'URL de l'api sollicitée
    163                         $url = iucn_build_url('species', $search['scientific_name']);
     167                        $url = iucn_build_url('species', 'assessment', $search['scientific_name']);
    164168
    165169                        // Acquisition des données spécifiées par l'url
     
    185189
    186190                        // Mise en cache systématique pour gérer le cas où la page cherchée n'existe pas.
    187                         cache_taxonomie_ecrire(serialize($assessment), 'iucn', 'assessment', $search['tsn'], $options_cache);
     191                        cache_ecrire('taxonomie', $cache, $assessment);
    188192                } else {
    189193                        // Lecture et désérialisation du cache
    190                         lire_fichier($file_cache, $contenu);
    191                         $assessment = unserialize($contenu);
     194                        $assessment = cache_lire('taxonomie', $file_cache);
    192195                }
    193196        }
     
    288291        // Construire la partie standard de l'URL de l'api sollicitée
    289292        $url = _TAXONOMIE_IUCN_ENDPOINT_BASE_URL
    290                 . $action
     293                . $group
    291294                . '/' . rawurlencode($action)
    292295                . '?token=' . $key;
  • _plugins_/taxonomie/trunk/services/wikipedia/wikipedia_api.php

    r113760 r113783  
    102102                }
    103103
    104                 include_spip('inc/taxonomie_cacher');
    105                 $options_cache = array('language' => $spip_language);
    106                 if ($section !== null) {
    107                         $options_cache['section'] = $section;
    108                 }
    109 
    110104                if (!empty($options['reload'])
    111                 or !$file_cache = cache_taxonomie_existe('wikipedia', 'get', $search['tsn'], $options_cache)
    112 //              or !$file_cache = cache_existe('taxonomie', $cache)
     105                or (!$file_cache = cache_existe('taxonomie', $cache))
    113106                or !filemtime($file_cache)
    114107                or (time() - filemtime($file_cache) > _TAXONOMIE_WIKIPEDIA_CACHE_TIMEOUT)
    115                 or (_TAXONOMIE_CACHE_FORCER)) {
     108                or (defined('_TAXONOMIE_CACHE_FORCER') ? _TAXONOMIE_CACHE_FORCER : false)) {
    116109                        // Normaliser la recherche: trim et mise en lettres minuscules
    117110                        $title = strtolower(trim($search['name']));
     
    136129
    137130                                // Mise en cache systématique pour gérer le cas où la page cherchée n'existe pas.
    138                                 cache_taxonomie_ecrire(
    139                                         serialize($information),
    140                                         'wikipedia',
    141                                         'get',
    142                                         $search['tsn'],
    143                                         $options_cache);
    144 //                              cache_ecrire('taxonomie', $cache, $information);
     131                                cache_ecrire('taxonomie', $cache, $information);
    145132                        }
    146133                } else {
Note: See TracChangeset for help on using the changeset viewer.