Le filtre « J’ai de la chance ! » II

Voici une évolution du filtre j’ai de la chance pour spip qui, ma foi, rend la contrib pour le moins indispensable.

Je réexplique la fonctionnalité pour ceux qui n’auraient pas encore compris. C’est un filtre de contenu auquel correspond un nouveau raccourci : [!quelque chose]

Ex : quand j’écris [!spip] dans un article, il est transformé en un lien qui renvoie vers http://www.spip.net

Cà évite de taper l’url en entier chaque fois qu’on en a besoin.

Comment çà marche ? C’est tout simple, j’utilise la fonction « J’ai de la chance » de Google [1].

Ce qui fait que si j’écrit [!spip], cela produit l’url http://www.google.fr/search?hl=fr&q=spip&btnI= [2] qui redirige automatiquement vers le site de spip.

Quoi de neuf dans la version II ? Et bien maintenant plutôt que d’avoir http://www.google.fr/search?hl=fr&q=spip&btnI= dans votre article, maintenant vous avez la vraie url, soit http://www.spip.net.

Pour ce faire, j’ai utilisé la fonction de Metin Arman qui permet de renvoyer l’ultime redirection produite par une url.

Pas mal non ?

Mais on peut s’en servir pour d’autres utilisations. Exemple, un glossaire par mot clé synonyme, c’est à dire dont le mot clé n’est pas défini dans la base.

Si je créé ce raccourci wikipedia [?Appliquette] ( ex : Appliquette), Wikipedia renvoie sur le moteur de recherche car aucun lien n’a été défini pour ce mot. On voit d’ailleurs dans les résultats que le premier est le bon : applet.

On va modifier le code ci-dessous pour que le raccourci renvoie directement sur la page pour applet. C’est simple, il suffit d’ajouter dans la requête de google (le paramètre q de l’url) :

site:fr.wikipedia.org

Ce qui donne :

	return preg_replace('@\[\!(.+?)\]@e', "'<a class=\"spip_out\" href=\"'.getLocation('www.google.fr', '/search?hl=fr&q='.urlencode('\\1').'+site%3Afr.wikipedia.org&btnI=').'\">\\1</a>'", $texte);

On pourrait même utiliser plusieurs glossaires et renvoyer la définition de celui qui est le plus pertinent pour le mot clé !

Pour installer ce filtre dans votre site SPIP, éditez le ficher ecrire/mes_options.php3 et insérez les lignes suivantes :

/*
 *   +----------------------------------+
 *    Nom du Filtre :    J'ai de la chance II
 *   +----------------------------------+
 *    Date : mercredi 12 septembre 2006
 *    Auteur :  Balluche      + balluche PtJ free.fr                                      
 *   +-------------------------------------+
 *    Fonctions de ce filtre :
 *     Appelle la fonction "J'ai de la chance" de Google sur un mot clé
 *   +-------------------------------------+ 
 *  
 * Pour toute suggestion, remarque, proposition d'ajout
 * reportez-vous au forum de l'article :
 * http://balluche.free.fr/?992/Le-filtre-J-ai-de-la-chance-II
*/

//author : Metin Arman on 27/01/2002 for zend forums
//url : http://www.zend.com/phorum/read.php?num=3&id=14652&thread=14626
function getLocation($host, $path ='/')
{
	$http_ver = '1.0'; // version 1.0 ar 1.1
	$fp = fsockopen ($host, 80, $err_no, $err_str, 30);
	if (!$fp) {
		echo "ERROR: $err_str ($err_no)<br>\n";
	}
	else {
		if ($http_ver == '1.0') {
			fputs ($fp, "GET ".$path." HTTP/1.0\r\n\r\n");
		}
		else {
			fputs ($fp, "GET ".$path." HTTP/1.1\r\nHost:".$host."\r\n\r\n");
		}
		while (!feof ($fp)) {
			$line = fgets($fp, 4096);
			if (eregi("location:", $line)) {
				$headers_tmp = split(" ", $line, 2);
				$location = trim($headers_tmp[1]);
				break;
			}
			else {
				$location = 0;
			}
		}
		fclose ($fp);
	}
	return $location;
}

//balluche:24/02/2006:Appelle la fonction "J'ai de la chance" de Google sur un mot clé
//12/07/2006:j'utilise la fonction de Metin Arman pour récupérer l'url finale
function chance($texte)
{
	return preg_replace('@\[\!(.+?)\]@e', "'<a class=\"spip_out\" href=\"'.getLocation('www.google.fr', '/search?hl=fr&q='.urlencode('\\1').'&btnI=').'\">\\1</a>'", $texte);
}

//si cette fonction existe déjà, il faut insérer les lignes avant le return
function avant_propre($texte) {
   $texte = chance($texte);
   return $texte;
}

// FIN du Filtre chance
?>

Notes

[1Voir le bouton en page d’accueil

[2Cliquez pour voir.

Discussion

Aucune discussion

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