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 [2010/02/11 19:51] – 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-> | + | |
- | $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-> | + | |
- | $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' | ||
+ | |||
+ | |||
+ | |||