English version of Binariz

Automatiser sa présence sur les réseaux sociaux (suite): architecture technique

drupal reseaux sociaux

Cet article constitue le second volet d'un dossier intitulé "Automatiser sa présence sur les réseaux sociaux grâce à Drupal" et va détailler l'architecture technique mise en place pour le site Binariz.com.

Pour commencer, je tiens à préciser que celle-ci a été choisie pour sa rapidité de mise en oeuvre et pour la maturité des modules utilisés. J'évoquerai rapidement à la fin de cet article une solution alternative plus "industrialisable" permettant d'envisager la gestion multi-sites voire la création d'une plateforme saas (software as a service) autonome.

Champs auto-renseignés

Dans le précédent article, j'expliquais que j'avais créé deux champs auto-renseignés "Short URL" et "Hashtags" pour le type de contenu "Article". Pour remplir automatiquement ces champs, j'utilise le module Computed field qui permet de créer des champs dont le contenu est généré automatiquement lorsque l'article est sauvegardé (pour ce faire, on insère un bout de code php lors de la création du champ). J'utilise également le module Bit.ly for Drupal qui me permet de générer une URL courte pour chaque contenu créé (il faut créer un compte gratuit sur Bit.ly).

Le code à insérer pour ce champ est le suivant:

$entity_field[0]['value'] = bitly_user_shorten(url('node/'.$entity->nid, array('absolute' => TRUE)));

En fait, on utilise la fonction "bitly_user_shorten" définie dans le module "Bit.ly for Drupal".

Pour le champ "Hashtags", le code est un peu plus complexe. On récupère les termes de la taxonomie "Tags" et on crée une chaîne de hashtags "#tag1 #tag2 ..." qui sera ensuite ajoutée au tweet:

$terms = field_view_field('node', $entity, 'field_tags');
$tags_array = array();
$tags = '';
$accents = array('à','á','â','ã','ä','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','À','Á','Â','Ã','Ä','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ñ','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý',' ','-');
$noaccents = array('a','a','a','a','a','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','u','u','u','u','y','y','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N','O','O','O','O','O','U','U','U','U','Y','','');
if (!empty($terms['#items'])) {
  foreach ($terms['#items'] as $term) {
    $tags_array[] = '#'.strtolower(str_replace($accents, $noaccents, $term['taxonomy_term']->name));
  }
  $tags = implode(' ', $tags_array);
  $entity_field[0]['value'] = $tags;
}

Une fois ces champs paramétrés, on a tout ce qu'il faut pour créer le message qui sera envoyé sur les réseaux sociaux.

Partage sur les réseaux sociaux

Le socle de cette solution est le module Rules. C'est un module très puissant qui permet de mettre en place des processus complexes dans Drupal sans aucune programmation. Par analogie, on peut dire que c'est une sorte de service IFTTT pour Drupal. Il permet de créer des règles qui ressemblent un peu à ça:

SI <événement> ET <condition(s)> ALORS FAIRE <action(s)>

Dans notre cas, l'<événement> est:
- un article est sauvegardé

Les <condition(s)> sont:
- le statut du contenu est "publié"
- la case "Partage sur réseaux sociaux" est cochée

Les <action(s)> sont:
- composer le message: titre de l'article + hashtags + short URL
- poster sur Twitter
- poster sur Facebook
- poster sur LinkedIn
- décocher la case "Partage sur réseaux sociaux"

La dernière action a été ajoutée pour éviter de tweeter à nouveau l'article si vous le modifiez par la suite et que vous oubliez de décocher manuellement la case.

Vous êtes libre d'ajouter autant d'actions que vous souhaitez. Vous pouvez également utiliser "Rules Scheduler" pour planifier le partage dans 1 heure, 4 heures, 1 jour, 1 semaine, 1 mois, retweeter, reretweeter, etc...

Bref, vous contrôlez totalement la façon de partager vos contenus sur les réseaux sociaux et c'est ça qui est formidable !

Pour terminer, il vous reste à installer et configurer les modules suivants pour faire communiquer votre site avec vos différents comptes sur les réseaux sociaux:
- Twitter
- Facebook OAuth, Facebook rules et Facebook page rules
- LinkedIn

Astuce:
le module LinkedIn n'offre pas de bridge avec Rules. Il faut donc créer une action de type "Execute custom PHP code" et y insérer le code suivant:

<?php linkedin_status_set_status('!title !url', $node); ?> [node:field-hashtags]

où "linkedin_status_set_status" est la fonction qui envoie votre message sur LinkedIn dans le module LinkedIn.

Optimisation de la veille en ligne

Dans le précédent volet de ce dossier, j'évoquais l'utilisation d'un bookmarklet bien pratique pour partager votre veille en ligne. Le code est le suivant:

javascript:u=document.location.href;t=document.title;s=window.getSelection();void(window.open(%22http://monsite.com/node/add/tweet?edit[title]=%22+escape(t)+'&edit[field_url][und][0][value]='+escape(u),'_blank','width=1024,height=500,status=yes,resizable=yes,scrollbars=yes'));

Il faut bien entendu, mettre à jour ce code avec la bonne URL correspondant à la configuration de votre propre site.

De plus, pour que les champs de votre formulaire soient pré-remplis avec les données de la page à partager, vous devez également installer le module Prepopulate.

Et voilà ! Vous êtes fin prêt.

Evolutions possibles

Ce système est tellement facile d'utilisation qu'on se dit très vite qu'il faudrait l'étendre à tous ses sites (si on en a plusieurs). Dans ce cas, l'idée d'une installation Drupal distincte devient une évidence. Il suffit que chaque site mette à disposition un flux RSS des contenus à partager. Un petit module Feeds pour importer ces flux dans l'installation Drupal dédiée et le tour est joué. Les sites sources peuvent être en Drupal, Wordpress, Prestashop, ou autre. A partir du moment où ils peuvent fournir un flux RSS dédié à cette tâche, ils peuvent alors communiquer avec la plateforme.

Sauf que.. ce n'est pas si simple. Si vous avez un compte Twitter, Facebook ou LinkedIn différent pour chaque site, cela fait beaucoup de comptes à gérer et les modules cités plus haut (Facebook OAuth et LinkedIn notamment) ne permettent d'associer qu'un seul compte à un utilisateur Drupal. De plus, comme mentionné précédemment, le module LinkedIn ne communique pas en standard avec Rules et il faut donc ruser un peu. Cela reste donc une configuration qui, bien qu'efficace pour un site unique, atteint vite ses limites pour la gestion multi-sites et multi-comptes. Par ailleurs, que se passe-t-il si vous souhaitez intégrer d'autres réseaux sociaux (Pinterest, Instagram, ...) ?

Et bien la solution s'appelle Fluxkraft.

Cette suite de modules permet d'automatiser son worflow de gestion des réseaux sociaux et s'intègre avec Rules. Elle se base sur Flux Services Integration qui propose une API unifiée pour développer des services de communication avec les différents réseaux sociaux du marché.
Cette solution est extrèmement prométeuse mais a un petit inconvénient : elle n'en est qu'à ses balbutiements. Ces modules sont en version beta et les stats d'utilisation sont ...comment dire... confidentielles (moins de 10 sites répertoriés ayant installé Flux Services Integration). Autant dire que vous ne trouverez pas beaucoup d'aide dans la communauté si vous rencontrez des problèmes.

Il est donc préférable d'attendre un peu ... ou au contraire de contribuer activement au développement de ces modules pour accélérer les choses. À vous de voir.