Changeset 109127 in spip-zone


Ignore:
Timestamp:
Feb 25, 2018, 12:27:50 PM (15 months ago)
Author:
eric@…
Message:

Mise au point du get_record de l'API ITIS avec des données supplémentaires et une gestion de cache.

Location:
_plugins_/taxonomie/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/taxonomie/trunk/demo/taxonomie.html

    r108576 r109127  
    99    include_spip('inc/filtres');
    1010    include_spip('inc/taxonomer');
     11
     12    var_dump(itis_get_record(183803));
    1113?>
    1214
  • _plugins_/taxonomie/trunk/services/itis/itis_api.php

    r109065 r109127  
    4242}
    4343
     44if (!defined('_TAXONOMIE_ITIS_CACHE_TIMEOUT')) {
     45        /**
     46         * Période de renouvellement du cache de Wikipedia (365 jours)
     47         */
     48        define('_TAXONOMIE_ITIS_CACHE_TIMEOUT', 86400 * 365);
     49}
     50
    4451
    4552$GLOBALS['itis_language'] = array(
    4653        /**
    47          * Variable globale de configuration de la correspondance entre langue Wikipedia
     54         * Variable globale de configuration de la correspondance entre langue ITIS
    4855         * et code de langue SPIP. La langue du service est l'index, le code SPIP est la valeur.
    4956         */
     
    8693                        'list'     => '',
    8794                        'index'    => array(
    88                                 'nom_scientifique' => 'scientificName/combinedName',
    89                                 'rang'             => 'taxRank/rankName',
    90                                 'regne'            => 'kingdom/kingdomName',
    91                                 'tsn_parent'       => 'parentTSN/parentTsn',
    92                                 'auteur'           => 'taxonAuthor/authorship',
    93                                 'nom_commun'       => 'commonNameList/commonNames',
     95                                'nom_scientifique'  => 'scientificName/combinedName',
     96                                'rang'              => 'taxRank/rankName',
     97                                'regne'             => 'kingdom/kingdomName',
     98                                'tsn_parent'        => 'parentTSN/parentTsn',
     99                                'auteur'            => 'taxonAuthor/authorship',
     100                                'nom_commun'        => 'commonNameList/commonNames',
     101                                'credibilite'       => 'credibilityRating/credRating',
     102                                'usage'             => 'usage/taxonUsageRating',
     103                                'zone_geographique' => 'geographicDivisionList/geoDivisions'
    94104                        )
    95105                )
     
    249259 *        - `nom_scientique` : le nom scientifique du taxon en minuscules
    250260 *        - `rang`           : le nom anglais du rang taxonomique du taxon
    251  *        - `regne`          : le nom scientifque du règne du taxon en minuscules
     261 *        - `regne`          : le nom scientifique du règne du taxon en minuscules
    252262 *        - `tsn_parent`     : le TSN du parent du taxon ou 0 si le taxon est un règne
    253263 *        - `auteur`         : la citation d’auteurs et la date de publication
     
    259269        $record = array();
    260270
    261         // Construire l'URL de l'api sollicitée
    262         $url = itis_build_url('json', 'getfull', 'record', strval($tsn));
    263 
    264         // Acquisition des données spécifiées par l'url
    265         $requeter = charger_fonction('taxonomie_requeter', 'inc');
    266         $data = $requeter($url);
    267 
    268         // Récupération des informations choisies parmi l'enregistrement reçu à partir de la configuration
    269         // de l'action.
    270         $api = $GLOBALS['itis_webservice']['getfull']['record'];
    271         include_spip('inc/filtres');
    272         $data = $api['list'] ? table_valeur($data, $api['list'], null) : $data;
    273         if (!empty($data)) {
    274                 foreach ($api['index'] as $_destination => $_keys) {
    275                         $element = $_keys ? table_valeur($data, $_keys, null) : $data;
    276                         $record[$_destination] = is_string($element) ? trim($element) : $element;
    277                 }
    278         }
    279 
    280         // On réorganise le sous-tableau des noms communs
    281         $noms = array();
    282         if (is_array($record['nom_commun'])     and $record['nom_commun']) {
    283                 foreach ($record['nom_commun'] as $_nom) {
    284                         $noms[strtolower($_nom['language'])] = trim($_nom['commonName']);
    285                 }
    286         }
    287         // Et on modifie l'index des noms communs avec le tableau venant d'être construit.
    288         $record['nom_commun'] = $noms;
     271        if (intval($tsn)) {
     272                // Construction des options permettant de nommer le fichier cache.
     273                include_spip('inc/taxonomie_cacher');
     274                $options_cache = array();
     275
     276                if (!$file_cache = cache_taxonomie_existe('itis', 'record', $tsn, $options_cache)
     277                or !filemtime($file_cache)
     278                or (time() - filemtime($file_cache) > _TAXONOMIE_ITIS_CACHE_TIMEOUT)
     279                or (_TAXONOMIE_CACHE_FORCER)) {
     280                        // Construire l'URL de l'api sollicitée
     281                        $url = itis_build_url('json', 'getfull', 'record', strval($tsn));
     282
     283                        // Acquisition des données spécifiées par l'url
     284                        $requeter = charger_fonction('taxonomie_requeter', 'inc');
     285                        $data = $requeter($url);
     286
     287                        // Récupération des informations choisies parmi l'enregistrement reçu à partir de la configuration
     288                        // de l'action.
     289                        $api = $GLOBALS['itis_webservice']['getfull']['record'];
     290                        include_spip('inc/filtres');
     291                        $data = $api['list'] ? table_valeur($data, $api['list'], null) : $data;
     292                        if (!empty($data)) {
     293                                foreach ($api['index'] as $_destination => $_keys) {
     294                                        $element = $_keys ? table_valeur($data, $_keys, null) : $data;
     295                                        $record[$_destination] = is_string($element) ? trim($element) : $element;
     296                                }
     297                        }
     298
     299                        // On réorganise le sous-tableau des noms communs
     300                        $noms = array();
     301                        if (!empty($record['nom_commun']) and is_array($record['nom_commun'])) {
     302                                foreach ($record['nom_commun'] as $_nom) {
     303                                        $noms[strtolower($_nom['language'])] = trim($_nom['commonName']);
     304                                }
     305                        }
     306                        // Et on modifie l'index des noms communs avec le tableau venant d'être construit.
     307                        $record['nom_commun'] = $noms;
     308
     309                        // On réorganise le sous-tableau des zones géographiques.
     310                        $zones = array();
     311                        if (!empty($record['zone_geographique']) and is_array($record['zone_geographique'])) {
     312                                foreach ($record['zone_geographique'] as $_zone) {
     313                                        $zones[] = trim($_zone['geographicValue']);
     314                                }
     315                        }
     316                        // Et on modifie l'index des zones géographiques avec le tableau venant d'être construit
     317                        // en positionnant celles-ci sous un idne 'english' car les zones sont libellées en anglais.
     318                        $record['zone_geographique']['english'] = $zones;
     319
     320                        // Mise en cache systématique pour gérer le cas où la page cherchée n'existe pas.
     321                        cache_taxonomie_ecrire(serialize($record), 'itis', 'record', $tsn, $options_cache);
     322                } else {
     323                        // Lecture et désérialisation du cache
     324                        lire_fichier($file_cache, $contenu);
     325                        $record = unserialize($contenu);
     326                }
     327        }
    289328
    290329        return $record;
Note: See TracChangeset for help on using the changeset viewer.