Changeset 92841 in spip-zone


Ignore:
Timestamp:
Nov 11, 2015, 8:08:55 PM (4 years ago)
Author:
eric@…
Message:

Amélioration de l'API Wikipedia.
Mise au point des crédits.

Location:
_plugins_/taxonomie/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/taxonomie/trunk/action/inserer_wikipedia.php

    r92772 r92841  
    3737        if ($arguments) {
    3838                // Détermination des arguments de l'action
    39                 list($id_taxon, $nom_scientifique, $champ, $section) = explode(':', $arguments);
     39                list($id_taxon, $nom_scientifique, $code_langue, $champ, $section) = explode(':', $arguments);
    4040                $section = ($section == '*') ? null : $section;
    4141                if (intval($id_taxon)) {
    42                         include_spip('taxonomie_fonctions');
    43                         $texte = taxonomie_informer($nom_scientifique, $section);
     42                        // Récupération des informations tsn, source et edite du taxon
     43                        $taxon = sql_fetsel('tsn, sources, edite', 'spip_taxons', 'id_taxon='. sql_quote($id_taxon));
     44
     45                        // Appel du service query de Wikipedia
     46                        include_spip('inc/services/wikipedia_api');
     47                        $langue = wikipedia_spipcode2language($code_langue); // TODO : attention à gérer la langue en amont
     48                        $texte = wikipedia_get($taxon['tsn'], $nom_scientifique, $langue, $section);
    4449                        if ($texte) {
    4550                                // Conversion du texte mediawiki vers SPIP
    4651                                include_spip('convertisseur_fonctions');
    4752                                $texte_converti = convertisseur_texte_spip($texte, 'MediaWiki_SPIP');
    48 
    49                                 // Récupération des informations source et edite du taxon
    50                                 $taxon = sql_fetsel('sources, edite', 'spip_taxons', 'id_taxon='. sql_quote($id_taxon));
    5153
    5254                                // Mise à jour pour le taxon du descriptif et des champs connexes en base de données
     
    5961                                }
    6062                                // - la source wikipédia est ajoutée
    61                                 $maj['sources'] = array('wikipedia' => array($champ));
     63                                $maj['sources'] = array('wikipedia' => array('champs' => $champ));
    6264                                if ($sources = unserialize($taxon['sources'])) {
    6365                                        $maj['sources'] = array_merge($maj['sources'], $sources);
  • _plugins_/taxonomie/trunk/demo/taxonomie.html

    r92840 r92841  
    2121    $tsn = 202423;
    2222    $taxon = '';
    23 //    $taxon = itis_get_record($tsn);
     23    $taxon = itis_get_record($tsn);
    2424    echo "Informations du taxon $tsn</br>";
    2525    var_dump($taxon);
    2626
    2727    $tsn = 170945;
    28 //    $taxon = itis_get_record($tsn);
     28    $taxon = itis_get_record($tsn);
    2929    echo "Informations du taxon $tsn</br>";
    3030    var_dump($taxon);
     
    3535    <h2>Action : list_vernaculars</h2>
    3636<?php
    37 //    $tsns = itis_list_vernaculars('fr');
    38 //    var_dump($tsns);
     37    $tsns = itis_list_vernaculars('es');
     38    var_dump($tsns);
    3939?>
    4040
  • _plugins_/taxonomie/trunk/lang/taxonomie_fr.php

    r92833 r92841  
    1313        // C
    1414        'cfg_titre_parametrages' => 'Configuration du plugin Taxonomie',
    15         'credit_itis' => 'Informations taxonomiques fournies par la base de données Integrated Taxonomic Information System, @url_site@. Voir aussi la page ITIS du taxon @url_taxon@.',
     15        'credit_itis' => 'Informations taxonomiques fournies par la base de données Integrated Taxonomic Information System, @url_site@. Voir aussi la page du taxon @url_taxon@.',
    1616        'credit_cinfo' => 'Commission internationale des noms français des oiseaux (CINFO), @url@.',
    17         'credit_wikipedia' => 'Le descriptif est inspiré de Wikipedia, @url@.',
     17        'credit_wikipedia' => 'Le descriptif est inspiré de Wikipedia. Voir aussi la page du taxon @url_taxon@.',
    1818
    1919        // D
  • _plugins_/taxonomie/trunk/prive/squelettes/inclure/inc-taxonomie-services.html

    r92772 r92841  
    22[(#PLUGIN{CONVERTISSEUR}|oui)
    33    [(#GET{open}|unique)]
    4     [(#URL_ACTION_AUTEUR{inserer_wikipedia,#ID_TAXON:#NOM:descriptif,#URL_ECRIRE{taxon_edit, id_taxon=#ID_TAXON}}
     4    [(#URL_ACTION_AUTEUR{inserer_wikipedia,#ID_TAXON:#LANG:#NOM_SCIENTIFIQUE:descriptif,#URL_ECRIRE{taxon_edit, id_taxon=#ID_TAXON}}
    55        |icone_horizontale{<:taxonomie:action_wikipedia_descriptif:>,wikipedia-24})]
    66]
  • _plugins_/taxonomie/trunk/services/itis/itis_api.php

    r92840 r92841  
    559559 *      Id du taxon nécessaire pour construire l'url de la page ITIS fournissant une information complète sur
    560560 *      le taxon.
     561 * @param array $informations
     562 *      Tableau des informations complémentaires sur la source. Pour ITIS ce tableau est vide.
    561563 *
    562564 * @return string
    563565 *      Phrase de crédit.
    564566 */
    565 function itis_credit($id_taxon) {
     567function itis_credit($id_taxon, $informations) {
    566568        // On recherche le tsn du taxon afin de construire l'url vers sa page sur ITIS
    567569        $taxon = sql_fetsel('tsn, nom_scientifique', 'spip_taxons', 'id_taxon='. sql_quote($id_taxon));
  • _plugins_/taxonomie/trunk/services/wikipedia/wikipedia_api.php

    r92837 r92841  
    2121        define('_TAXONOMIE_WIKIPEDIA_PAGE_BASE_URL', 'https://%langue%.wikipedia.org/wiki/');
    2222
     23if (!defined('_TAXONOMIE_WIKIPEDIA_CACHE_TIMEOUT'))
     24        /**
     25         * Période de renouvellement du cache de Wikipedia : 30 jours
     26         */
     27        define('_TAXONOMIE_WIKIPEDIA_CACHE_TIMEOUT', 86400*30);
     28
    2329/**
    2430 * Configuration de la correspondance entre langue Wikipedia et code de langue SPIP.
     
    3844/**
    3945 * Renvoie le texte de la page ou d'une section de la page à partir d'une phrase de recherche.
    40  * Dans le cas du plugin, cette recherche est généralement le nom scientifique du taxon.
     46 * Cette phrase de recherche est toujours le nom scientifique du taxon dans l'utilisation qui en est faite
     47 * par le plugin Taxonomie.
    4148 *
    4249 * @api
     
    5057 *      Langue au sens de Wikipedia qui préfixe l'url du endpoint. Vaut 'fr', 'en', 'es'...
    5158 * @param int|null  $section
    52  *      Section de page dont le texte est à renvoyer. Entier supérieur ou égal à 0.
     59 *      Section de page dont le texte est à renvoyer. Entier supérieur ou égal à 0. Cet argument est
     60 *      optionnel.
    5361 *
    5462 * @return string
     
    6068        $information = array();
    6169
     70        // Si le cache est absent ou invalide on le recrée en utilisant le service web Wikipedia
     71        // sinon on le litet on revoie le tableau du contenu désérialisé.
     72        include_spip('inc/taxonomer');
     73        if (!$file_cache = cache_taxonomie_existe('wikipedia', $tsn, $langue)
     74        OR !filemtime($file_cache)
     75        OR (time()-filemtime($file_cache)>_TAXONOMIE_WIKIPEDIA_CACHE_TIMEOUT)) {
     76                // Normaliser la recherche: trim et mise en lettres minuscules
     77                $recherche = strtolower(trim($recherche));
    6278
    63         // Normaliser la recherche: trim et mise en lettres minuscules
    64         $recherche = strtolower(trim($recherche));
     79                // Construire l'URL de la function de recherche par nom vernaculaire.
     80                // L'encodage de la recherche est effectuée dans la fonction.
     81                $url = wikipedia_api2url('json', 'query', $langue, $recherche, $section);
    6582
    66         // Construire l'URL de la function de recherche par nom vernaculaire.
    67         // L'encodage de la recherche est effectuée dans la fonction.
    68         $url = wikipedia_api2url('json', 'query', $langue, $recherche, $section);
     83                // Acquisition des données spécifiées par l'url
     84                include_spip('inc/taxonomer');
     85                $data = url2json_data($url);
    6986
    70         // Acquisition des données spécifiées par l'url
    71         include_spip('inc/taxonomer');
    72         $data = url2json_data($url);
     87                // Récupération de la section demandée.
     88                if (isset($data['batchcomplete'])
     89                AND isset($data['query']['pages'])) {
     90                        $reponses = $data['query']['pages'];
     91                        $page = reset($reponses);
     92                        $id = key($reponses);
     93                        if (($id > 0)
     94                        AND !isset($page['missing'])
     95                        AND isset($page['revisions'][0]['*'])) {
     96                                $information['texte'] = $page['revisions'][0]['*'];
     97                        }
     98                }
    7399
    74         // Récupération de la section demandée.
    75         if (isset($data['batchcomplete'])
    76         AND isset($data['query']['pages'])) {
    77                 $reponses = $data['query']['pages'];
    78                 $page = reset($reponses);
    79                 $id = key($reponses);
    80                 if (($id > 0)
    81                 AND !isset($page['missing'])
    82                 AND isset($page['revisions'][0]['*'])) {
    83                         $information['texte'] = $page['revisions'][0]['*'];
    84                 }
     100                // Mise en cache
     101                ecrire_fichier($file_cache, serialize($information));
     102        } else {
     103                // Lecture et désérialisation du cache
     104                lire_fichier($file_cache, $information);
     105                $information = unserialize($information);
    85106        }
    86107
     
    94115
    95116/**
    96  * Renvoie la langue telle que le service ITIS la désigne à partir du code de langue
     117 * Renvoie la langue telle que le service Wikipedia la désigne à partir du code de langue
    97118 * de SPIP.
    98119 *
     
    100121 *
    101122 * @param string    $language_code
    102  *      Code de langue de SPIP. La variable globale $itis_language définit le transcodage langue Wikipedia
     123 *      Code de langue de SPIP. La variable globale $wikipedia_language définit le transcodage langue Wikipedia
    103124 *      vers code SPIP.
    104125 *
     
    118139
    119140/**
    120  * @param $id_taxon
     141 * Construit la phrase de crédits précisant que les données fournies proviennent d'une page de Wikipedia.
     142 *
     143 * @api
     144 *
     145 * @param int   $id_taxon
     146 *      Id du taxon nécessaire pour construire l'url de la page Wikipedia concernée.
     147 * @param array $informations
     148 *      Tableau des informations complémentaires sur la source. Pour Wikipedia ce tableau fourni le champ
     149 *      rempli (descriptif).
     150 *
    121151 * @return string
     152 *      Phrase de crédit.
    122153 */
    123 function wikipedia_credit($id_taxon) {
     154function wikipedia_credit($id_taxon, $informations) {
    124155        // On recherche le tsn du taxon afin de construire l'url vers sa page sur ITIS
    125156        $taxon = sql_fetsel('tsn, nom_scientifique', 'spip_taxons', 'id_taxon='. sql_quote($id_taxon));
    126157
    127         // On crée l'url du taxon sur le site ITIS
    128         $url = str_replace('%tsn%', $taxon['tsn'], _TAXONOMIE_ITIS_URL_BASE_CITATION);
     158        // On crée l'url du taxon sur le site de Wikipedia
     159        $url = str_replace('%langue%', 'fr', _TAXONOMIE_WIKIPEDIA_PAGE_BASE_URL)
     160                . rawurlencode($taxon['nom_scientifique']);
    129161        $link = '<a href="' . $url . '"><em>' . ucfirst($taxon['nom_scientifique']) . '</em></a>';
    130162
    131163        // On établit la citation
    132         $citation = _T('taxonomie:citation_itis', array('url' => $link));
     164        $credit = _T('taxonomie:credit_wikipedia', array('url_taxon' => $link));
    133165
    134         return $citation;
     166        return $credit;
    135167}
    136168
  • _plugins_/taxonomie/trunk/taxonomie_fonctions.php

    r92833 r92841  
    273273
    274274        // On merge ITIS et les autres sources
    275         $liste_sources = array('itis' => '');
     275        $liste_sources = array('itis' => array());
    276276        if ($sources_specifiques) {
    277277                $liste_sources = array_merge($liste_sources, unserialize($sources_specifiques));
     
    279279
    280280        // Puis on construit la liste des sources pour l'affichage
    281         foreach ($liste_sources as $_source => $_champs) {
     281        foreach ($liste_sources as $_source => $_infos_source) {
    282282                include_spip("services/${_source}/${_source}_api");
    283283                if (function_exists($citer = "${_source}_credit")) {
    284                         $sources[$_source] = array(
    285                                 'texte' => $citer($id_taxon),
    286                                 'champs' => $_champs
    287                         );
     284                        $sources[$_source] = $citer($id_taxon, $_infos_source);
    288285                }
    289286        }
     
    292289}
    293290
    294 function taxonomie_informer($recherche, $section='') {
    295         include_spip('services/wikipedia/wikipedia_api');
    296         return wikipedia_get($recherche, $section);
    297 }
    298 
    299291?>
Note: See TracChangeset for help on using the changeset viewer.