Changeset 92945 in spip-zone


Ignore:
Timestamp:
Nov 15, 2015, 5:09:43 PM (4 years ago)
Author:
eric@…
Message:

Renommage et phpdoc.
Changement de configuration du service ITIS et suppression de la fonction extraire_element au profit de table_valeur.

Location:
_plugins_/taxonomie/trunk
Files:
4 edited

Legend:

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

    r92924 r92945  
    55<body dir="#LANG_DIR">
    66<div id="container">
     7<?php
     8    include_spip('services/itis/itis_api');
     9?>
    710
    811    <h1>Service ITIS</h1>
     
    1013    <h2>Action : search_tsn</h2>
    1114<?php
    12     include_spip('services/itis/itis_api');
    1315    $nom = 'Animalia';
    1416    $tsn = itis_search_tsn('scientificname', $nom);
    15     echo "TSN $nom = $tsn</br>";
    16     $nom = 'panthera';
    17     $tsn = itis_search_tsn('scientificname', $nom);
    18     echo "TSN $nom = $tsn</br>";
     17    var_dump("TSN $nom (stricte)",$tsn);
     18
     19    $nom = 'panthera leo';
     20    $tsn = itis_search_tsn('scientificname', $nom, false);
     21    var_dump("TSN $nom (non stricte)",$tsn);
     22
    1923    $nom = 'panthera leo';
    2024    $tsn = itis_search_tsn('scientificname', $nom);
    21     echo "TSN $nom = $tsn</br>";
     25    var_dump("TSN $nom (stricte)",$tsn);
    2226?>
    2327
     
    2630    $tsn = 202423;
    2731    $taxon = itis_get_record($tsn);
    28     echo "Informations du taxon $tsn</br>";
    29     var_dump($taxon);
     32    var_dump("Informations du taxon $tsn", $taxon);
    3033
    3134    $tsn = 170945;
    3235    $taxon = itis_get_record($tsn);
    33     echo "Informations du taxon $tsn</br>";
    34     var_dump($taxon);
     36    var_dump("Informations du taxon $tsn", $taxon);
    3537
    3638    $tsn = 117318;
    3739    $taxon = itis_get_record($tsn);
    38     echo "Informations du taxon $tsn</br>";
    39     var_dump($taxon);
     40    var_dump("Informations du taxon $tsn", $taxon);
    4041?>
    4142
     
    4546    echo "Informations du taxon $tsn</br>";
    4647    $info = itis_get_information('scientificname', $tsn);
    47     var_dump($info);
     48    var_dump('scientificname', $info);
    4849
    4950    $info = itis_get_information('kingdomname', $tsn);
    50     var_dump($info);
     51    var_dump('kingdomname', $info);
    5152
    5253    $info = itis_get_information('parent', $tsn);
    53     var_dump($info);
     54    var_dump('parent', $info);
    5455
    5556    $info = itis_get_information('rankname', $tsn);
    56     var_dump($info);
     57    var_dump('rankname', $info);
    5758
    5859    $info = itis_get_information('author', $tsn);
    59     var_dump($info);
     60    var_dump('author', $info);
    6061
    6162    $info = itis_get_information('commonnames', $tsn);
    62     var_dump($info);
     63    var_dump('commonnames', $info);
    6364
    6465    $info = itis_get_information('hierarchydown', $tsn);
    65     var_dump($info);
     66    var_dump('hierarchydown', $info);
    6667
    6768    $info = itis_get_information('hierarchyfull', $tsn);
    68     var_dump($info);
     69    var_dump('hierarchyfull', $info);
    6970
    7071    $info = itis_get_information('coremetadata', $tsn);
    71     var_dump($info);
     72    var_dump('coremetadata', $info);
    7273
    7374    $info = itis_get_information('experts', $tsn);
    74     var_dump($info);
     75    var_dump('experts', $info);
    7576
    7677    $info = itis_get_information('othersources', $tsn);
    77     var_dump($info);
     78    var_dump('othersources', $info);
    7879?>
    7980
    8081    <h2>Action : list_vernaculars</h2>
    8182<?php
    82     $tsns = itis_list_vernaculars('french');
    83     var_dump(json_last_error_msg());
    84     var_dump($tsns);
     83        $langue = 'french';
     84    $tsns = itis_list_vernaculars($langue);
     85    var_dump("Noms communs en $langue", $tsns);
    8586?>
    8687
  • _plugins_/taxonomie/trunk/inc/taxonomer.php

    r92941 r92945  
    206206
    207207/**
    208  * @param $tableau
    209  * @param $cles
    210  *
    211  * @return null
    212  */
    213 function extraire_element($tableau, $cles) {
    214         $erreur = false;
    215         $element = $tableau;
    216         if ($cles) {
    217                 $cles = is_string($cles) ? array($cles) : $cles;
    218                 foreach ($cles as $_cle) {
    219                 if (isset($element[$_cle])) {
    220                   $element = $element[$_cle];
    221                 }
    222                 else {
    223                         $erreur = true;
    224                         break;
    225                 }
    226         }
    227         }
    228         return ($erreur ? null : $element);
    229 }
    230 
    231 /**
    232208 * Ecrit le contenu issu d'un service taxonomique dans un fichier texte afin d'optimiser le nombre
    233209 * de requêtes adressées au service.
     
    246222 *              Toujours à vrai.
    247223 */
    248 function ecrire_cache_taxonomie($cache, $service, $tsn, $spip_langue='', $action='') {
     224function cache_taxonomie_ecrire($cache, $service, $tsn, $spip_langue='', $action='') {
    249225        // Création du dossier cache si besoin
    250226        sous_repertoire(_DIR_VAR, trim(_TAXONOMIE_CACHE_NOMDIR, '/'));
    251227
    252228        // Ecriture du fichier cache
    253         $fichier_cache = nommer_cache_taxonomie($service, $tsn, $spip_langue, $action);
     229        $fichier_cache = cache_taxonomie_nommer($service, $tsn, $spip_langue, $action);
    254230        ecrire_fichier($fichier_cache, $cache);
    255231
     
    271247 * @return string
    272248 */
    273 function nommer_cache_taxonomie($service, $tsn, $spip_langue='', $action='') {
     249function cache_taxonomie_nommer($service, $tsn, $spip_langue='', $action='') {
    274250        // Construction du chemin complet d'un fichier cache
    275251        $fichier_cache = _TAXONOMIE_CACHE_DIR
     
    299275function cache_taxonomie_existe($service, $tsn, $spip_langue='', $action='') {
    300276        // Contruire le nom du fichier cache
    301         $fichier_cache = nommer_cache_taxonomie($service, $tsn, $spip_langue, $action);
     277        $fichier_cache = cache_taxonomie_nommer($service, $tsn, $spip_langue, $action);
    302278
    303279        // Vérification de l'existence du fichier:
  • _plugins_/taxonomie/trunk/services/itis/itis_api.php

    r92935 r92945  
    5454        'search' => array(
    5555                'commonname' => array(
    56                         'function' => 'searchByCommonName',
    57                         'argument' => 'srchKey',
    58                         'list' => array('commonNames', 'commonName'),
    59                         'index' => 'tsn'
     56                        'function'      => 'searchByCommonName',
     57                        'argument'      => 'srchKey',
     58                        'list'          => 'commonNames',
     59                        'index'         => array('tsn' => 'tsn'),
     60                        'find'          => array('nom_commun' => 'commonName')
    6061                ),
    6162                'scientificname'=> array(
    6263                        'function'  => 'searchByScientificName',
    6364                        'argument'  => 'srchKey',
    64                         'list'      => array('scientificNames', 'combinedName'),
    65                         'index'     => 'tsn'
     65                        'list'      => 'scientificNames',
     66                        'index'         => array('tsn' => 'tsn'),
     67                        'find'      => array('nom_scientifique' => 'combinedName')
    6668                )
    6769        ),
     
    8082                        'list'      => '',
    8183                        'index'     => array(
    82                                                         'nom_scientifique'  => array('scientificName', 'combinedName'),
    83                                                         'rang'              => array('taxRank', 'rankName'),
    84                                                         'regne'             => array('kingdom', 'kingdomName'),
    85                                                         'tsn_parent'        => array('parentTSN', 'parentTsn'),
    86                                                         'auteur'            => array('taxonAuthor', 'authorship'),
    87                                                         'nom_commun'        => array('commonNameList', 'commonNames'),
     84                                                        'nom_scientifique'  => 'scientificName/combinedName',
     85                                                        'rang'              => 'taxRank/rankName',
     86                                                        'regne'             => 'kingdom/kingdomName',
     87                                                        'tsn_parent'        => 'parentTSN/parentTsn',
     88                                                        'auteur'            => 'taxonAuthor/authorship',
     89                                                        'nom_commun'        => 'commonNameList/commonNames',
    8890                        )
    8991                )
     
    167169 * Recherche un taxon dans la base ITIS par son nom commun ou scientifique
    168170 * et retourne son identifiant unique nommé TSN ou 0 si le taxon n'existe pas.
     171 * Selon le critère de correspondance de la recherche (stricte ou pas) la fonction
     172 * retourne un ou plusieurs taxons.
    169173 *
    170174 * @api
     
    176180 * @param string        $search
    177181 *              Nom à rechercher précisément. Seul le taxon dont le nom coincidera exactement sera retourné.
    178  *
    179  * @return int
    180  *              Identifiant unique TSN dans la base ITIS ou 0 si la recherche échoue
    181  */
    182 function itis_search_tsn($action, $search) {
     182 * @param bool          $strict
     183 *              `true` indique une correspondance stricte de la chaine recherchée ce qui a pour conséquence de renvoyer
     184 *              une seule valeur de TSN. `false` indique une correspondance partielle et peut donc renvoyer plusieurs TSN.
     185 *
     186 * @return array
     187 *              Si la recherche est stricte, la fonction retourne l'identifiant unique TSN dans la base ITIS
     188 *              ou 0 si la recherche échoue.
     189 *              Sinon, la fonction retourne une liste de couples de valeurs (TNS, valeur trouvée).
     190 */
     191function itis_search_tsn($action, $search, $strict=true) {
    183192        global $itis_webservice;
    184         $tsn = 0;
     193        $tsn = array();
    185194
    186195        // Normaliser la recherche: trim et mise en lettres minuscules
     
    196205        // Récupération du TSN du taxon recherché
    197206        $api = $itis_webservice['search'][$action];
    198         list($index_list, $index_name) = $api['list'];
    199         if (!empty($data[$index_list])) {
    200                 // La recherche peut renvoyer plusieurs taxons. On considère que le "bon" taxon
    201                 // correspond à celui dont le nom est exactement celui recherché.
    202                 foreach ($data[$index_list] as $_data) {
    203                         if ($_data
    204                         AND (strcasecmp($_data[$index_name], $search) == 0)) {
    205                                 // On est sur le bon taxon, on renvoie le TSN
    206                                 $tsn = intval($_data[$api['index']]);
    207                                 break;
     207        if (!empty($data[$api['list']])) {
     208                // La recherche peut renvoyer plusieurs taxons. Suivant le critère de correspondance de la recherche
     209                // on renvoie le "bon" taxon ou tous les taxons trouvés.
     210                list($tsn_destination, $tsn_key) = each($api['index']);
     211                list($search_destination, $search_key) = each($api['find']);
     212                foreach ($data[$api['list']] as $_data) {
     213                        if ($_data) {
     214                                if (!$strict
     215                                OR ($strict AND (strcasecmp($_data[$search_key], $search) == 0))) {
     216                                        $tsn[] = array(
     217                                                $tsn_destination => intval($_data[$tsn_key]),
     218                                                $search_destination => $_data[$search_key]);
     219                                        if ($strict) {break;}
     220                                }
    208221                        }
    209222                }
     
    249262        // de l'action.
    250263        $api = $itis_webservice['getfull']['record'];
    251         $data = extraire_element($data, $api['list']);
     264        include_spip('inc/filtres');
     265        $data = $api['list'] ? table_valeur($data, $api['list'], null) : $data;
    252266        if (!empty($data)) {
    253267                foreach ($api['index'] as $_destination => $_keys) {
    254                         $element = extraire_element($data, $_keys);
     268                        $element = $_keys ? table_valeur($data, $_keys, null) : $data;
    255269                        $record[$_destination] = is_string($element) ? trim($element) : $element;
    256270                }
     
    311325        // On vérifie que le tableau est complet sinon on retourne un tableau vide
    312326        $api = $itis_webservice['get'][$action];
    313         $data = extraire_element($data, $api['list']);
     327        include_spip('inc/filtres');
     328        $data = $api['list'] ? table_valeur($data, $api['list'], null) : $data;
    314329        list($type, $index) = $api['index'];
    315330
     
    331346                                        }
    332347                                } else {
    333                                         list($kkey, $kvalue) = each($index);
     348                                        list($destination, $key) = each($index);
    334349                                        foreach ($data as $_data) {
    335                                                 $information[strtolower($_data[$kkey])][] = $_data[$kvalue];
     350                                                $information[strtolower($_data[$destination])][] = $_data[$key];
    336351                                        }
    337352                                }
     
    361376 * @return array
    362377 *              Tableau des noms communs associés à leur TSN. Le format du tableau est le suivant:
    363  *              - `index`       : le TSN du taxon
    364  *              - `valeur`      : le tableau des noms communs, chaque nom étant préfixé du code de langue
    365  *                                        de SPIP (ex: `[fr]bactéries`)
     378 *              - l'index représente le TSN du taxon,
     379 *              - la valeur fournit le tableau des noms communs, chaque nom étant préfixé du code de langue
     380 *              de SPIP (ex: `[fr]bactéries`)
    366381 */
    367382function itis_list_vernaculars($language) {
     
    380395        if (!empty($data[$api['list']])) {
    381396                $tag_language = '[' . $itis_language[$language] . ']';
    382                 list($index, $index_name) = each($api['index']);
     397                list($destination, $name_key) = each($api['index']);
    383398                foreach ($data[$api['list']] as $_data) {
    384                         if (!empty($_data[$index])
    385                         AND !empty($_data[$index_name])) {
    386                                 $vernaculars[$_data[$index]][] = $tag_language . $_data[$index_name];
     399                        if (!empty($_data[$destination])
     400                        AND !empty($_data[$name_key])) {
     401                                $vernaculars[$_data[$destination]][] = $tag_language . $_data[$name_key];
    387402                        }
    388403                }
  • _plugins_/taxonomie/trunk/services/wikipedia/wikipedia_api.php

    r92935 r92945  
    5252 * @api
    5353 * @uses cache_taxonomie_existe()
    54  * @uses ecrire_cache_taxonomie()
     54 * @uses cache_taxonomie_ecrire()
    5555 * @uses api2url_wikipedia()
    5656 * @uses url2json_data()
     
    106106
    107107                // Mise en cache
    108                 ecrire_cache_taxonomie(serialize($information), 'wikipedia', $tsn, $language);
     108                cache_taxonomie_ecrire(serialize($information), 'wikipedia', $tsn, $language);
    109109        } else {
    110110                // Lecture et désérialisation du cache
Note: See TracChangeset for help on using the changeset viewer.