Changeset 97265 in spip-zone
- Timestamp:
- May 6, 2016, 8:06:22 PM (5 years ago)
- Location:
- _plugins_/taxonomie/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/taxonomie/trunk/action/taxonomie_get_wikipedia.php
r96993 r97265 54 54 include_spip('services/wikipedia/wikipedia_api'); 55 55 $langue = wikipedia_spipcode2language($spip_langue); // TODO : attention à gérer la langue en amont 56 $information = wikipedia_get($taxon['tsn'], $nom_scientifique, $langue, $section); 57 if ($information['texte']) { 56 $options = array('language' => $langue, 'section' => $section); 57 $information = wikipedia_get('text', $taxon['tsn'], $nom_scientifique, $options); 58 if ($information['text']) { 58 59 // Si le plugin Convertisseur est actif, conversion du texte mediawiki vers SPIP. 59 60 // Mise en format multi systématique. … … 62 63 $texte_converti = '<multi>' 63 64 . '[' . $spip_langue . ']' 64 . ($convertir ? $convertir($information['text e'], 'MediaWiki_SPIP') : $information['texte'])65 . ($convertir ? $convertir($information['text'], 'MediaWiki_SPIP') : $information['texte']) 65 66 . '</multi>'; 66 67 -
_plugins_/taxonomie/trunk/inc/taxonomer.php
r96992 r97265 186 186 */ 187 187 define('_TAXONOMIE_CACHE_DIR', _DIR_VAR . _TAXONOMIE_CACHE_NOMDIR); 188 } 189 if (!defined('_TAXONOMIE_CACHE_FORCER')) { 190 /** 191 * Indicateur permettant de focer le recalcul du cache systématiquement. 192 * A n'utiliser que temporairement en mode debug par exemple. 193 * 194 * @package SPIP\TAXONOMIE\CACHE 195 */ 196 define('_TAXONOMIE_CACHE_FORCER', false); 188 197 } 189 198 … … 343 352 * d'appeler cette fonction. 344 353 * @param string $service 354 * @param string $action 345 355 * @param int $tsn 346 * @param string $spip_langue 347 * @param string $action 356 * @param array $options 348 357 * 349 358 * @return boolean 350 359 * Toujours à vrai. 351 360 */ 352 function cache_taxonomie_ecrire($cache, $service, $ tsn, $spip_langue = '', $action = '') {361 function cache_taxonomie_ecrire($cache, $service, $action, $tsn, $options) { 353 362 // Création du dossier cache si besoin 354 363 sous_repertoire(_DIR_VAR, trim(_TAXONOMIE_CACHE_NOMDIR, '/')); 355 364 356 365 // Ecriture du fichier cache 357 $fichier_cache = cache_taxonomie_nommer($service, $tsn, $ spip_langue, $action);366 $fichier_cache = cache_taxonomie_nommer($service, $tsn, $action, $options); 358 367 ecrire_fichier($fichier_cache, $cache); 359 368 … … 363 372 364 373 /** 365 * Construit le nom du fichier cache en fonction du service, d u taxon concernés et374 * Construit le nom du fichier cache en fonction du service, de l'action, du taxon concernés et 366 375 * d'autres critères optionnels. 367 376 * … … 369 378 * 370 379 * @param string $service 380 * @param string $action 371 381 * @param int $tsn 372 * @param string $spip_langue 373 * @param string $action 382 * @param array $options 374 383 * 375 384 * @return string 376 385 */ 377 function cache_taxonomie_nommer($service, $ tsn, $spip_langue = '', $action = '') {386 function cache_taxonomie_nommer($service, $action, $tsn, $options) { 378 387 // Construction du chemin complet d'un fichier cache 379 388 $fichier_cache = _TAXONOMIE_CACHE_DIR 380 389 . $service 381 390 . ($action ? '_' . $action : '') 382 . '_' . $tsn 383 . ($spip_langue ? '_' . $spip_langue : '') 384 . '.txt'; 391 . '_' . $tsn; 392 393 // On complète le nom avec les options éventuelles 394 if ($options) { 395 foreach ($options as $_option => $_valeur) { 396 if ($_valeur) { 397 $fichier_cache .= '_' . $_valeur; 398 } 399 } 400 } 401 402 // On rajoute l'extension texte 403 $fichier_cache .= '.txt'; 385 404 386 405 return $fichier_cache; … … 388 407 389 408 /** 390 * Vérifie l'existence du fichier cache pour un taxon et un servicedonnés.409 * Vérifie l'existence du fichier cache pour un taxon, un service et une actions donnés. 391 410 * Si le fichier existe la fonction retourne son chemin complet. 392 411 * … … 394 413 * 395 414 * @param string $service 415 * @param string $action 396 416 * @param int $tsn 397 * @param string $spip_langue 398 * @param string $action 417 * @param array $options 399 418 * 400 419 * @return string 401 420 * Chemin du fichier cache si il existe ou chaine vide sinon. 402 421 */ 403 function cache_taxonomie_existe($service, $ tsn, $spip_langue = '', $action = '') {422 function cache_taxonomie_existe($service, $action, $tsn, $options = array()) { 404 423 // Contruire le nom du fichier cache 405 $fichier_cache = cache_taxonomie_nommer($service, $ tsn, $spip_langue, $action);424 $fichier_cache = cache_taxonomie_nommer($service, $action, $tsn, $options); 406 425 407 426 // Vérification de l'existence du fichier: -
_plugins_/taxonomie/trunk/services/wikipedia/wikipedia_api.php
r96993 r97265 47 47 48 48 /** 49 * Renvoie le texte de la page ou d'une section de la page à partir d'une phrase de recherche. 49 * Renvoie, à partir d'une phrase de recherche, soit le texte de la page ou d'une section de la page, 50 * soit la liste des langues de la page. 50 51 * Cette phrase de recherche est toujours le nom scientifique du taxon dans l'utilisation qui en est faite 51 52 * par le plugin Taxonomie. … … 59 60 * @uses service_requeter_json() 60 61 * 62 * @param string $resource 63 * Chaine indiquant le type d'information à récupérer pour le taxon donné: 64 * - `text` : le texte de l'article ou d'une section de l'article 65 * - `languages` : la liste des langues de l'article concerné 61 66 * @param int $tsn 62 * 63 * 67 * Identifiant ITIS du taxon, le TSN. Etant donné que ce service s'utilise toujours sur un taxon 68 * existant le TSN existe toujours. Il sert à créer le fichier cache. 64 69 * @param string $search 65 * 70 * Chaine de recherche qui est en généralement le nom scientifique du taxon. 66 71 * @param string $language 67 * 72 * Langue au sens de Wikipedia qui préfixe l'url du endpoint. Vaut `fr`, `en`, `es`... 68 73 * @param int|null $section 69 * Section de page dont le texte est à renvoyer. Entier supérieur ou égal à 0 ou `null` pour tout la page. 70 * Cet argument est optionnel. 71 * 72 * @return string 73 * Texte trouvé rédigé en mediawiki ou chaine vide sinon. Pour traduire le texte en SPIP 74 * il est nécessaire d'utiliser le plugin Convertisseur. Néanmoins, le texte même traduit 75 * doit être remanié manuellement. 76 */ 77 function wikipedia_get($tsn, $search, $language, $section = null) { 78 $information = array('texte' => ''); 74 * Section de page dont le texte est à renvoyer. Entier supérieur ou égal à 0 ou `null` pour tout la page. 75 * Cet argument est optionnel. 76 * 77 * @return string|array 78 * Texte trouvé rédigé en mediawiki ou chaine vide sinon. Pour traduire le texte en SPIP 79 * il est nécessaire d'utiliser le plugin Convertisseur. Néanmoins, le texte même traduit 80 * doit être remanié manuellement. 81 */ 82 function wikipedia_get($resource, $tsn, $search, $options = array()) { 83 84 // Initialisation du tableau de sortie et du tableau d'options 85 $information = array(); 79 86 80 87 // Si le cache est absent ou invalide on le recrée en utilisant le service web Wikipedia 81 // sinon on le lit et on revoie le tableau du contenu désérialisé.88 // sinon on le lit et on renvoie le tableau du contenu désérialisé. 82 89 include_spip('inc/taxonomer'); 83 if (!$file_cache = cache_taxonomie_existe('wikipedia', $ tsn, $language)84 85 86 ) {90 if (!$file_cache = cache_taxonomie_existe('wikipedia', $resource, $tsn, $options) 91 or !filemtime($file_cache) 92 or (time() - filemtime($file_cache) > _TAXONOMIE_WIKIPEDIA_CACHE_TIMEOUT) 93 or (_TAXONOMIE_CACHE_FORCER)) { 87 94 // Normaliser la recherche: trim et mise en lettres minuscules 88 95 $search = strtolower(trim($search)); … … 90 97 // Construire l'URL de la function de recherche par nom vernaculaire. 91 98 // L'encodage de la recherche est effectuée dans la fonction. 92 $url = api2url_wikipedia('json', 'query', $ language, $search, $section);99 $url = api2url_wikipedia('json', 'query', $resource, $search, $options); 93 100 94 101 // Acquisition des données spécifiées par l'url 95 include_spip('inc/taxonomer');96 102 $data = service_requeter_json($url); 97 103 98 104 // Récupération de la section demandée. 99 105 if (isset($data['batchcomplete']) 100 and isset($data['query']['pages']) 101 ) { 106 and isset($data['query']['pages'])) { 102 107 $reponses = $data['query']['pages']; 103 108 $page = reset($reponses); 104 109 $id = key($reponses); 105 if (($id > 0) and !isset($page['missing']) and isset($page['revisions'][0]['*'])) { 106 $information['texte'] = $page['revisions'][0]['*']; 110 if (($id > 0) and !isset($page['missing'])) { 111 if (($resource == 'text') and isset($page['revisions'][0]['*'])) { 112 $information[$resource] = $page['revisions'][0]['*']; 113 } elseif (($resource == 'languages')) { 114 $information[$resource] = $page['revisions'][0]['langlinks']; 115 } 107 116 } 108 117 } 109 118 110 119 // Mise en cache 111 cache_taxonomie_ecrire(serialize($information), 'wikipedia', $ tsn, $language);120 cache_taxonomie_ecrire(serialize($information), 'wikipedia', $resource, $tsn, $options); 112 121 } else { 113 122 // Lecture et désérialisation du cache … … 193 202 * @param string $action 194 203 * Nom de l'action du service Wikipedia. La seule action `query` est utilisée dans cette API. 195 * @param string $language 196 * Langue au sens de Wikipedia en minuscules. Prend les valeurs `fr`, `en`, `es`, etc. 204 * @param string $resource 205 * Chaine indiquant le type d'information à récupérer pour le taxon donné: 206 * - `text` : le texte de l'article ou d'une section de l'article 207 * - `languages` : la liste des langues de l'article concerné 197 208 * @param string $search 198 209 * Clé de recherche qui est essentiellement le nom scientifique dans l'utilisation normale. 199 210 * Cette clé doit être encodée si besoin par l'appelant. 211 * @param string $language 212 * Langue au sens de Wikipedia en minuscules. Prend les valeurs `fr`, `en`, `es`, etc. 200 213 * @param int|null $section 201 214 * Section de la page à renvoyer. Valeur entière de 0 à n ou null si on veut toute la page. … … 204 217 * L'URL de la requête au service 205 218 */ 206 function api2url_wikipedia($format, $action, $language, $search, $section) { 207 208 // Construire l'URL de l'api sollicitée 219 function api2url_wikipedia($format, $action, $resource, $search, $options) { 220 221 // Construire la partie standard de l'URL de l'api sollicitée 222 $language = !empty($options['language']) ? $options['language'] : 'fr'; 209 223 $url = str_replace('%langue%', $language, _TAXONOMIE_WIKIPEDIA_ENDPOINT_BASE_URL) . '?' 210 224 . 'action=' . $action 211 . '&meta=siteinfo|wikibase'212 . '&prop=revisions&rvprop=content'213 . (!is_null($section) ? '&rvsection=' . $section : '')214 . '&continue=&redirects=1'215 225 . '&format=' . $format 216 . '&titles=' . rawurlencode(ucfirst($search)); 226 . '&titles=' . rawurlencode(ucfirst($search)) 227 . '&continue=&redirects=1'; 228 229 // Finalisation de l'URL suivant le type de ressource demandée. 230 switch ($resource) { 231 case 'text': 232 $url .= '&meta=siteinfo|wikibase' 233 . '&prop=revisions&rvprop=content' 234 . (!empty($options['section']) ? '&rvsection=' . $options['section'] : ''); 235 break; 236 case 'languages': 237 $url .= '&prop=langlinks&lllimit=500'; 238 break; 239 } 217 240 218 241 return $url;
Note: See TracChangeset
for help on using the changeset viewer.