Faire un plugin pour StatusNet afin d’appeler mon réducteur d’URL

closeCet article a été publié il y a 13 ans 11 mois 13 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Je ne suis pas un grand développeur. Du moins, je ne le suis plus depuis très longtemps. Il fut une époque ou j’étais pas mal doué en Bordland Delphi. J’écrivais alors des programmes propriétaires.

Mais j’ai raté le coche du développement web. Je ne connais pas grand-chose au HTML, ni au CSS et très peu au PHP. Mais disons qu’avec le temps j’ai gardé la capacité de comprendre le code et de le modifier ce qui me permet de satisfaire mon penchant pour le bricolage.

Dans cet article, je vais vous parler des plugins de StatusNet. Pour ceux qui ne sauraient toujours pas ce qu’est StatusNet, il s’agit du logiciel de microblogging qui est utilisé pour le service web Identi.ca.

Comme beaucoup de logiciels web il est développé en PHP et dispose de la possibilité d’être étendu par un mécanisme de plugin. Je m’y suis intéressé car je souhaitais pouvoir utiliser mon réducteur d’URL personnel basé sur BilboLinks. Ce dernier dispose d’une API permettant de générer des url raccourcies. Je procède ainsi pour me garantir de la disparition d’un de ses services comme on l’a déjà vu dans le passé avec tr.im.

Pour l’instant lorsque je souhaite envoyer un micro-message depuis mon instance StatusNet, il me faut procéder en deux étapes : réduire l’url puis la copier coller dans le message. Etant de nature fainéante cela m’ennuyait. J’ai alors regardé du côté des plugins installés et notamment ceux destinés à la réduction d’URL.

La création d’un plugin est décrite sur le Wiki de StatusNet. La documentation contient les bases et grands principes :

  • Chaque plugin est déclaré au travers d’une classe
  • Cette classe peut-être dérivée d’un autre plugin.
  • Il faut ensuite implémenter une ou plusieurs méthodes afin de définir les actions réalisées par le plugin

Encore une fois je ne rentre pas trop dans les détails ici. Le wiki satisfera davantage les développeurs qui passent pat ici.

Dans mon cas, je me suis intéressé au mécanisme qui permet à StatusNet de raccourcir une URL lorsque l’on écrit un message. Une chose qu’il faut savoir, c’est que ce mécanisme ne s’active que si votre message (avec l’URL non réduite) dépasse la valeur maximale autorisée par défaut de 140 caractères. Valeur que vous pouvez augmenter dans l’interface de configuration.

StatusNet s’appuie sur un premier plugin UrlShortenerPlugin.php qui déclare une classe UrlShortenerPlugin elle même dérivée de la classe Plugin.

https://philippe.scoffoni.net/yacy-un-moteur-de-recherche-peer-to-peer-sous-licence-libre-pour-remplacer-google/

abstract class UrlShortenerPlugin extends Plugin

Ensuite pour chaque service a été développée une autre classe implémentant le comportement spécifique à celui-ci.Il me fallait donc créer une classe spécifique à l’appel de mon réducteur. Ce ne fut guère difficile. Le tout fut de bien respecter les conventions de nommage des fichiers et de la classe.

J’ai donc créé un nouveau répertoire pour contenir le source PHP de ma classe. Je l’ai appelé BypscUrl. Dans ce répertoire j’ai créé un fichier BypscUrlPlugin.php. C’est lui qui contiendra le code de ma classe que voici :


if (!defined('STATUSNET')) {
exit(1);
}

require_once INSTALLDIR.'/plugins/UrlShortener/UrlShortenerPlugin.php';

class BypscUrlPlugin extends UrlShortenerPlugin
{
public $serviceUrl;

function onInitializePlugin(){
parent::onInitializePlugin();
if(!isset($this->serviceUrl)){
throw new Exception("must specify a serviceUrl");
}
}

protected function shorten($url) {
return $this->http_get(sprintf($this->serviceUrl,urlencode($url)));
}

function onPluginVersion(&$versions)
{
$versions[] = array('name' => sprintf('SimpleUrl (%s)', $this->shortenerName),
'version' => STATUSNET_VERSION,
'author' => 'Philippe Scoffoni',
'homepage' => 'http://status.net/wiki/Plugin:SimpleUrl',
'rawdescription' =>
sprintf(_m('Uses %1$s URL-shortener service.'),
$this->shortenerName));

return true;
}
}
<p style="text-align: justify;">

Il reste ensuite à déclarer ce plugin dans le fichier de configuration de StatusNet : config.php de la façon suivante :


addPlugin('BypscUrl',
array('shortenerName'=>'bypsc.fr','freeService'=>true,'serviceUrl'=>'http://bypsc.fr/api.php?longurl=%1$s')
);

Les paramètres définissent le nom sous lequel apparaîtra mon service de réduction d’URL dans l’interface d’administration de StatusNet, s’il s’agit d’un service libe et le plus important l’url de l’API à appeler. La position de l’URL à réduire est indiquée par  %1$s.

Reste donc à sélectionner ce nouveau service dans l’interface d’administration et c’est fini.

statusnet reduction url

Si l’appel à mon réducteur d’URL se fait bien lorsque je passe par l’interface web, il n’en va pas de même lorsque je publie depuis Choqok. C’est le service ur1.ca qui est appelé. Pourtant Choqok est configuré pour ne pas utiliser de réducteur d’URL. J’obtiens le même résultat si j’envoie un message par l’API à l’aide de la commande curl ce qui élimine à priori tout soupçon sur Choqok Y’aurait-il quelque chose « en dur » dans StatusNet ?

La question a été posée sur le forum de support officiel de StatusNet et le forum de la communauté française. Une affaire à suivre…

Il est possible qu’il y ait d’autres façon d’obtenir ce même résultat ou d’améliorer ce que j’ai fait. Les commentaires vous sont ouverts.

Bon week-en à toutes et à tous 🙂

Philippe Scoffoni

Je barbote dans la mare informatique depuis 30 ans (premier ordinateur à 16 ans, un ORIC ATMOS) et je travaille à mon compte au travers de ma société Open-DSI. J'accompagne les associations, TPE et PME dans leurs choix et dans la mise en oeuvre se solutions informatiques libres.

1 réponse

  1. Flink dit :

    nickel ton petit article, je me demandais justement comment utiliser mon réducteur d’url que j’ai mis en place aujourd’hui avec status.net 🙂
    J’ai testé et ça marche bien !

    Par contre je me demandais au niveau du plugin si ça serait pas mieux que les infos de configuration soient directement intégrées dedans plutôt que passées en paramètre. Mais bon c’est pas bien important 😉