SIEPS, script d’import/export d’articles SPIP

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

SIEPS (Script d’Import/Export pour SPIP) est un script PHP permettant de faire de l’import/export d’articles SPIP. Les objets attachés aux articles sont aussi transférés : auteurs, documents, mots-clés, logos, rubriques.

Fonctionnement général

L’objet de base manipulé par SIEPS est l’article SPIP : l’utilisateur sélectionne des articles SPIP, qui sont empaquetés dans un fichier XML stocké au niveau du site d’orgine. Ce paquet peut ensuite être récupéré au niveau du site cible ; l’utilisateur peut l’ouvrir, et choisir le ou les articles qu’il veut importer.

Il faut installer SIEPS sur chacun des sites SPIP visés :

-  les sites depuis lesquels on veut exporter les articles (sites origine ou d’export).
-  les sites vers lesquels on veut importer les articles (sites cibles ou d’import).

Règles d’import

L’import teste l’existence des articles sélectionnés sur le site cible. Lorsque un article existe déjà, celui-ci est soit écrasé avec les nouvelles valeurs, soit créé en tant que nouvel article, suivant un critère fixé au préalable par l’utilisateur.

Lors de l’import d’un article, toutes les rubriques desquelles dépend celui-ci sont aussi importées. Si ces rubriques n’existaient pas, elles sont créées. En aucun cas, l’article ne sera importé dans un rubrique autre que celle dans laquelle il se trouvait au départ (l’article est « fortement » lié aux rubriques dans lesquelles il se trouve).

Fonctionnement interne

Le numéro de chaque objet est recalculé lors de l’opération d’import. C’est à dire, le numéro d’un article sur le site cible (ou tout autre objet attaché à l’article) peut être différent de son numéro sur le site d’origine. Le site cible peut donc avoir une structure différente du site origine.

SIEPS gère les correspondances entre les numéros ; lorsque l’objet existe déjà sur le site cible, le nouveau numéro est calculé et remis à jour. Pour tester la présence des différents objets sur le site cible, une règle particulière est appliquée suivant le type de l’objet.

Type d’objetTest de présence
article titre de l’article et présence des rubriques mères
rubrique titre de la rubrique et rubrique mère
mot titre
groupe mots titre
auteur nom
document document de même nom, de taille identique, et attaché au même article

Le format d’échange utilisé pour transférer les articles est un XML basique. Les objets binaires (images, documents) sont codés en base 64 directement dans le XML.

Impression d’écrans

L’export des articles :

L’import des articles :

Page d’accueil de SIEPS / Téléchargement
Cliquer Ici.

Discussion

19 discussions

  • 6

    Je suis en train de tester en local entre deux versions de mon site avant d’utiliser ce script qui a l’air génial et qui répond vraiment à un de mes besoins, mais lorsque je le fais tourner, j’ai uniquement une page blanche.

    Qu’est-ce qui pourrait expliquer cela ? J’ai bien mis les URL des deux versions du site dans le ficher sites.php et supprimé ce fichier dans le site où seront importés les articles. Et Spip tourne impeccablement dans les deux versions du site.

    Que faire pour débloquer la situation et commencer à tester ?

    • Même problème, semble-t-il.

      J’ai téléchargé la dernière version (sieps.0-4.tgz) et suivi les instructions.

      J’obtiens une page blanche. Le source contient ceci :

      <frameset cols="50%,50%" frameborder="0" framespacing="0" framepadding="0">
         <frame src="scripts/sieps.php?op=export" name="export">
         <frame src="scripts/sieps.php?op=import" name="import">
      </frameset>

      Mais chacune des pages « scripts/sieps.php ?op=export » et « scripts/sieps.php ?op=import » ne contient rien d’autre que <html><body></body></html>

      Comment debugger ? Une idée ?

    • pour débugger, il suffit d’initialiser les valeurs suivantes dans le fichier config.ini :

      var $debug_level = 0 ; // MAX = 10 (aucun log)
      var $debug_out = 3 ; // 0=fichier log apache, 3=fichier ’$err_log’
      var $err_log = « /tmp/debug.log » ;

      dans ce cas, le logs vont s’afficher dans le fichier /tmp/debug.log ; vous pouvez changer le nom du fichier en fonction de votre configuration.

      Lorsque le debug est terminé, il faut penser à remettre la variable $debug_level à 10 (pas de log).

    • la page blanche je l’ai aussi en local (je vais devoir passer par le ouaib je sens...)

      -  on ne peut rien debugger vu qu’il ne se passe rien ;-)

      -  je viens de re-esayer avec la dernière version, change rien, j’ai vérifié mon phpinfo c ok pour alluw_url_fopen

      -  en lançant script/export.php j’ai eu un souci avec mon fichier mes_options (sans doute à cause des extras) alors j’ai viré les déclaration des extras et l’avertissement a disparu, retour page blanche (est-ce compatible avec les extras au fait ?)

      -  j’ai bien comme erreur si je lance /script/import.php :
      Erreur : erreur appel web service : http://www.exp.com/sieps/scripts/export.php?prot=ws&req=listeexp, ce qui voudrait dire que je suis en « safe mode » d’après le fichier INSTALL mais mon phpinfo me dit « safe_mode Off » donc je ne sais plus qui croire ;-)

      Bref si jamais une idée vous venait à l’esprit merci d’avance

    • aujourd’hui j’ai tenté avec les versions online de mes sites, sans succès le safe mode étant activé sur les serveurs si j’en crois ce message d’erreur :
      Warning : Cannot set time limit in safe mode in
      .../spip/sieps/scripts/commun.php on line 29

      Dommage, je vais devoir trouver une autre solution à ma situation :(

    • Laurent Simon

      Bonjour,

      De mon côté j’ai eu quelques difficultés, qui se résolvent simplement en mettant la ligne set_time_limit(10000) ;
      en commentaire : /* set_time_limit(10000) ; */
      dans le fichier commun.php

      Il n’y a plus l’avertissement (warning..) et surtout le logiciel fonctionne.

      Précisions : j’utilise la v 1.7.2, et mes deux sites sont sur FREE, qui utilise apparemment le « safe mode »
      et sur lequel cette mise en commentaire donne des résultats même si la variable « safe_mode_gid » est sur OFF (et non ON comme indiqué dans la doc sieps/INSTALL)

      Laurent

    • Herold Milner

      J’ai réussi a faire fonctionner SIEPS (avec SPIP 1.7.2 et 1.8.1) et a m’affranchir des fameuses « pages blanches ».

      + Vérifier l’ensemble des recommandations figurant dans Install (en particulier time limit)

      + Configurer correctement PHP/Apache via php.ini (fopen / safe mode) et verifier que register_globals = On (c’etait pour moi le point bloquant !!)

      + Modifier le fichier le fichier sieps/scripts/impexp.php en ligne 50 pour renommer la fonction lire_fichier (enlire_fichiersieps par exemple) pour éviter un problème de redeclaration.

      Voir aussi la contribution de Michel Jorda sur la liste spip.user (spip@rezo.net ) qui arrive au même résultat avec d’autres
      modifications.

    Répondre à ce message

  • 1
    Laurent Simon

    Bonjour,

    Sur FREE, j’ai eu des avertissements
    (warning..) Cannot set time limit in safe mode in... /sieps/scripts/commun.php on line
    29, qui ne semblaient pas graves, mais

    à l’origine apparemment de mon impossibilité d’utiliser SIEPS, difficultés qui se résolvent simplement en mettant la ligne set_time_limit(10000) ;
    en commentaire : /* set_time_limit(10000) ; */
    dans le fichier /sieps/scripts/commun.php

    comme indiqué dans la doc /sieps/INSTALL,
    et ceci même si la variable « safe_mode_gid » est sur OFF (en tout cas sur Free)

    Précisions : j’utilise la v 1.7.2, et mes deux sites sont sur FREE, qui utilise apparemment le « safe mode »

    • Laurent Simon

      précisions supplémentaires : j’ai utilisé la v 0.6 et la v 0.5 de SIEPS, qui semblent marcher toutes les deux avec l’indication mentionnée ci-dessus

    Répondre à ce message

  • Je viens d’installer SIEPS 0.5 pour quelques essais des fonctinnalités.
    Cela marche bien, pas de pb lorsqu’on suit bien le mode d’emploi très clair de l’article.
    Cependant cet outil tout à fait intéressant pour importer/exporter des articles d’un site à l’autre, est parfois présenter comme un outil de syndication.
    Attention, l’expression me parait un peu exagéré car il me semble bien qu’une fois importé un article d’un autre site, si on actualise modifie-supprime l’article en question sur le site d’origine, les modifications ne sont pas prise en compte dans le site cible. En tout cas si cela est possible, je n’ai pas réussi à faire fonctionner cette fonctionnalité (pas de documentation...)

    Il serait intéressant de prévoir une évolution de SIEPS qui permette une réelle syndication au sens où les articles immportés pourraient être actualisés automatiquement.
    Est-ce possible ?

    Répondre à ce message

  • 2

    j’ai tout installe comme indique, et j’ai le probleme suivant quand j’essaye d’exporter le site origine. j’obtiens ceci :

    Erreur : erreur appel web service : http://localhost/sieps/scripts/sieps.php?prot=ws&req=getsitesimp

    • SIEPS ne marche pas actuellement si l’authentification HTTP (basic ou disgest-auth) est utilisée sur les sites d’export ou d’import. Le problème vient peut-être de là.

    • un problème de calcul sur de l’URL du site central vient d’être corrigé (v0-5). Ce problème survenait lorsque l’URL du site central n’était pas une URL racine (exemple : ça marchait avec « http://www.lesitecentral.com » mais pas avec « http://www.lesitecentral.com/testsitecentral »).

    Répondre à ce message

  • 1
    guillaume

    pour le site d’export, j’ai ça :

    Warning : Cannot set time limit in safe mode in /data/www/s/g/entest.ouvaton.org/html/sieps/scripts/commun.php on line 29

    Export
    (Site origine)

    Erreur : erreur appel web service : http://sgen-cfdt.net/sieps/scripts/sieps.php?prot=ws&req=getsitesimp

    Je m’en vais tester sur un site non ouvaton, mais ça m’arrangerai que ça marche aussi !

    autre question :peut-on mettre sieps ailleurs que dans le répertoire spip ?

    • la première erreur est liée à l’utilisation du safe mode chez Ouvaton. Il est peut-être possible d’initialiser la variable sur le temps d’exécution en fichier .htaccess à la racine de votre site (non testé) :

      $ cat .htaccess
      php_admin_value max_execution_time 10000

      (+ commenter la ligne set_time_limit de commun.php)

      Si cela ne fonctionne pas, vous pouvez simplement commenter la ligne ; le script fonctionnera mais vous ne pourrez pas faire d’exports importants.

    Répondre à ce message

  • 2
    haduong

    Quelques remarques à chaud pendant que nous sommes en train d’installer SIEPS :

    Sur la machine de production, on a un SPIP 1.6 avec des fichiers .php dans $SPIP/ecrire. Nous avons donc du changer les .php3 en .php dans sieps/script/spip.php.

    De plus il a fallu décommenter la gestion du include_path dans ce fichier.

    Mais ça marche toujours pas, il nous dit
    Erreur sur le site, Aucun squelette vide n’est disponible...

    Sur la machine de développement, 1.7.1 avec des .php3 dans spip/ecrire. J’arrive à exporter, et à importer semble t il. Remarque : ne pas utiliser de caractères accentués pour nommer les machines dans scripts/sites.php, il aime pas.

    La documentation devrait définir le concept de machine « centrale ». Je crois que c’est celle qui tient le fichier configuration de SIEPS.

    La note « La page d’import et celle d’export ont été conçues pour etre indépendantes l’une de l’autre. » est pas assez mise en valeur. Il faut comprendre qu’il s’agit de deux fonctions distinctes car l’export se fait vers un fichier xml. De même, l’import se fait à partir d’un fichier xml.

    Ce qui n’est pas clair : sur quelle machine sont logés les fichiers importés et exportés ?

    • haduong

      Je me réponds :
      On a upgradé la 1.6 en 1.7 sur le serveur de production. SIEPS marche à peu près
      -  il plante quand j’essaye d’exporter tout le site, peut être 17M c’est un peu gros
      -  il plante quand j’efface le script sites.php de la machine non centrale.

      Sinon je suis arrivé à peupler mon site de développement avec la structure et la moitié du contenu du site de prode. Même si SIEPS est pas encore tout blindé étanche, je suis donc content satisfait !!!

      Merci SIEPS

    • Si le script d’export ne marche pas au delà d’une certaine limite, il est toujours possible de faire l’export en plusieurs morceaux et cela devrait permettre de déplacer l’ensemble du site.

    Répondre à ce message

  • Bonjour,

    Quelqu’un pourrait-il m’envoyer des fichiers exemple d’import et export. Ou éventuellemnt m’indiquer ou je peux trouver une dtd ou un schema concernant l’xml de SIEPS

    D’avance merci

    Bob

    Répondre à ce message

  • 2

    Que ce soit avec la version 0.4 ou la 0.3, j’ai tjs les erreurs suivantes :
    Notice : Undefined variable : prot in c :\program files\easyphp1-7\www\spip-v1-7-1\sieps\scripts\sieps.php on line 50
    Notice : Undefined variable : op in c :\program files\easyphp1-7\www\spip-v1-7-1\sieps\scripts\sieps.php on line 55
    Pourquoi ?

    • J’ai trouvé : c’est à cause de la configuration de php.ini dans easyphp 1.7 qui met § register_globals à off.

      Plus d’explications sur le site asp-php.net.

    • Bonjour,

      Quelqu’un pourrait-il m’envoyer des fichiers exemple d’import et export.
      Ou éventuellemnt m’indiquer ou je peux trouver une dtd ou un schema concernant l’xml de SIEPS

      D’avance merci

      Bob

    Répondre à ce message

  • MoUcHoU

    Bonjour,

    est-il possible d’étendre les champs importés/exportés aux champs #EXTRAS dans le cas où on voudrait échanger les articles avec un site non SPIP ?

    Cecile

    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