Une API permet d'interroger et d'obtenir les données disponibles sur wikidata.org.
chora peut utiliser une bibliothèque externe installée via Composer (freearhey/wikidata) pour interagir avec cette API afin de :
—renvoyer des résultats de recherche lorsqu'aucun enregistrement n'existe dans la base de données de l'application
—importer ces résultats dans l'application comme des contenus à part entière.
Vous trouverez un exemple d'implémentation dans views/data/search.
Voici en résumé comment utiliser bibliothèque Wikidata dans un contrôleur, avec l'initialisation de la langue souhaitée pour les résultats :
//Initialize and query Wikidata in current language/fr language:
require_once ROOT.'vendor/autoload.php';
$wikidata = new WikidataWikidata(strtolower($this->session->userdata('language_code'))); //Initialize with current language
$wikidata->language=strtolower($this->session->userdata('language_code')); //Set language to current
$results = $wikidata->search($search,'fr'); //Perform a query for 'fr' language and set the $results object
if (is_object($results) && !$results->isEmpty()) {
//There is at least one result
$singleResult = $results->first(); //Get first result as the $singleResult object
$resultId = $singleResult->id; //Get first result id
$entity = $wikidata->get($resultId); //Get complete entity after its id
//Retrieve the properties of entity in an array: $arr_prop[<name of property>]=<value of property>...
$arr_prop=array();
if (isset($entity) && is_object($entity) && $entity->properties!=NULL) {
foreach($entity->properties as $key=>$property) {
$arr_prop[$property]=$entity->get($property)[0];
}
}
}
Voici enfin comment accéder à la valeur d'une propriété d'une entité :
//Retrieve the value of 'logo' property for the $entity entity and display it as an image:
if (is_object($entity) && $entity->properties!=NULL) {
$logo=$entity->get('logo');
if (is_array($logo) && count($logo)>=1) {
echo '<img class="icon-large padding" src="'.$logo[0].'"/>';
}
}
La documentation d'origine de la bibliothèque utilisée est reprise ci-après :
Installation
change current directory to the root of your installation and execute:
composer require freearhey/wikidata
Usage
$wikidata = new Wikidata();
Search
Search by entity label:
$results = $wikidata->search('London');
Search by Wikidata property ID and string value:
$results = $wikidata->searchBy('P238', 'LON');
Search by Wikidata property ID and entity ID:
$results = $wikidata->searchBy('P17', 'Q146');
Check if no search results
if($results->isEmpty()) {
echo 'no results';
die();
}
Result
Retrieve first result data
$singleResult = $results->first();
Get result ID
$resultId = $singleResult->id; // Q84
Get result label
$resultLabel = $singleResult->label; // London
Get result aliases
$resultAliases = $singleResult->aliases; // [ 'London, UK', 'London, United Kingdom',
'London, England' ]
Get result description
$resultDescription = $singleResult->description; // capital of England and the United Kingdom
Entity
Get single entity by ID:
$entity = $wikidata->get('Q26');
Get entity ID
$entityId = $entity->id; // Q26
Get entity label
$entityLabel = $entity->label; // Northern Ireland
Get entity aliases
$entityAliases = $entity->aliases; // [ 'NIR', 'UKN', 'North Ireland' ]
Get entity description
$entityDescription = $entity->description; // region in north-west Europe,
part of the United Kingdom
Get list of all available properties for specific entity
$properties = $entity->properties; // array(1) { [0]=> string(11) "instance_of", ... }
Get value specific property
$official_language = $entity->get('official_language'); // array(1) { [0]=> string(7) "English" }
That's all.
License
Wikidata is licensed under the MIT license.
Ce document a été publié le 2018-12-28 14:49:08. (Dernière mise à jour : 2019-02-04 20:53:37.)