SpipService

Cette contribution surcharge des fichiers et/ou des fonctions de SPIP : il n’est donc pas garanti qu’elle fonctionne avec d’autres contributions surchargeant lesdits fichiers et/ou fonctions. Sa compatibilité avec les versions de SPIP est donc assez restreinte.

SpipService est un outil permettant d’actualiser un site Spip depuis n’importe quel environnement. Ce plugin permet à un service tiers de gérer le contenu du système via des services web (WebService).

« SpipService est une interface entre vous et le reste du monde... »

Une fois installé, imaginez toutes les possibilités qu’il vous offre... Les rédacteurs de votre site sont en constant mouvement, ils n’ont pas toujours un ordinateur branché sur la Toile à leur portée, mais ils ont leur Smartphone... Vous avez un blog, vous aimeriez qu’en l’actualisant, votre site Spip le soit aussi et sans dépendance. Les exemples sont multiples.

Évidemment il ne faut pas oublier que le meilleur environnement pour saisir du contenu reste l’interface privée de Spip. Ce plugin vous apportera des possibilités basiques mais il est développé sur un model évolutif.

Parlons maintenant des possibilités natives, oui « natives » car vous pourrez le faire évoluer très simplement mais on parlera de ça plus bas...

Voici donc la liste des services web acquis dès l’installation :

LECTURE :

  • search -> retourne le résultat d’une recherche de rubriques/articles/brèves (au moins 3 caractères)
  • getbystatut -> retournes les articles/brèves en fonction du statut demandé
  • getbyauteur -> retourne les articles de d’un auteur
  • getauteurloggedin -> retourne les informations sur l’utilisateur authentifié
  • getchildren -> retourne les rubriques/articles/brèves sous forme d’arbre (permet de parcourir le contenu du site)
  • getrubriquedata -> retournes les informations d’une rubrique
  • getarticledata -> retourne les informations d’un article
  • getbrevedata -> retourne les informations d’une brève
  • getdocumentdata -> retourne les informations d’un document
  • getarticledocuments -> retourne les documents d’un article
  • getbrevedocuments -> retourne les documents d’une brève
  • getrubriquedocuments -> retourne les documents d’une rubrique

ECRITURE :

  • setrubrique -> fixe les informations d’une rubrique
  • setarticle -> fixe les informations d’un article
  • setbreve -> fixe les informations d’une brève
  • setdocument -> fixe les informations d’un document
  • adddocumentrubrique -> ajoute un document à une rubrique
  • adddocumentarticle -> ajoute un document à un article
  • adddocumentbreve -> ajoute un document à une brève
  • institutearticle -> fixe le statut / date de publication d’un article
  • institutebreve -> fixe le statut / date de publication d’une brève
  • deletearticle -> supprime un article
  • deleterubrique -> supprime une rubrique
  • deletedocumentarticle -> supprime le document d’un article (simple dissociation sur Spip3)
  • deletedocumentbreve -> supprime le document d’une brève (simple dissociation sur Spip3)
  • deletedocumentrubrique -> supprime le document d’une rubrique (simple dissociation pour Spip3)
  • addlogobreve -> fixe le logo d’une brève
  • addlogorubrique -> fixe le logo d’une rubrique
  • addlogoarticle -> fixe le logo d’un article
  • deletelogobreve -> supprime le logo d’une brève
  • deletelogorubrique -> supprime le logo d’une rubrique
  • deletelogoarticle -> supprime le logo d’une brève

UTILITAIRES :

  • clearcache -> vide le cache du CMS
  • clearcacheimage -> vide le cache image du CMS
  • authentication -> vérifie que l’authentification est bonne et que le plugin est bien installé

Penchons-nous maintenant sur le fonctionnement du plugin...

Je vais faire une brève description, néanmoins vous trouverez toutes les informations dont vous avez besoin dans la documentation technique.

Pour appeler un service web, vous devez faire une requête HTTP vers votre site. Une fois cette requête reçue par le serveur, elle passe par l’authentification de Spip. Elle arrive ensuite jusqu’à SpipService. À ce moment, le plugin va chercher le service web demandé en fonction des paramètres de la requête et vous retournera ensuite une réponse.

Note : SpipService prend en charge la notion de permission (y compris celles du plugin Accès Restreint). Par exemple, si vous avez configuré votre CMS de manière à ce qu’il ne soit pas possible d’ajouter des brèves, le plugin ne le permettra pas et vous pourrez obtenir cette information dans les données d’une rubrique retournées par le service ’getrubriquedata’ par exemple.

Parlons des ouvertures de SpipService !

Vous avez développé le plugin Chat (en passant, bravo Matthieu Marcillaud pour La Fabrique, magnifique !). Vous gérez donc maintenant un nouvel objet (façon de parler) éditorial mais qui n’est pas pris en charge par SpipService.
Et bien vous n’aurez qu’à définir quelques fichiers dans le dossier inc/ de ce plugin et le tour est joué. Là encore vous trouverez la procédure complète dans la documentation technique.

Note : SpipService log dans une table SQL les actions effectuées (services d’écriture seulement), il est donc simple de savoir qui a fait quoi et quand. Cependant l’interface dans le back-office n’est pas encore implémentée, mais cela fait partie de la TODO Liste.

Ce plugin est un premier jet et demande évidemment des évolutions. Je vous invite donc à me faire remonter vos propositions, remarques, problèmes et améliorations.

J’espère qu’il vous ouvrira de nouvelles portes...

SpipService surcharge le fichier auth.php de Spip.

Discussion

9 discussions

  • Thibault Hilaire

    Bonjour

    J’essaye de faire marcher spipservice depuis Python (pour automatiser la publication d’articles depuis un script), et pas moyen.
    Serait-il possible d’obtenir un peu d’aide ?

    1) Spipservice est fonctionnel, car si je suis authentifé sur la partie privée (donc avec session et cookie), je peux ensuite accéder depuis mon navigateur à une page du genre « http://www.votrespip.com/ecrire/?action=spipservice&service = getauteurloggedin&format=json »

    2) Par contre, je ne peux pas y accéder depuis mon script Python

    import requests
    from requests.auth import HTTPBasicAuth
    r = requests.get('http://www.votrespip.com/ecrire/?action=spipservice&service = getauteurloggedin&format=json', auth=HTTPBasicAuth('user', 'pass'))

    (c’est du Python, basé sur le module requests, qui gère bien l’authentification Basic ; le login et mot de passe ont été vérifié ;-) )
    j’obtient juste une redirection vers la page de login.
    J’ai vérifié le header de la requête, il me semble conforme à de l’authentification Basic :

    ’Accept-Encoding’ : ’gzip, deflate’, ’User-Agent’ : ’python-requests/2.5.0 CPython/3.4.0 Darwin/13.4.0’, ’Authorization’ : ’Basic VGhpYjp0b3Rv’, ’Accept’ : ’*/*’, ’Connection’ : ’keep-alive’

    3) Mon site est hébergé chez 1and1. Je n’ai aucune idée si il y a les mêmes problèmes qu’avec OVH (variable globale REMOTE_USER), mais j’ai aussi essayé de modifier le .htaccess comme précisé dans le readme.txt
    J’ai aussi vérifié que la config de Spip permet l’authentification HTTP : j’ai bien ignore_auth_http = false ; dans ecrire/inc_version.php

    Voilà, j’ai fait un peu le tour de ce qui me semblait « évident » à tester.
    Je me trouve maintenant sans autre idée pour pouvoir accéder à spip via un service (sinon de tester XMLRPC).
    Il y a-t-il d’autres points que je devrais vérifier, d’autres trucs à essayer pour voir d’où vient le problème (par exemple, un site spip où on sait que spipservice marche, pour voir si ça vient du script Python ?)

    Je vous remercie beaucoup pour l’aide que vous pourriez m’apporter !!

    Répondre à ce message

  • 1

    Bonjour,
    ca l’a l air bien chouette... mais y’aurait moyen d avoir un petit exemple de code php qui permettrait d interroger un site spip par webservice ? Une url complète pour interroger le serveur spip ? C’est un domaine qui ne m’est pas très familier faut dire...
    Un grand merci
    triton

    • TEST
      j ai l impression qu on ne reçoit plus de notification par mail lorsque quelqu’un répond, donc.... je teste....
      /TEST

    Répondre à ce message

  • Bonjour,

    J’ai eu un soucis avec le format json lors de la réception des données.

    C’était du à la fonction getRequestParam dans spip_service_utils.php qui passe un stripclslashes avant json.decode, du coup l’unicode n’était pas décodé.

    Répondre à ce message

  • 1
    rburton

    Bonjour,

    à divers endroit, dans un spip 3.0 avec divers plugins (qui ont l’air de bien se porter)

    la mention suivante

    spipservice.titre_spipservice

    par exemple dans els champs extras : avec le lien suivant
    http://ns228695.ovh.net/spip/ecrire/?exec=champs_extras_edit&objet=spipservice

    à d’autres endroits, il apparaît également comme un « objet éditorial »

    je ne comprends pas pourquoi ...

    par ailleurs, un petit mot d’explication supplémentaire sur l’authentification, j’ai pas trop compris ?...

    Grand merci
    ces Web Services sont une vraie nécessité aujourd’hui

    RB

    • Salut,

      en effet, SpipService a sa table dans la BDD, pour y insérer des logs et ainsi savoir qui a fait quoi et quand ! C’est surement pour cela qu’il apparait comme objet éditorial.
      Concernant l’authentification, tout est dans la doc. Cependant, je vais faire quelques modifications pour le rendre non visible sur le réseau, il ne sera donc plus basé sur le HTTP Basic (enfin, cette version sera maintenue mais déconseillée) mais simplement passé en paramètre de la requête.

      seb

    Répondre à ce message

  • Hello,

    Très bon plugin !

    Vivement que les webservices soient directement intégrés à SPIP en natif.

    Merci pour ce travail !

    Répondre à ce message

  • 3
    Haqqtiviste

    en réponse au mail :

    SPIP 3.0.0-rc [19216]

    agenda 3.6
    API de verif 0.1.14
    champ extra 3.0.6
    champ extra (interface) 3.0.3
    en travaux 3.1.7
    facteur 2.1.6
    Formulaire de contact avancé 0.10.0
    Image map des départements 0.2.0
    Lecteur Multimédia 2.1.0
    Menus 1.1.0
    Mini Calendrier 2.1.0
    NivoSlider 2.0.0
    Saisies pour formulaires 1.25.3
    YAML 1.5.0

    pas mal d’entre eux sont en test, d’autres en stable

    • En effet, je viens de tester en local et même chose.
      Je regarde ça en fin de journée et je ferai une mise à jour (pour demain j’espère)
      merci de ta remarque.

    • c’est corrigé et commité sur la zone, d’ici une heure le zip sera mis à jour.
      enjoy !

    • une nouvelle fois l’auteur du message ci-dessus...

    Répondre à ce message

  • 3
    Haqqtiviste

    il n’apparait pas non plus une fois activé dans les la liste des plugins actifs.

    pour le desactiver, comment fait on ?
    effacement en FTP je présume.

    • Je n’ai pas rencontré ce soucis.
      la liste des plugins présents et la version présice de ton spip3 stp ?

    • je ne m’étais pas connecté... le message du dessus est le mien.

    • Haqqtiviste

      en fait, il dit qu’il s’installe, mais en fait reste dans les inactifs, et l’espace du plugin (titre, version, etc) reste vide. uniquement les boutons activer et supprimer sont présents.

    Répondre à ce message

  • Haqqtiviste

    bonjour
    dans spip 3, le plugin s’installe mais aucun nom, titre visible pour l’activer, la case reste vide...

    Répondre à ce message

  • Bonjour,

    Excellent plugin !
    Dans le même genre, on a le plugin XMLRPC réalisé par kent1 :
    http://www.mediaspip.net/technical-documentation/plugins-used-by-mediaspip/xmlrpc-une-api-xml-rpc-pour-spip/article/support-xml-rpc-pour-spip

    Cela offre la possibilité, par exemple, d’une iApp iPhone tout comme Wordpress for iOS :
    http://ios.trac.wordpress.org/browser/trunk
    http://ios.trac.wordpress.org/browser/trunk/WordPressApi/

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom