Changeset 92861 in spip-zone


Ignore:
Timestamp:
Nov 12, 2015, 5:42:18 PM (4 years ago)
Author:
eric@…
Message:

L'action get_record d'ITIS passe aussi en JSON.

Location:
_plugins_/taxonomie/trunk
Files:
3 edited

Legend:

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

    r92860 r92861  
    1111<?php
    1212    include_spip('services/itis/itis_api');
     13/*
    1314    $tsn = itis_search_tsn('scientificname', 'Animalia');
    1415    echo "TSN = $tsn</br>";
    1516    $tsn = itis_search_tsn('scientificname', 'panthera leo');
    1617    echo "TSN = $tsn</br>";
     18*/
    1719?>
    1820
     
    2022<?php
    2123    $tsn = 202423;
    22     $taxon = '';
    2324    $taxon = itis_get_record($tsn);
    2425    echo "Informations du taxon $tsn</br>";
     
    3536    <h2>Action : list_vernaculars</h2>
    3637<?php
     38/*
    3739    $tsns = itis_list_vernaculars('english');
    3840    var_dump(json_last_error_msg());
    3941    var_dump(count($tsns), $tsns);
    40 /*    $tsns = itis_list_vernaculars('spanish');
     42    $tsns = itis_list_vernaculars('spanish');
    4143    var_dump(json_last_error_msg());
    4244    var_dump(count($tsns), $tsns);
  • _plugins_/taxonomie/trunk/inc/taxonomer.php

    r92860 r92861  
    180180}
    181181
     182
     183function extraire_element($tableau, $cles) {
     184    $erreur = false;
     185    $element = $tableau;
     186        if ($cles) {
     187                foreach ($cles as $_cle) {
     188                if (isset($element[$_cle])) {
     189          $element = $element[$_cle];
     190                }
     191                else {
     192                        $erreur = true;
     193                        break;
     194                }
     195        }
     196        }
     197    return ($erreur ? '' : $element);
     198}
     199
    182200/**
    183201 * Ecriture d'un contenu issu d'un service web taxonomique dans un fichier texte afin d'optimiser le nombre
  • _plugins_/taxonomie/trunk/services/itis/itis_api.php

    r92860 r92861  
    7373        'getfull' => array(
    7474                'record' => array(
    75                         'function' => 'getFullRecordFromTSN',
    76                         'argument' => 'tsn',
    77                         'list' => 'ns:return',
    78                         'index' => 'scientificName,taxRank,kingdom,commonNameList,taxonAuthor,parentTSN'
     75                        'function'  => 'getFullRecordFromTSN',
     76                        'argument'  => 'tsn',
     77                        'list'      => '',
     78                        'index'     => array(
     79                                                        'nom_scientifique'  => array('scientificName', 'combinedName'),
     80                                                        'rang'              => array('taxRank', 'rankName'),
     81                                                        'regne'             => array('kingdom', 'kingdomName'),
     82                                                        'tsn_parent'        => array('parentTSN', 'parentTsn'),
     83                                                        'auteur'            => array('taxonAuthor', 'authorship'),
     84                                                        'nom_commun'        => array('commonNameList', 'commonNames'),
     85                        )
    7986                )
    8087        ),
     
    221228function itis_get_record($tsn) {
    222229        global $itis_webservice;
    223         $output =array();
     230        $record = array();
    224231
    225232        // Construire l'URL de l'api sollicitée
    226         $url = itis_api2url('xml', 'getfull', 'record', strval($tsn));
     233        $url = itis_api2url('json', 'getfull', 'record', strval($tsn));
    227234
    228235        // Acquisition des données spécifiées par l'url
     236        include_spip('inc/taxonomer');
     237        $data = url2json_data($url);
     238
     239        // Récupération des informations choisies parmi l'enregistrement reçu à partir de la configuration
     240        // de l'action.
    229241        $api = $itis_webservice['getfull']['record'];
    230         include_spip('inc/distant');
    231         $flux = recuperer_page($url);
    232 
    233         if ($flux) {
    234                 // Suppression du préfixe ax21: des balises afin de récupérer des index associatifs non préfixés
    235                 $flux = str_replace('ax21:parentTsn', 'ax21:TsnParent', $flux );
    236                 $flux = str_replace('ax21:', '', $flux);
    237                 // Suppression des suffixes xsi:type="xxx" ou xsi:nil="xxx" pour avoir des index de tableau simples
    238                 $flux = preg_replace(';\sxsi:(type|nil)="\w*";i', '', $flux);
    239 
    240                 // Phrasage de la chaine XML obtenue
    241                 include_spip('inc/xml');
    242                 $arbre = spip_xml_parse($flux);
    243                 if (spip_xml_match_nodes(",^{$api['list']},", $arbre, $matches) > 0) {
    244                         $record = reset($matches);
    245                         // Il est compliqué de créer une configuration du service qui permette un traitement générique de chaque
    246                         // information. Le code est donc spécifique à chaque information.
    247                         // Le résultat est stocké dans un tableau dont chaque index est le nom du champ correspondant de spip_taxon.
    248                         if (isset($record[0])) {
    249                                 $record = $record[0];
    250                                 // Nom scientifique, rang taxonomique, règne et TSN parent
    251                                 $output['nom_scientifique'] = (empty($record['scientificName'][0]['combinedName'][0])
    252                                         ? ''
    253                                         : strtolower($record['scientificName'][0]['combinedName'][0]));
    254                                 $output['rang'] = (empty($record['taxRank'][0]['rankName'][0])
    255                                         ? ''
    256                                         : strtolower($record['taxRank'][0]['rankName'][0]));
    257                                 $output['regne'] = (empty($record['kingdom'][0]['kingdomName'][0])
    258                                         ? ''
    259                                         : strtolower($record['kingdom'][0]['kingdomName'][0]));
    260                                 $output['tsn_parent'] = (empty($record['parentTSN'][0]['TsnParent'][0])
    261                                         ? 0
    262                                         : intval($record['parentTSN'][0]['TsnParent'][0]));
    263                                 // Auteur
    264                                 $output['auteur'] = '';
    265                                 if (!empty($record['taxonAuthor'])) {
    266                                         foreach ($record['taxonAuthor'] as $_author) {
    267                                                 if (isset($_author['authorship'][0])) {
    268                                                         $output['auteur'] = $output['auteur'] ? ', ' . $_author['authorship'][0] : $_author['authorship'][0];
    269                                                 }
    270                                         }
    271                                 }
    272                                 // Noms communs dans différentes langues
    273                                 $output['nom_commun'] = '';
    274                                 if (!empty($record['commonNameList'][0]['commonNames'])) {
    275                                         foreach ($record['commonNameList'][0]['commonNames'] as $_nom) {
    276                                                 if (isset($_nom['commonName'][0]) AND isset($_nom['language'][0])) {
    277                                                         $output['nom_commun'][$_nom['language'][0]] = $_nom['commonName'][0];
    278                                                 }
    279                                         }
    280                                 }
    281                         }
    282                 }
    283         }
    284 
    285         return $output;
    286 }
    287 
    288 
    289 /**
    290  * Renvoie les informations demandées sur un taxon désigné par son identifiant unique tsn.
     242        $data = extraire_element($data, $api['list']);
     243        if (!empty($data)) {
     244                foreach ($api['index'] as $_destination => $_keys) {
     245                        $element = extraire_element($data, $_keys);
     246                        $record[$_destination] = is_string($element) ? trim($element) : $element;
     247                }
     248        }
     249
     250        // On réorganise le sous-tableau des noms communs
     251        $noms = array();
     252        if (is_array($record['nom_commun'])
     253        AND $record['nom_commun']) {
     254                foreach ($record['nom_commun'] as $_nom) {
     255                        $noms[strtolower($_nom['language'])] = trim($_nom['commonName']);
     256                }
     257        }
     258        // Et on modifie l'index des noms communs avec le tableau venant d'être construit.
     259        $record['nom_commun'] = $noms;
     260
     261        return $record;
     262}
     263
     264
     265/**
     266 * Renvoie les informations demandées sur un taxon désigné par son identifiant unique TSN.
    291267 *
    292268 * @api
     
    306282 *              - 'hierarchydown' : la hiérarchie (à vérifier)
    307283 * @param int           $tsn
    308  *              Identifiant unique du taxon dans la base ITIS (tsn)
     284 *              Identifiant unique du taxon dans la base ITIS (TSN)
    309285 *
    310286 * @return array
Note: See TracChangeset for help on using the changeset viewer.