Spip :: Filtre |tweet pour compte Twitter syndiqué

L’objectif de ce Hack est de transformer les liens, les @utilisateurs et les #hashtags présents dans un flux Twitter en liens cliquables.

Nous partirons du principe que vous avez syndiqué le flux RSS de votre compte Twitter via l’interface d’administration de Spip.

Nous allons créer un filtre que nous nommerons "tweet". Pour ce faire vous devrez éditer le fichier mes_fonctions.php se trouvant à la racine de votre dossier squelettes. Si ce fichier n’existe pas, créez-le. Ouvrez donc ce fichier et saisissez la fonction suivante :

/**
 * Filtre permettant de transformer les urls, @users et les #hashtags d'un flux twitter
 */

function tweet($txt)
{
        // on cherche les urls et on les remplace par des urls actives
        $url       = '/http([s]?):\/\/([^\ \)$]*)/';
        $url_link  = '<a href="http$1://$2" rel="nofollow">http$1://$2</a>';
        $txt       = preg_replace($url,$url_link,$txt);
       
        // on cherche les @users et on remplace par un lien vers le profil correspondant
        $user      = '/@([a-zA-Z0-9_]*)/';
        $user_link = '<a href="http://twitter.com/$1" rel="nofollow">@$1</a>';
        $txt       = preg_replace($user,$user_link,$txt);
       
        // on cherche les #hashtags et on les remplace par un lien de recherche vers ce hashtag
        $tag       = '/#([a-zA-Z0-9_]*)/';
        $tag_link  = '<a href="http://search.twitter.com/search?q=%23$1" title="$1" rel="nofollow">#$1</a>';
        $txt       = preg_replace($tag,$tag_link,$txt);
       
        return $txt;
}

Comme vous pouvez le constater ce filtre va rechercher les chaines représentants une url et les remplacer par un lien cliquable vers la dite url, puis il va rechercher les chaines représentants les noms d’utilisateurs de type @utilisateur puis les remplacer par un lien direct vers le profil de l’utilisateur en question et enfin pour finir il va transformer tous les hashtags trouvés en lien de recherche correspondante sur Twitter. Bref, une lame, trois effets !

Pour utiliser ce filtre rien de bien compliqué nous allons écrire une boucle :

<B_tweets>
   <h3>Tweets</h3>                     
   <ul>
        <BOUCLE_tweets(SYNDIC_ARTICLES){id_syndic=1}{par date}{inverse}{0,5}>
        <li>Le [(#DATE|affdate)]: [(#DESCRIPTIF|tweet)]</li>
        </BOUCLE_tweets>
   </ul>
</B_tweets>

Remplacez le id_syndic par celui correspondant au votre. Le filtre que nous venons de créer s’applique sur la balise #DESCRIPTIF

Vos commentaires

  • Le 27 juillet 2011 à 13:38, par Merlin Gravatar

    Merci Fabrice pour ton excellent travail !
    J’ai noté toutefois une problème avec les hashtags contenant des caractères accentués, le lien ne s’applique pas sur tout le mot, mais jusqu’à la lettre accentuée (par ex, avec #cinéma, #cin sera cliquable, éma ne le sera pas...).
    Si tu as une solution, je suis preneur.

  • Le 27 juillet 2011 à 13:59, par Fabrice Coutant Gravatar

    Salut Merlin,
    tu devrais pouvoir corriger l’expression régulière comme suivant pour prendre en compte les caractères accentués.

    $tag = ’/#([âêîôûàèìòùáéíóúäëïöüãõñça-zA-Z0-9_]*)/’ ;

     ;o)

  • Le 27 juillet 2011 à 14:21, par Merlin Gravatar

    Ça marche nickel, Fabrice ! Un grand grand MERCI :)
    Keep up the good work !

Répondre à cet article


Un message, un commentaire ?
  • (Pour créer des paragraphes, laissez simplement des lignes vides.)

Qui êtes-vous ? (optionnel)

Suivre les commentaires : RSS 2.0 | Atom

Menu

Derniers commentaires

Nuage