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 [2016/09/07 16:05] – 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 **SDE_** afin de minimiser le risque de conflits de noms avec d' | Toutes les classes et constantes de ce fichier commence par le suffixe **SDE_** afin de minimiser le risque de conflits de noms avec d' | ||
- | Le dépôt subversion permet d' | + | Ces scripts sont accessibles avec Git via https:// |
+ | |||
+ | Un autre accès avec Subversion : | ||
svn co http:// | svn co http:// | ||
Ligne 15: | Ligne 17: | ||
Outre le fichier scrutaridataexport.php, | 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 | ||
+ | // | ||
+ | header(" | ||
+ | // Nom de la base de données de WordPress. | ||
+ | define(' | ||
+ | |||
+ | // Utilisateur de la base de données MySQL. | ||
+ | define(' | ||
+ | |||
+ | // Mot de passe de la base de données MySQL. | ||
+ | define(' | ||
+ | |||
+ | // Adresse de l' | ||
+ | define(' | ||
+ | |||
+ | // Jeu de caractères à utiliser par la base de données | ||
+ | define(' | ||
+ | |||
+ | // Chaine vide pour SCRUTARIDATA_PATH, | ||
+ | define(' | ||
+ | |||
+ | // Appel de comedie.php | ||
+ | require(" | ||
</ | </ | ||
+ | |||
+ | Si on avait voulu que l' | ||
+ | |||
+ | <code php> | ||
+ | define(' | ||
+ | </ | ||
+ | |||
+ | === Fichier comedie.php === | ||
+ | |||
+ | 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' | ||
+ | */ | ||
+ | class PostCensus { | ||
+ | |||
+ | private $map; | ||
+ | |||
+ | function __construct() { | ||
+ | $this-> | ||
+ | } | ||
+ | | ||
+ | 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 | ||
+ | */ | ||
+ | function addPosts($pdo, | ||
+ | $statement = $pdo-> | ||
+ | $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, | ||
+ | $soustitre = appendInfo($soustitre, | ||
+ | $soustitre = appendInfo($soustitre, | ||
+ | } | ||
+ | $ficheExport = $scrutariDataExport-> | ||
+ | $ficheExport-> | ||
+ | $ficheExport-> | ||
+ | $ficheExport-> | ||
+ | $ficheExport-> | ||
+ | if (strlen($date) > 0) { | ||
+ | $ficheExport-> | ||
+ | } | ||
+ | if (strlen($auteurs) > 0) { | ||
+ | parseAuteurs($auteurs, | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Ajoute $value à la fin de $text en rajoutant une virgule si nécessaire | ||
+ | */ | ||
+ | function appendInfo($text, | ||
+ | $value = trim($value); | ||
+ | $value = str_replace(" | ||
+ | if (substr($value, | ||
+ | $value = substr($value, | ||
+ | } | ||
+ | if (strlen($value) == 0) { | ||
+ | return $text; | ||
+ | } | ||
+ | if (strlen($text) > 0) { | ||
+ | $text .= ", "; | ||
+ | } | ||
+ | $text .= $value; | ||
+ | return $text; | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * 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' | ||
+ | */ | ||
+ | function parseAuteurs($auteurs, | ||
+ | $idx1 = strpos($auteurs, | ||
+ | if ($idx1 < 1) { | ||
+ | return; | ||
+ | } | ||
+ | $idx2 = strpos($auteurs, | ||
+ | if ($idx2 < 1) { | ||
+ | return; | ||
+ | } | ||
+ | $auteurId = substr($auteurs, | ||
+ | if ($auteurId == 572) { // | ||
+ | return; | ||
+ | } | ||
+ | $authorStatement = $pdo-> | ||
+ | $auteur = $authorStatement-> | ||
+ | if ($auteur) { | ||
+ | $ficheExport-> | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Ajoute les termes de la taxonomie $taxonomy sous la forme de mots-clés du thésaurus de nom $thesaurusName, | ||
+ | * 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 | ||
+ | */ | ||
+ | function addTerms($pdo, | ||
+ | $statement = $pdo-> | ||
+ | $array = array(); | ||
+ | while ($row = $statement-> | ||
+ | $id = $row[0]; | ||
+ | $name = $row[1]; | ||
+ | if ((strlen($name) > 0) && (strpos($name, | ||
+ | $array[] = $id; | ||
+ | $motcleExport = $scrutariDataExport-> | ||
+ | $motcleExport-> | ||
+ | } | ||
+ | } | ||
+ | foreach($array as $termId) { | ||
+ | $postStatement = $pdo-> | ||
+ | while ($postId = $postStatement-> | ||
+ | $corpusName = $postCensus-> | ||
+ | if (strlen($corpusName) > 0) { | ||
+ | $scrutariDataExport-> | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | C'est alors que commmence l' | ||
+ | |||
+ | <code php> | ||
+ | //Test si l' | ||
+ | $file = false; | ||
+ | if (strlen(SCRUTARIDATA_PATH) > 0) { | ||
+ | $file = fopen(SCRUTARIDATA_PATH, | ||
+ | } | ||
+ | |||
+ | //Accès à la base de données | ||
+ | $pdo = new PDO(' | ||
+ | |||
+ | // Instance de PostCensus recensant les posts inclus dans l' | ||
+ | $postCensus = new PostCensus(); | ||
+ | |||
+ | // Instance de SDE_XmlWriter recensant les posts inclus dans l' | ||
+ | $xmlWriter = new SDE_XmlWriter($file, | ||
+ | $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' | ||
+ | |||
+ | |||
+ | |||