Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| scrutaridata:exportapi:php [2015/03/16 13:15] – [Exemple d'Utilisation] vincent | scrutaridata:exportapi:php [2016/09/21 18:19] (Version actuelle) – vincent | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Implémentation de l'API en PHP ====== | ====== Implémentation de l'API en PHP ====== | ||
| - | L' | + | L' |
| - | | + | Toutes les classes et constantes de ce fichier commence par le suffixe |
| - | ===== Utilisation de l' | + | Ces scripts sont accessibles avec Git via https:// |
| - | Pour utiliser cette implémentation, | + | Un autre accès avec Subversion : |
| - | Tous les fichiers reprennent les noms de classe de l'API à l' | + | svn co http:// |
| - | L' | ||
| - | ===== Exemple d'Utilisation | + | ===== Exemple |
| + | |||
| + | L' | ||
| + | |||
| + | Outre le fichier scrutaridataexport.php, | ||
| + | |||
| + | === Fichier comedie.scrutari-data.php | ||
| + | |||
| + | Ce fichier contient les informations de la configuration (accès à la base de données). | ||
| <code php> | <code php> | ||
| <?php | <?php | ||
| - | /* Chargement de la bibliothèque ScrutariDataExportLib | + | //Indication que les données transmises sont du XML |
| - | */ | + | header("content-type: |
| - | require_once("ScrutariDataExportLib/class-ScrutariDataExport.php"); | + | |
| - | /* Ouverture d'un fichier en écriture | + | // Nom de la base de données de WordPress. |
| - | */ | + | define(' |
| - | $file = fopen(" | + | |
| - | /* Construction d'une instance SED_XmlWriter | + | // Utilisateur de la base de données MySQL. |
| - | Pour que le code XML s'affiche dans la sortie standard, on écrirait $xmlWriter = new SED_XmlWriter(NULL); | + | define(' |
| - | */ | + | |
| - | $xmlWriter = new SED_XmlWriter($file); | + | |
| - | /* On inclus préalablement | + | // Mot de passe de la base de données MySQL. |
| - | (méthode hors API) | + | define(' |
| - | */ | + | |
| - | $xmlWriter-> | + | |
| - | /* Construction d'une instance | + | // Adresse |
| - | */ | + | define(' |
| - | $scrutariDataExport = new SED_ScrutariDataExport($xmlWriter); | + | |
| - | /* Début | + | // Jeu de caractères à utiliser par la base de données |
| - | */ | + | define(' |
| - | $baseMetadataExport = $scrutariDataExport-> | + | |
| - | /* Définition des métadonnées de la base | + | // Chaine vide pour SCRUTARIDATA_PATH, les données XML sont affichées directement |
| - | SED_INTITULE_SHORT correspond à la constante INTITULE_SHORT de l' | + | define(' |
| - | */ | + | |
| - | $baseMetadataExport-> | + | |
| - | $baseMetadataExport-> | + | |
| - | $baseMetadataExport-> | + | |
| - | $baseMetadataExport-> | + | |
| - | $baseMetadataExport-> | + | |
| - | $baseMetadataExport-> | + | |
| - | $baseMetadataExport-> | + | |
| - | $baseMetadataExport-> | + | |
| - | $baseMetadataExport-> | + | |
| - | /* Insertion d'un corpus avec de nom « fiches » | + | // Appel de comedie.php |
| - | $corpusMetadataExport est une instance de SED_CorpusMetadataExport | + | require("comedie.php"); |
| - | */ | + | </ |
| - | $corpusMetadataExport = $scrutariDataExport-> | + | |
| - | /* Définition des métadonnées du corpus | + | Si on avait voulu que l' |
| - | */ | + | |
| - | $corpusMetadataExport-> | + | |
| - | $corpusMetadataExport-> | + | |
| - | /* Définition de deux champs complémentaires | + | <code php> |
| - | */ | + | define(' |
| - | $numero = $corpusMetadataExport->addComplement(); | + | </code> |
| - | $corpusMetadataExport-> | + | |
| - | $corpusMetadataExport-> | + | |
| - | $numero = $corpusMetadataExport->addComplement(); | + | |
| - | $corpusMetadataExport-> | + | |
| - | /* Premier exemple d'une fiche | + | === Fichier comedie.php === |
| - | $ficheExport est une instance de SED_FicheExport | + | |
| - | */ | + | |
| - | $ficheExport | + | |
| - | $ficheExport-> | + | |
| - | $ficheExport-> | + | |
| - | $ficheExport-> | + | |
| - | $ficheExport-> | + | |
| - | /*Second exemple | + | Ce fichier (http:// |
| + | |||
| + | Le fichier commence par l' | ||
| + | |||
| + | <code php> | ||
| + | // | ||
| + | require_once(" | ||
| + | </ | ||
| + | |||
| + | Vient ensuite la déclaration d'une classe utilitaire : | ||
| + | |||
| + | <code php> | ||
| + | /** | ||
| + | * Recensement des posts Wordpress retenus pour l' | ||
| */ | */ | ||
| - | $ficheExport = $scrutariDataExport-> | + | class PostCensus { |
| - | $ficheExport-> | + | |
| - | $ficheExport-> | + | |
| - | $ficheExport-> | + | |
| - | $ficheExport-> | + | |
| - | $ficheExport-> | + | |
| - | $ficheExport-> | + | |
| - | $ficheExport-> | + | |
| - | /* Exemple d' | + | private $map; |
| - | même s'il ne s'agit du mot-clé ou de la fiche en cours ou que le thésaurus ou le corpus | + | |
| - | n'ont pas encore été définis. | + | function __construct() { |
| + | $this->map = array(); | ||
| + | } | ||
| + | |||
| + | function put($id, $corpus) { | ||
| + | $this-> | ||
| + | } | ||
| + | |||
| + | function get($id) { | ||
| + | return $this-> | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | Puis la définit des fonctions. | ||
| + | |||
| + | <code php> | ||
| + | /** | ||
| + | * Ajoute les posts appartenant à la catégorie indiquée par $termTaxonomyId, | ||
| + | * ces posts étant destiné à être inclus dans le corpus de nom $corpusName | ||
| */ | */ | ||
| - | $scrutariDataExport-> | + | function addPosts($pdo, |
| + | $statement = $pdo->query(' | ||
| + | $array = array(); | ||
| + | while ($row = $statement-> | ||
| + | $array[] = $row[0]; | ||
| + | } | ||
| + | foreach($array as $postId) { | ||
| + | $postStatement = $pdo-> | ||
| + | $postRow = $postStatement-> | ||
| + | if ($postRow) { | ||
| + | $postCensus-> | ||
| + | $titre = $postRow[' | ||
| + | $soustitre = ""; | ||
| + | $date = ""; | ||
| + | $auteurs = ""; | ||
| + | $publication_annee = ""; | ||
| + | $publication_auteur = ""; | ||
| + | $publication_editeur = ""; | ||
| + | $metaStatement = $pdo-> | ||
| + | $dateDone = false; | ||
| + | while($metaRow = $metaStatement-> | ||
| + | $metaKey = $metaRow[' | ||
| + | $value = $metaRow[' | ||
| + | if ($metaKey == ' | ||
| + | $soustitre = $value; | ||
| + | } else if ($metaKey == ' | ||
| + | if ((!$dateDone) && (strlen($value) > 0)) { | ||
| + | $date = $value; | ||
| + | } | ||
| + | } else if ($metaKey == ' | ||
| + | if (strlen($value) > 0) { | ||
| + | $date = $value; | ||
| + | $dateDone = true; | ||
| + | } | ||
| + | } else if ($metaKey == ' | ||
| + | $auteurs = $value; | ||
| + | } else if ($metaKey == ' | ||
| + | $publication_annee = $value; | ||
| + | } else if ($metaKey == ' | ||
| + | $publication_auteur = $value; | ||
| + | } else if ($metaKey == ' | ||
| + | $publication_editeur = $value; | ||
| + | } | ||
| + | } | ||
| + | if ($corpusName == ' | ||
| + | $titre = "Note de lecture : " | ||
| + | if (strlen($soustitre) > 0) { | ||
| + | if (substr($titre, | ||
| + | $titre .= " | ||
| + | } | ||
| + | $titre .= " " | ||
| + | $soustitre = "" | ||
| + | } | ||
| + | $soustitre = appendInfo($soustitre, $publication_auteur); | ||
| + | $soustitre = appendInfo($soustitre, | ||
| + | $soustitre = appendInfo($soustitre, | ||
| + | } | ||
| + | $ficheExport = $scrutariDataExport-> | ||
| + | $ficheExport-> | ||
| + | $ficheExport-> | ||
| + | $ficheExport-> | ||
| + | $ficheExport-> | ||
| + | if (strlen($date) > 0) { | ||
| + | $ficheExport-> | ||
| + | } | ||
| + | if (strlen($auteurs) > 0) { | ||
| + | parseAuteurs($auteurs, $pdo, $ficheExport); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| - | /* Insertion d'un thésaurus de nom « motscles » | + | /** |
| - | $thesaurusMetadataExport est une instance | + | * Ajoute |
| */ | */ | ||
| - | $thesaurusMetadataExport | + | function appendInfo($text, |
| + | | ||
| + | $value = str_replace(" | ||
| + | if (substr($value, | ||
| + | $value = substr($value, | ||
| + | } | ||
| + | if (strlen($value) == 0) { | ||
| + | return $text; | ||
| + | } | ||
| + | if (strlen($text) > 0) { | ||
| + | $text .= ", "; | ||
| + | } | ||
| + | $text .= $value; | ||
| + | return $text; | ||
| + | } | ||
| - | /* Définition | + | /** |
| + | * Récupère le nom des auteurs d'un post. Sur le site comedie.org, | ||
| + | * par meta_key=auteurs_plus dans la table wp_postmeta et sous la forme a: | ||
| + | * l' | ||
| */ | */ | ||
| - | $thesaurusMetadataExport-> | + | function parseAuteurs($auteurs, $pdo, $ficheExport) { |
| - | $thesaurusMetadataExport->setIntitule(SED_INTITULE_THESAURUS, | + | $idx1 = strpos($auteurs, "\""); |
| + | if ($idx1 < 1) { | ||
| + | return; | ||
| + | } | ||
| + | $idx2 = strpos($auteurs, "\"", $idx1 + 1); | ||
| + | if ($idx2 < 1) { | ||
| + | return; | ||
| + | } | ||
| + | $auteurId = substr($auteurs, | ||
| + | if ($auteurId == 572) { // | ||
| + | return; | ||
| + | } | ||
| + | $authorStatement = $pdo->query(' | ||
| + | $auteur = $authorStatement-> | ||
| + | if ($auteur) { | ||
| + | $ficheExport-> | ||
| + | } | ||
| + | } | ||
| - | /* Exemple d' | + | /** |
| + | * Ajoute les termes de la taxonomie $taxonomy sous la forme de mots-clés du thésaurus | ||
| + | * la fonction récupère également les posts liés au terme et crée une indexation si le post a bien été recensé | ||
| + | * préalablement dans $postCensus | ||
| */ | */ | ||
| - | $motcleExport = $scrutariDataExport-> | + | function addTerms($pdo, $scrutariDataExport, $taxonomy, $postCensus, |
| - | $motcleExport-> | + | $statement = $pdo->query("SELECT wp_term_taxonomy.term_taxonomy_id, |
| + | $array = array(); | ||
| + | while ($row = $statement-> | ||
| + | $id = $row[0]; | ||
| + | $name = $row[1]; | ||
| + | if ((strlen($name) > 0) && (strpos($name, | ||
| + | $array[] = $id; | ||
| + | | ||
| + | | ||
| + | } | ||
| + | } | ||
| + | foreach($array as $termId) { | ||
| + | $postStatement = $pdo-> | ||
| + | while ($postId = $postStatement-> | ||
| + | $corpusName = $postCensus-> | ||
| + | if (strlen($corpusName) > 0) { | ||
| + | $scrutariDataExport-> | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| - | /* Autre exemple d'insertion d'indexation n'importe où*/ | + | C'est alors que commmence l'initialisation avec l'utilisation des constantes définies dans comedie.scrutari-data.php pour l' |
| - | $scrutariDataExport-> | + | |
| - | /* L' | + | <code php> |
| - | toujours sur le premier mot-clé */ | + | //Test si l'extraction est écrite dans un fichier ou directement vers la sortie |
| - | $motcleExport->setLibelle(" | + | $file = false; |
| + | if (strlen(SCRUTARIDATA_PATH) | ||
| + | $file = fopen(SCRUTARIDATA_PATH, "w"); | ||
| + | } | ||
| - | /* Fin de l' | + | //Accès à la base de données |
| - | */ | + | $pdo = new PDO(' |
| - | $scrutariDataExport-> | + | |
| - | /* Fermeture du fichier */ | + | // Instance de PostCensus recensant les posts inclus dans l' |
| - | fclose($file); | + | $postCensus = new PostCensus(); |
| + | |||
| + | // Instance de SDE_XmlWriter recensant les posts inclus dans l' | ||
| + | $xmlWriter = new SDE_XmlWriter($file, true, true); | ||
| + | $scrutariDataExport = new SDE_ScrutariDataExport($xmlWriter); | ||
| </ | </ | ||
| + | |||
| + | Vient ensuite l' | ||
| + | |||
| + | <code php> | ||
| + | // | ||
| + | $baseMetadataExport = $scrutariDataExport-> | ||
| + | $baseMetadataExport-> | ||
| + | $baseMetadataExport-> | ||
| + | $baseMetadataExport-> | ||
| + | $baseMetadataExport-> | ||
| + | $baseMetadataExport-> | ||
| + | $baseMetadataExport-> | ||
| + | |||
| + | //Création du corpus experience correspondant aux fiches de http:// | ||
| + | $corpusMetadataExport = $scrutariDataExport-> | ||
| + | $corpusMetadataExport-> | ||
| + | $corpusMetadataExport-> | ||
| + | |||
| + | //Ajout des posts des expériences (12 est l' | ||
| + | addPosts($pdo, | ||
| + | |||
| + | //Création du corpus monographie correspondant aux fiches de http:// | ||
| + | $corpusMetadataExport = $scrutariDataExport-> | ||
| + | $corpusMetadataExport-> | ||
| + | $corpusMetadataExport-> | ||
| + | |||
| + | //Ajout des posts des monographies | ||
| + | addPosts($pdo, | ||
| + | |||
| + | //Création du corpus video correspondant aux fiches de http:// | ||
| + | $corpusMetadataExport = $scrutariDataExport-> | ||
| + | $corpusMetadataExport-> | ||
| + | $corpusMetadataExport-> | ||
| + | |||
| + | //Ajout des posts des vidéos | ||
| + | addPosts($pdo, | ||
| + | |||
| + | //Création du corpus lecture correspondant aux fiches de http:// | ||
| + | $corpusMetadataExport = $scrutariDataExport-> | ||
| + | $corpusMetadataExport-> | ||
| + | $corpusMetadataExport-> | ||
| + | |||
| + | //Ajout des posts des notes de lecture | ||
| + | addPosts($pdo, | ||
| + | |||
| + | //Création du thésaurus motcle | ||
| + | $thesaurusMetadataExport = $scrutariDataExport-> | ||
| + | $thesaurusMetadataExport-> | ||
| + | |||
| + | //Ajout des termes, les mots-clés sont distingués des autres termes par la taxonomie mots-clefs | ||
| + | addTerms($pdo, | ||
| + | |||
| + | //Fin de l' | ||
| + | $scrutariDataExport-> | ||
| + | </ | ||
| + | |||
| + | Ce script peut facilement être adapté à un autre site sous Wordpress. Les grandes différences d'un site à l' | ||
| + | |||
| + | |||
| + | |||
