Another teacher’s website

  http://bit.ly/bKYR9y copy to clipboard + http://bit.ly/bKYR9y RSS

Ajouter des liens dans des tweets

Ajouter des liens dans des tweets

au moyen d’expressions régulières

par SteF, le 13 février 2010 (maj 11 juillet 2012)
4 commentaires

Donnez votre avis
12 votes

Sommaire

Cet article est une traduction de « Using Regular Expressions to add links to tweets » par Andrea Olivato.

Sur l’interface web de Twitter, et dans la plupart des clients récents, il est d’usage de voir des liens systématiquement associés aux @utilisateurs et aux #hashtags cités dans les statuts.

Lorsqu’on utilise l’API Twitter sur un site, un service ou une application, c’est à des tweets en texte brut qu’on a affaire. En utilisant des expressions régulières il est possible de recréer les liens facilement et rapidement, à peu près dans n’importe quel langage de programmation.

Le plus important étant l’expression régulière elle-même et non le langage utilisé, je montrerai seulement deux exemples, en utilisant PHP et PERL.

Contexte

Imaginons que nous avons interrogé l’API Twitter et que nous avons obtenu un tweet comme suit :

Pour bien faire il faut alors créer 3 liens :

  • @machin sera lié au profil Twitter de l’utilisateur machin
  • #tel_forum renverra à la page de recherche correspondante sur twitter
  • http://bit.ly/foo sera lié à son propre lien

Ce qu’il faut faire c’est donc remplacer chacune de ces chaînes par un lien HTML qui pointe vers la bonne URL. Sans oublier le fait qu’il sera possible d’avoir plus d’un lien de chaque type.

Les fonctions de remplacement en PHP et PERL

Comme dit plus haut, il nous faut remplacer du texte par des liens, voyons maintenant les fonctions que nous allons utiliser.

PHP

PHP permet aux développeurs d’utiliser les substitutions en regexp en utilisant la fonction native preg_replace, dont la syntaxe est explicitée ci-dessous.

Ici, search sera l’expression régulière que nous allons construire, replace le lien et source le tweet original.

PERL

Perl utilise une syntaxe différente, à l’aide de l’opérateur natif d’expression régulière ~

$tweet est à la fois la source et le retour, search notre expression régulière et replace notre lien.

Repérer les @utilisateurs

Tout d’abord, créons une expression régulière capable de reconnaître des noms d’utilisateurs cités dans un tweet.

Comme les noms d’utilisateurs ne permettent que des caractères alphanumériques et l’underscore, l’expression régulière n’extraira que ceux-ci, les adresses electroniques seront exclues (elles contiennent des points).

Détail de l’expression régulière

  • le @ initial est nécessaire pour repérer le début du nom d’utilisateur. Il est placé hors des parenthèses est n’est donc pas retourné par l’expression régulière, il ne faut donc pas oublier de l’ajouter dans le retour.
  • à l’intérieur des parenthèses () se trouve tout ce qui sera extrait
  • dans les crochets [] on trouve les caractères permis dans le nom d’utilisateur : a-z pour toute minuscule Latine, A-Z toute majuscule, 0-9 tous les chiffres et enfin _, l’underscore bien entendu.

Définir le retour approprié

Le lien à associer à tout @utilisateur est le profil de cet utilisateur. Comme notre expression régulière n’extraira qu’une seule valeur, nous utiliserons cette valeur pour construire le lien. Souvenez-vous que notre expression n’extrait que le nom d’utilisateur, sans l’arobase qu’il faut ajouter.

$1 est le nom d’utilisateur retourné par l’expression régulière, et rel="nofollow" est utilisé pour ne pas perturber le référencement.

Nous avons maintenant l’expression régulière et le lien de remplacement, il ne reste plus qu’à écrire le code.

PHP

PERL

Les deux codes ci-dessus donneront (avec echo ou print)

j'ai vu @machin qui parlait dans #tel_forum de son produit http://bit.ly/foo

Repérer les #hashtags

L’expression régulière nécessaire pour extraire les #hashtags est similaire à celle utilisée pour les @utilisateurs, si ce n’est que l’on remplacera le @ par un #. Le retour sera similaire également, mais au lieu du domaine twitter on utilisera le sous-domaine de recherche, comme suit :

%23 est la référence du dièse (hash) pour une URL, les autres paramètres sont expliqués plus haut.

Comme l’expression régulière ne devrait maintenant pas poser de problème, passons directement au code complet.

PHP

PERL

Le rendu des codes ci-dessus sera

j'ai vu @machin qui parlait dans #tel_forum de son produit http://bit.ly/foo

Repérer les liens

La dernière substitution que nous allons réaliser concerne les liens. Pour extraire les liens, nous allons rechercher tous les mots compris entre http et une espace, ou une parenthèse. Voici l’expression régulière

Détail de l’expression régulière

  • http est hors du masque, on ne cherche que les URLs dans le tweet.
  • ([s]?) permet de trouver http ou https, il n’extrait le s que s’il existe ?
  • :// est la suite de l’URL
  • ([^\ \)$]*) extrait tous les caractères « (*) » sauf « [^] » l’espace « \  », une parenthèse fermante « \) » ou la fin de la chaîne « $ »

Construire le retour souhaité

A première vue, il suffit d’ajouter une balise <a> avant le lien et la refermer immédiatement après. Toutefois, pour respecter le protocole utilisé (http ou https), on devra utiliser 2 variables dans le retour : $1 sera le « s » si présent, $2 sera l’URL.

Ci-dessous le retour complet

Et voici les deux exemples

PHP

PERL

Les deux codes ci-dessus produiront le rendu suivant

j'ai vu @machin qui parlait dans #tel_forum de son produit http://bit.ly/foo

Le code complet

A titre de référence uniquement, le code complet pour chaque langage

PHP

PERL

Retour en haut de la page

4/6 Sommaire de la rubrique Précédent Suivant

Votre avis sur cette page

12 votes

4 commentaires

Aller au dernier commentaire

  • laurenceb, le 15 février 2010 à 20:49

    Stef, même traduit ce truc est incompréhensible ! qu’est ce qu’on ne fait pas de nos jours ! on n’ arrete plus le progrès ! lol

  • SteF, le 15 février 2010 à 21:42

    @laurenceb : salut :) hé bin... va falloir réviser si tu veux décrocher ton b2i !

  • laurenceb, le 15 février 2010 à 23:36

    ah ça y est , j’ai compris ! C’est l’histoire de @machin qui ne suit pas (no follow) alors il préfère enfiler des perl ? hein ?

  • SteF, le 16 février 2010 à 00:13

    mdr, gzactement !! c’est ce qui arrive à force de prendre des produits dans des forums


Vos réactions

Laissez ci-dessous vos commentaires, précisions, remarques et questions. Vos contributions ne s'affichent publiquement qu'après validation, trop de spam sinon.

Commenter
  • (Pour créer des paragraphes, laissez simplement des lignes vides.)

    texte
Qui êtes-vous ?

Retour en haut de la page

Publier et partager sur le web

16 autres articles dans cette rubrique

Morceaux choisis


Contribuez à maintenir ces pages sur la toile.
Paiement sécurisé par Paypal ou CB

Frais d'hébergement depuis 2009 : 230 €
Total des dons depuis 2009 : 99 €

Another Teacher's Website est motorisé par SPIP.

Contribuez au contenu de ce site