Fork du plugin WordPress WP-JSON-API disponible sur GitHub

Fork du plugin WordPress WP-JSON-API disponible sur GitHub

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”

  1. Khanh

    2012-05-24T06:15:28+00:00

    Salut 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 ;-)
    ++

  2. Castellani Emmanuel

    2012-05-24T17:17:32+00:00

    Salut,
    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

  3. Alexis Kinsella

    2012-05-24T20:37:51+00:00

    Bonjour 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.

  4. Alexis Kinsella

    2012-05-24T20:42:39+00:00

    Khanh, 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.

  5. Castellani Emmanuel

    2012-05-24T20:52:46+00: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

  6. Alexis Kinsella

    2012-05-24T20:54:40+00:00

    Emmanuel,

    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);
    }
    }

  7. Castellani Emmanuel

    2012-05-24T20:58:45+00:00

    @Alexis Kinsella
    Je teste dans la foulée !

  8. Alexis Kinsella

    2012-05-24T21:03:53+00:00

    J’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

  9. Castellani Emmanuel

    2012-05-24T21:14:14+00:00

    Yes ça marche très bien !
    Tu peux faire le test…

  10. Alexis Kinsella

    2012-05-24T21:19:46+00:00

    Emmanuel,

    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’ :)

  11. Castellani Emmanuel

    2012-05-24T21:23:20+00:00

    Parfait !
    Merci beaucoup, je te tiendrais au courant de l’avancement de mon projet d’app iphone qui utilisera ton code modifié :)
    Merci
    A+

  12. Castellani Emmanuel

    2012-05-24T21:28:36+00:00

    Derniè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 !

  13. Castellani Emmanuel

    2012-05-24T21:43:34+00:00

    Te 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

  14. Alexis Kinsella

    2012-05-24T21:49:33+00:00

    Tu 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é.

  15. Castellani Emmanuel

    2012-05-24T21:52:10+00:00

    Visiblement ç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.

Leave a Reply