Spip2Spip

Version Plugin

Spip2spip permet de synchroniser le contenu de plusieurs sites SPIP entre eux en étendant le principe de la syndication thématique. Les articles d’un SPIP sont recopiés d’un site à l’autre en conservant leur formatage original.

Fonctionnalités

Spip2spip permet à des sites Spip qui ont des thématiques en commun de s’échanger directement les articles au format Spip.

À la différence d’une simple syndication, l’article va être importé en tant qu’article dans la rubrique du site destination. Cet article importé sera donc éditable et conservera ses raccourcis et le maximum d’informations (auteurs, pièces jointes, mots-clés ....)

Téléchargement et installation

  • Téléchargez le plugin
  • Activez le plugin dans le menu habituel.
    L’activation du plugin crée automatiquement le groupe de mots-clés -spip2spip- qu’il faudra compléter pour tagguer les thématiques à échanger.
  • Renseignez les sites avec lesquels vous voulez importer des informations, en les ajoutant dans le menu édition > spip2spip

Paramétrage du plugin

Dans le menu de configuration, vous pouvez définir vos options d’import :

  • Quel est le statut des articles à importer : proposé ou publié ?
  • Faut-il citer l’adresse d’où provient l’article ?
  • Faut-il alerter un admin par email à chaque syndication ?
  • Faut-il importer / exporter les mots-clés des articles et de ses événements ?
  • Faut-il créer les mots-clés dans un groupé donné ou ré-créer les groupes de mots-clés du site d’origine ?

Via config/mes_options.php il est possible de :

  • Bloquer la récupération du contenu (si la seule information qui nous intéresse, c’est le titre et l’origine du contenu)
  • Bloquer la récupération des documents joints
define('_SPIP2SPIP_RECUPERER_CONTENU', false);
define('_SPIP2SPIP_RECUPERER_DOC', false);

Principe général

spip2spip est une syndication qui est basée sur un groupe de mots-clés commun appelé - spip2spip -

Chaque mot-clé de ce groupe sert à désigner une thématique donnée :

  • créer un mot clé dans ce groupe permet de créer un canal thématique
  • attribuer ce mot-clé à vos articles permet de les diffuser aux autres sites
  • attribuer ce mot-clé à une rubrique permet d’y importer les articles des autres sites

Les sites recopient les articles entre eux grâce au cron :

  • le formatage des articles spip des articles est conservé (raccourcis typographiques, saut à la ligne, insertion des images et documents ....)
  • citation automatique de la source (url de l’article d’origine)
  • reprise de la licence (voir contribution licence)
  • création de l’auteur si celui n’est pas présent le site SPIP cible.
  • les images et documents sont convertis en documents distants
  • les événements liés à l’article si vous utilisez le plugin Agenda 2.0 et ultérieur
  • logo de l’article version 2.3
  • langues, liens de traduction et balises <multi> version 2.3
  • mots-clés de l’article et de ses événements version 2.3

Diffuser de l’information

  1. Allez dans le groupe de mots-clés -spip2spip-
  2. Dans ce groupe, créez un mot-clé par chaîne thématique que vous voulez diffuser : sport, informatique, œnologie, ...
  3. Attribuez ces mots-clés aux articles concernés.

Cela permet à votre site de proposer ses articles à la syndication spip2spip via l’adresse réservée :
Flux simple
http://monsite.org/spip.php?page=backend-spip2spip

Flux complet avec les événements
http://monsite.org/spip.php?page=backend-spip2spip-agenda

Flux de tous les articles d’un auteur
http://monsite.org/spip.php?page=backend-spip2spip-auteur&id_auteur=XX

S’abonner à une chaîne d’information

Je vais maintenant m’abonner à des sites amis pour recopier automatiquement les articles qu’ils proposent.

étape 1 : inscrire les sites amis
Je vais inscrire le flux spip2spip d’un site ami :

Exemple : Je m’abonne au flux spip2spip de
@-brest

étape 2 : s’abonner à un canal thématique
Je me suis abonné à un site, il faut maintenant choisir quel canal thématique m’intéresse.

J’observe donc le flux du site ami :

Exemple : Ce flux XML propose plusieurs « chaînes thématiques » :

  • a-brest-B pour les articles @-brest concernant la bretagne
  • a-brest-F pour les articles @-brest concernant la technologie
  • ...

Je décide de m’abonner à la « chaîne thématique »a-brest-B.

  1. Je crée dans la mot-clé a-brest-B dans le groupe de mots-clés -spip2spip-
  2. J’attribue ce mot-clé à la rubrique dans lequel je veux que les articles distants soient recopiés.

La synchronisation

La syndication se fait automatiquement grâce au cron.
Vous pouvez aussi forcer la syndication manuellement depuis
l’interface privée.

Le plugin examine alors tous les articles proposés et leur chaîne thématique. Si un article correspond à une chaine auquel vous vous êtes abonné, il importe l’article dans la rubrique sur lequel vous avez placé le mot-clé de cette chaîne thématique.

Origine de l’importation stockée par le plugin

2 champs supplémentaires dans la tables spip_articles permettent d’avoir accès à la source distante d’origine de l’article importé [1].

Sont donc stockés :

  • #S2S_URL_SITE_DISTANT : l’URL du site distant (en principe sans / final)
  • #S2S_ID_ARTICLE_DISTANT : l’identifiant de l’article sur le site distant

Vous pouvez par exemple :

  • Faire un lien sur l’article d’origine :
    <a href="#S2S_URL_SITE_DISTANT/?article#S2S_ID_ARTICLE_DISTANT">#TITRE</a>
  • Appeler un squelette sur le site d’origine pour incorporer son résultat à votre page :
    [(#VAL{#S2S_URL_SITE_DISTANT?page=inc_pour_inclusion_distante&id_article=#S2S_ID_ARTICLE_DISTANT}|recuperer_url_cache|table_valeur{page})]

Astuces

Si vous voulez masquer l’affichage du groupe de mots-clés -spip2spip-, vous pouvez utiliser la boucle
<BOUCLE_listemot(MOTS){id_article}{type!==^[-]}>....</BOUCLE_listemot>

Alternative pour masquer le groupe -spip2spip : utiliser le critère doublons

<BOUCLE_mot_cache(MOTS){type=- spip2spip -}{doublons spip2spip}> </BOUCLE_mot_cache>
<BOUCLE_listemot(MOTS){id_article}{doublons spip2spip}>....</BOUCLE_listemot>

Astuces (bis)

Spip2spip version 2.3 ajoute 2 champs supplémentaires à la table spip_articles qui peuvent être exploités éventuellement dans un squelette dans une boucle ARTICLES

  • #S2S_URL l’adresse de l’article d’origine
  • #S2S_URL_TRAD l’adresse de la traduction de l’article d’origine

Astuces (ter)

À l’import, Spip2spip adopte le comportement par défaut de SPIP lors de l’import de données externes : le filtre textebrut s’applique sur tous les champs pour empêcher les injections de HTML, Javascript, XSS ....
Si vous désirez quand même (à vos risques et périls), importer du HTML brut, ajouter dans votre fichier config/mes_options.php

define('_SPIP2SPIP_IMPORT_HTML', true);

Évolutions

version 4.x Compatibilité SPIP 4
version 3.4 Mars 2018 Ajout d’un flux pour exporter tous les articles d’un auteur
version 3.3 Mai 2017 Ajout des champs pour stocker l’origine et de la possibilité de bloquer la récupération du contenu et des documents
version 3.2 Juin 2016 Version SPIP 3.1
Correction de bugs sur l’import de documents et logos
Flux version 1.9 permettant l’import d’auteurs avec le nom comporte une virgule comme SMITH, Robert
version 3 Février 2013 Version SPIP 3
version 2.3 Juillet 2010 Gestion des liens de traduction
Ajout des champs s2s_url, s2s_url_trad à la table spip_articles
support des balises <multi>
version 2.2 Juillet 2010 Import/export des mots-clés des articles et événements
flux version 1.8
version 2.1 Mai 2009 Meilleure gestion des retours à la ligne (flux version 1.7)
version 2.0 Janvier 2009 Sortie de la version compatible SPIP 2
Abandon du mode synchronisation
version 1.7 Mai 2008 Intégration de cfg
version 1.6 Mai 2008 Intégration des objets événements (plugin agenda)
version 1.5 Février 2008 Sortie la version plugin

Alternative

Notes

[1Notez bien que cette source est conservée même à travers des importations en cascade ; par exemple un site A qui importe depuis B qui lui-même importe depuis C : le site A a bien l’information que tel article vient du site C. Cas d’usage : centraliser des articles d’une galaxie de sites pour qu’ensuite des membres de cette galaxie récupèrent certains des articles sélectionnés

Discussion

73 discussions

  • Bonjour,

    J’ai installer le plugin sur 2 sites (spip 3.0.5) en suivants la procédure. Sur le site importateur, lorsque j’inscrit l’adresse du flux du site exportateur, j’ai le message suivant :
    Rapport de syndication :
    Erreur : Impossible de charger le flux

    Il me semble que le flux est pourtant bon : http://www.radio-calade.fr/site/spip.php?page=backend-spip2spip

    Avez vous une idée de ce que j’ai pu mal faire ?

    Répondre à ce message

  • 5

    Bonjour à tous,

    Une MàJ pour SPIP 3.0 est-elle prévue svp ?

    a+

    • Sans doute en 2013 si je trouve le temps ou on me le commande expressément

      Pour infos, je viens de migrer Partageur qui partage les fonctions de parsing de SPIP2SPIP

    • Ah ! Merci erational.

      Par contre, je ne comprends pas bien la différence entre spip2spip et Partageur.

    • Au temps pour moi. Il suffisait d’ouvrir les yeux :-)

      Contrairement aux plugins SPIP2SPIP, Flux RSS en articles le principe d’import n’est pas basé sur la syndication automatique mais sur une sélection manuelle. Une fois installé, le plugin permet de « piocher » dans les articles des bases documentaires que l’on a préalablement inscrites.

    • SPIP2SPIP est maintenant disponible pour SPIP 3.
      L’interface a été entièrement reprise côté backoffice pour plus de performance et d’ergonomie.

      Enjoy ^_^

    • Génial !!

      Merci beaucoup :-)

    Répondre à ce message

  • 4

    peut-être un élément de réponse aux questions précédentes sur les articles syndiqués qui n’apparaissent pas...

    j’utilisais spip2spip depuis un moment, or depuis... un an ? ca ne fonctionne plus. les articles sont bien importés dans le site de destination, mais n’apparaissent pas sur le site.

    j’ai pris le temps (au bout d’un certain temps !) de regarder dans la base de donnée, et je me suis aperçu que c’était le champ « secteur » qui était resté à 0.... résultat, dès que le squelette met un critère sur le secteur, les articles syndiqués ne sont pas pris dans les boucles articles...
    j’ai corrigé à la main dans la base de donnée, et l’article apparait...

    je n’ai par contre par cherché dans le code pourquoi ce champ n’était pas mis à jour...
    je ne sais pas si ca dépend d’une configuration particulière..

    en espérant que ce soit corrigé dans une prochaine version...bon courage !

    • je me suis lancé dans la lecture du code, ne voyant pas venir de réaction...
      si je comprends bien la fonction qui récupère l’id de secteur et que je copie dessous, prend la rubrique parent de la rubrique de l’article comme secteur...

      ce qui me semble incorrect... si une rubrique a comme parent 0, elle est son propre secteur... et de toute façon, il y a déja un champ « secteur » dans la table rubriques... Pourquoi ne pas le reprendre ?

      version actuelle de la fonction....

      	// recupère id du secteur
      342	function spip2spip_get_id_secteur($id_rubrique) { 
      343	   if ($row = sql_fetsel("id_parent","spip_rubriques","id_rubrique=$id_rubrique")) 
      344	               return $row['id_parent']; 
      345	   return 0; 
      346	}

      version suggérée... sachant que je ne vois pas de cas ou le fecth renverrait une valeur nulle sur idsecteur...

      	// recupère id du secteur
      342	function spip2spip_get_id_secteur($id_rubrique) { 
      343	   if ($row = sql_fetsel("id_secteur","spip_rubriques","id_rubrique=$id_rubrique")) 
      344	               return $row['id_secteur']; 
      345	   return 0; 
      346	}

      je n’ose me lancer dans la modif en direct... peut-être une confirmation d’un développeur spip ?

      pam

    • oui cela me semble correct, n’hésite pas à commiter. merci.

    • je n’utilise pas de svn ne faisant pas de développement,
      et j’avoue que je n’ai pas trouvé comment commiter..simplement....

      donc je n’ai fait la modif que sur mon serveur...

      le fichier concerné est spiptospip_fonctions.php à la racine du plugin...

      pam

    • voilà c’est comité 66205. Merci

    Répondre à ce message

  • Personne n’a rencontré de problème avec le plugin « speed syndic » ??
    Merci pour vos retours, le cas échéant.
    Spipement,
    Bitin.

    Répondre à ce message

  • 1

    Bonjour,
    J’ai également de mon côté quelques problèmes. J’ai suivi à la lettre le guide ci-dessus et le site qui importe visualise bien les articles à importer.
    Ne voyant rien venir automatiquement je suis allé voir le lien « syndiquer manuellement » de spip2spip (dans le site qui importe).
    Il m’indique bien l’article à importer, mais le lien en dessous « Consulter l’article importé » a cette forme :

    http://www.monsitequiimporte.com/ecrire/?exec=articles&id_article=

    Spip2spip n’a apparemment généré aucun article (rien après le « = »). Il semble bloquer à ce stade, non ?
    Merci pour votre aide

    • Rebonjour,

      Petit ajout, je reçois parfaitement par mail (en 36000 exemplaires) le message automatique qui m’indique la syndication...

      Contenu du mail

      Titre de mon article spip
      Consulter l'article importé:
      http://www.marseille-premium.com/ecrire/?exec=articles&id_article= 

      Par contre, toujours pas de lien complet et d’articles créés sur mon spip qui importe...

      Merci pour votre aide

    Répondre à ce message

  • 2
    Joseph Tux

    Bonjour,

    j’envisage de fermer un site ( l’ancien site ) et j’aimerais auparavant l’insérer dans mon autre site ( nouveau site ), comme archive, par exemple dans une rubrique dédiée du nouveau site.

    Ce site est assez gros, et je n’ imagine pas marquer chaque rubrique et chaque article 1 par 1

    Est-ce que ce plugin , éventuellement modifié, pourrait réaliser cette fusion ?

    ( Je précise que, utilisateur satisfait de SPIP, je suis néanmoins incompétent pour modifier moi même sérieusement un plugin )

    Peut-être une autre méthode en jouant directement avec la base de donnée ( mais je suis tout aussi incompétent avec MySQL )

    Je n’ai trouvé aucune contribution ni même un témoignage d’une telle manoeuvre.

    La fermeture de l’ancien site est programmée pour Mars 2012.

    • Bonjour joseph,

      Dans ton cas, il me semble qu’il est inutile d’utiliser spip2spip (c’est faisable, il faudrait juste modifier la page backend-spip2spip en indiquant un age très vieux) mais utiliser tout simplement la fonction native de Spip qui permet de fusionner 2 deux sites :

      Voici la méthode

      1. Sauvegarder au préalable chacun des sites pour être sur de pour revenir en arrière en cas de problème
      2. Sur l’ancien site, créer une rubrique archives et y déplacer toute l’arborescence.
      3. Exporter l’ancien site (en créant un dump) et en sauvegardant le dossier IMG (on peut affiner l’export en sélectionnant uniquement les tables nécessaires)
      4. Sur le nouveau site, importer ce dump en prenant l’option de fusionner les 2 bases (au lieu de l’option par défaut qui est en général de l’écraser).

      Bonne chance !

    • Joseph Tux

      Limpide !
      Merci erational.

    Répondre à ce message

  • 2

    Salut,

    Depuis quelques mois, SPIP2SPIP ne fonctionne étrangement plus sur un spip à jour (plugins également).

    Le problème :
    -  côté émetteur tout semble ok : le backend XML est bien rempli avec les articles qui doivent être partagés.
    -  côté récepteur, échec : la syndication semble bien se faire périodiquement, mais ne trouve rien. Si je clique sur « syndiquer manuellement », rien non plus. Et si je clique enfin sur « flux », pour vérifier que mon site récepteur regarde bien le bon backend, je visualise bien le backend XML distant rempli avec les articles à importer...

    D’où peut venir ce comportement ? Pourquoi le site récepteur ne veut pas importer les articles présents dans le backend ?
    Ça m’ennuie depuis un moment et je ne trouve pas.

    Merci,
    Med.

    • bonjour,

      je viens de vérifier le fonctionnement de SPIP2SPIP avec les versions à jour du plugin et SPIP 2.1.10.

      cela fonctionnement parfaitement !

      par exemple : avec ce flux et le mot-clé SPIP2SPIP a-brest-B que j’ai attribué à une rubrique.

      Vérifier peut-être que la mise à jour de base s’est bien faite (présence des champs s2s_url, s2s_url_trad sur la table spip_articles) ou que vos articles n’ont pas déjà été importés ou refusés.

    • Merci de votre réponse !

      Après une (longue) investigation, il s’avère que le problème venait de la connectivité entre les deux plate-formes (chez un même hébergeur, mais sur des machines différentes, et entre lesquelles les règles de communication internes étaient rompues).

      Bref, tout est rentré dans l’ordre, et spip2spip fonctionne très bien !

    Répondre à ce message

  • question sur le résultat de la syndication

    un article syndiqué a-t-il qqchose de particulier qui ferait qu’il n e serait pas pris dans une boucle article ?

    je constate que les articles qui sont syndiqués n’apparaissent pas dans la partie ’article récent" de ma page d’accueil... je ne vois pas de raison dans la boucle article, tout à fait banale, sauf que les articles syndiqués n’y sont pas...

    la boucle concernée a les filtres suivants

    merci d’avance si ca dit qqchose ...

    pam

    Répondre à ce message

  • Loic972

    Pour ceux qui ont tout configurer correctement sur les deux sites, ajouter les mots clés aux articles et à la rubrique qui doit recevoir les articles et que rien ne se passe une piste simple :

    Dans le fichier backend-spip2spip.html, dans la boucle qui récupère les derniers articles à exporter, <BOUCLE_synchro_article(ARTICLES)type_mot=- spip2spip -age<7>
    Le filtre « age<7 » ne récupère que les articles publié dans les 7 derniers jours si vos articles sont plus vieux ils ne sont pas exporté !

    Voila si ça peut vous aider retirer age<7 ou augmenter la valeur pour exporter des articles plus vieux

    Répondre à ce message

  • 5

    j’ai bien suivi la procédure de configuration :
    -  un mot clé dans le site source, associé aux articles à mutualiser..
    -  le même mot clé dans la rubrique concernée du site de destination
    -  et... ca ne fonctionne pas.. ?

    Faut-il faire qqchose de particulier pour que ce cron se lance ?

    En tout cas, j’ai attendu en me disant que c’était périodire, mais je ne vois rien ..
    -  si je clique sur « syndiquer manuellement », il n’y a rien..
    -  si je regarde le « flux », je vois comme dans l’exemple...

    <!-- backend utilisant SPIP2SPIP -->
    <spip2spip version="1.6">
    <title>BLog Vénissian de Pierre-Alain Millet</title>
    <link>http://pam.venissieux.org/</link>
    <!-- thématiques proposées -->
    <thema>pam-visites</thema>
    <thema>pam-interventions</thema>
    <!-- derniers articles à synchroniser -->
    </spip2spip>

    merci de toute piste...

    Ma config est un peu particulière, car c’est entre deux sites mutualisés.. est-ce que ca change qqchose dans le cron ?

    • bonjour

      l’hébergement mutualisé ne change rien et la mutualisation non plus. SPIP2SPIP devrait fonctionner
      votre flux spip2spip http://pam.venissieux.org/spip.php?... semble bon
      Avez vous bien inscrit l’adresse du flux sur l’autre site ?

      pour tester techniquement, essayer de syndiquer le site internet a-brest

      1. inscrivez @-brest avec le flux : http://www.a-brest.net/spip.php?pag...
      2. créer le mot-clé a-brest-B dans le groupe -spip2spip-
      3. ajouter ce mot a-brest-B sur une rubrique de votre site

      testez en syndiquant manuellement (pour voir le message de log). Normallement vous devriez importer des articles de @-brest

      tenez moi au courant

    • merci de la réponse

      après quelques tests complémentaires, ca fonctionne dans un sens mais pas dans l’autre

      je m’explique, j’ai un site de « groupe » et un site « perso ».
      -  je mets dans le site « perso » des notes de visites de quartier, que je veux renvoyer dans une rubrique du site « groupe »
      -  et dans le site « groupe », je mets des interventions publiques, que je veux renvoyer dans une rubrique du site « perso »...

      bon, vu de loin, on peut se demander pourquoi.... Mais c’est tout l’art du je et du nous...

      or, ce que je mets dans le site « perso » apparait bien dans le site « groupe » avec un mot-clef adapté. Lors de mon premier message, j’avais tout simplement oublié de publier ces articles car le paramètre spip2spip était à « proposé »

      mais par contre, bien qu’ayant revérifié plusieurs fois, dans l’autre sens (avec un autre mot-cle), ca ne marche pas et je ne vois rien dans le sens « groupe » vers « perso ».

      dans le site « perso », j’ai ajouté a-Brest-B ce matin 10 mai et ca marche

      j’ai revérifié l’URL de backend http://gec.venissieux.org/spip.php?page=backend-spip2spip ...

      le backend spip lui même fonctionne bien...

      une idée ?

      pam

    • Même problème avec un « émetteur » avec SPIP 2.0.8.

      Le « thema » apparait bien, mais il n’y a pas d’article.

       ???

    • Bonjour, tout d’abord, excellent plugin et merci !

      Le flux de Pamillet est vide d’article, alors que le flux de a-Brest est plein. C’est donc le site émetteur qui a un problème.

      J’ai eu le même problème (avec un site sous 1.9.2) : apparemment, à l’installation du plugin, celui ci ne syndique pas les articles postés précédemment auxquels on aurait ajouté le mot-clé choisi. Il faut pour cela dépublier l’article (le passer en « proposer à l’évaluation ») puis le republier (« publier en ligne »), et hop il apparait dans le flux.

      Enfin en tout cas chez moi ça marche.

    • Oui +++++
      Effectivement, c’est fondamental (mais pas écrit dans le tutoriel)

      Il faut pour cela dépublier l’article (le passer en « proposer à l’évaluation ») puis le republier (« publier en ligne »), et hop il apparait dans le flux.

      Merci
      Excellent plugin ;-)

    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