Le plugin WP-JSON-API fournit une API REST permettant d’exposer les données d’un blog WordPress (Tags, Categories, Auteurs, Posts, …). Ce plugin est plutôt assez complet et vraiment utile. Malheureusement, le plugin ne semble pas vraiment maintenu et souffre de quelques lacunes (Plantages, manque d’options de filtrage, …).
Ayant utilisé ce plugin à divers occasions, j’en ai profité pour corriger quelques défauts, et j’en ai profité pour forker le repo GitHub original pour mettre à disposition les modifications effectuées.
Vous pouvez retrouver ce fork sur mon compte GitHub à l’adresse suivante: https://github.com/akinsella/wp-json-api.
N’hésitez pas à faire vivre ce plugin WordPress en le forkant ou bien même en y contribuant du code!
15 Responses to “Fork du plugin WordPress WP-JSON-API disponible sur GitHub”
Khanh
2012-05-24T06:15:28+01:00Salut Alexis,
Cool et content de voir ce plugin vivre (quoique je ne l’utilise pas).
Par contre, ca pourrait être cool de fournir un changelog pour ceux que ca intéresserait ;-)
++
Castellani Emmanuel
2012-05-24T17:17:32+01:00Salut,
je suis développeur IOs et j’aimerais utiliser ce plugin pour développer une app iphone qui viendrait lire le contenu d’un blog plutôt que d’utiliser des flux RSS. Je trouve beaucoup plus efficace de passer par du JSON cependant j’ai un gros problème : visiblement le contenu d’un post renvoyé par ce plugin contient l’ensemble des « autres plugins » utilisés sur le blog : socialshare par exemple…etc N’y aurait-il pas moyen d’extraire seulement le « vrai » contenu d’un post et de ne renvoyer que ça ? car dans l’application on n’a strictement rien à faire de ces plugins.
Merci
Emmanuel
Alexis Kinsella
2012-05-24T20:37:51+01:00Bonjour Emmanuel,
J’ai constaté également ce problème sur mon blog. Par exemple: http://blog.helyx.org/api/?json=get_recent_posts
Il y a plusieurs possibilités pour régler le problème:
– Parser côté client le contenu du post pour supprimer le contenu indésirable du message : tu peux utiliser des expressions régulières pour cela. Il est facile de mettre au point une expression régulière et la tester sur ton contenu en dehors de l’appli. Tu arriveras ainsi rapidement au résultat voulu.
– Tu peux également modifier le plugin WordPress pour arriver au résultat attendu. Ce contenu est ajouté automatiquement en fin de post assez tôt dans sa récupération voir peu-être même à la génération du contenu (Il faudrait vérifier en base de données pour en avoir le coeur net). Mais cela peut être compliqué d’arriver au résultat attendu. J’aurais donc tendance à appliquer la première solution énoncée mais côté serveur et non côté client. PHP propose pas mal de fonctions adaptées pour arriver au résultat que tu attends. Pour installer un plugin wordpress, il suffit d’aller dans le dossier wp-content/plugins et de remplacer le contenu du plugin par la version que tu as modifiée.
Alexis Kinsella
2012-05-24T20:42:39+01:00Khanh, le changelog … effectivement je ne l’ai pas mis à jour. A vrai dire, je effectué les changements il y a un bon nombre de mois et je n’ai plus en tête les changement précis. Il faudrait que j’étudie le diff de mon commit :/
Cependant de tête, j’ai échappé en particulier les champs de contenu pour éviter certains problème d’encodage JSON, même si cela ne resout pas tous les problèmes.
J’ai également ajouté des filtres qui n’existaient pas avant :D pour réduire la taille des messages correspondant à la liste des tags, des categories et des auteurs. Cela rend le plugin moins verbeux d’informations inutiles, mais pour cela encore faut-il connaître les options et pour le coup, je ne les ai plus en tête.
Il me semble qu’il est possible de retirer assez facilement, la description, le slug , et d’autres informations qui ne sont pas utiles dans tous les cas.
Castellani Emmanuel
2012-05-24T20:52:46+01:00@Alexis Kinsella
Salut Alexis,
merci de ta réponse, donc si je comprends bien, dans ta solution pas moyen d’avoir qqch de générique pour tous les blogs, car si je fais le parsing coté client alors je devrais l’adapter à chaque fois… :*(
Je vais peut être me mettre au dev sous wordpress :)
A++
Manu
Alexis Kinsella
2012-05-24T20:54:40+01:00Emmanuel,
J’ai jeté un coup d’oeil au contenu du code permettant de générer l’entrée JSON correspondant à un Post. Visiblement, cela se joue à la ligne 166 du fichier suivant: https://github.com/akinsella/wp-json-api/blob/master/models/post.php
Je pense qu’il suffit de supprimer l’appel de la fonction ‘apply_filters’. Je ne garantis pas le résultat, mais à mon avis cela se joue ici.
N’hésite pas à me confirmer si le résultat est positif! J’irais faire la modif
function set_content_value() {
global $json_api;
if ($json_api->include_value(‘content’)) {
$content = get_the_content($json_api->query->read_more);
$content = apply_filters(‘the_content’, $content); // < -- Ici $content = str_replace(']]>‘, ‘]]>’, $content);
$content = htmlspecialchars($content, ENT_QUOTES);
$this->content = $content;
} else {
unset($this->content);
}
}
Castellani Emmanuel
2012-05-24T20:58:45+01:00@Alexis Kinsella
Je teste dans la foulée !
Alexis Kinsella
2012-05-24T21:03:53+01:00J’ai noté une régressé dans les modifications que j’ai apportées au plugin. Certains caractères sont mal échappés. Je corrige le problème dès ce soir.
Je vais également tester la modification sur ce même blog. Quand j’ai qqch qui fonctionne, je te le confirme sur la page des commentaires
Castellani Emmanuel
2012-05-24T21:14:14+01:00Yes ça marche très bien !
Tu peux faire le test…
Alexis Kinsella
2012-05-24T21:19:46+01:00Emmanuel,
J’ai appliqué deux corrections. Cela fonctionne maintenant comme attendu.
Le commit Git en question: https://github.com/akinsella/wp-json-api/commit/b847c66949c03d68ca2947741a7f41887e34af2a
Il suffit de récupérer les modifications depuis le répo Git via un ‘git pull’ :)
Castellani Emmanuel
2012-05-24T21:23:20+01:00Parfait !
Merci beaucoup, je te tiendrais au courant de l’avancement de mon projet d’app iphone qui utilisera ton code modifié :)
Merci
A+
Castellani Emmanuel
2012-05-24T21:28:36+01:00Dernière question tant qu’on y est : j’ai remarqué que le plugin renvoyait les images en tant que ressources dans le json, ce qui peut devenir rapidement énorme en fonction du post consulté.
Ne saurais-tu pas comment faire en sorte qu’il y ait des liens vers les images du blog ?
Ex : http://squash.ecaste.com/?json=get_post&post_id=899
Merci !
Castellani Emmanuel
2012-05-24T21:43:34+01:00Te casse pas la tete, tu peux annuler mon précédent commentaire, visiblement c’est au niveau de mon post que l’image a été mal inclue.
Merci encore
Emmanuel
Alexis Kinsella
2012-05-24T21:49:33+01:00Tu peux supprimer certains champs en les énumérant dans la query. Par exemple:
Dans ce cas précis, j’ai enlevé certaines parties du contenu assez verbeux. Par contre, je suis étonné du contenu des images directement embarqué dans le post, et je n’ai pas vraiment de réponse immédiate à t’apporter. il faudrait creuser un peu le code source et voir comment c’est géré.
Castellani Emmanuel
2012-05-24T21:52:10+01:00Visiblement ça dépend directement du modèle d’insertion de l’image dans le post, car j’ai certaines images comme ceci et d’autres en lien.