Rendre l’URL de recherche de Google plus lisible

Matt Cutts, responsable de la webspam team de google à posté sur son twitter Une méthode pour rendre les URL de recherche de Google plus jolies.

Lorsque vous faites une recherche, vous tombez facilement sur une URL du type http://www.google.com/search?source=ig&hl=en&rlz=&q=google&aq=f&oq=&aqi=g-p3g7 qui n’est au final pas très lisible. Cette méthode permet de transformer cette URL en une plus compréhensible pour l’humain et aillant les mêmes résultats : http://www.google.com/search?q=google.

Malheureusement, dans l’exemple que je donne, cette méthode est buggée et ne retourne pas un bon résultat. J’ai donc corrigé ce bookmarklet afin d’avoir un résultat correct en toute situation. Le bookmarklet est disponible ici : Trim Google Result.

Pour les personnes qui voudraient éventuellement analyser le code, le voici en version non minimifiée :

javascript:(function(){
	var windowLocationHref = window.location.href;
	var domainName = window.location.hostname;
	var myPathname = window.location.pathname;
	var searchArray = windowLocationHref.split('&');
	var mySearch = '';
	for(myElement in searchArray){
		if(searchArray[myElement].match(/^q=/)){
			mySearch = searchArray[myElement];
		}
	}
	var searchOnly = domainName + myPathname + '?' + mySearch;
	self.location.href='http://' + searchOnly;
})();
Publicités

VoilaBot attaque les sites !

Depuis quelques temps, le robot de Voila, VoilaBot Beta 1.2, se met à crawler les sites Internet.

Normal me direz-vous… Cependant, la fréquence de crawl est bien trop élevée, on a ainsi une nouvelle connexion au serveur toutes les secondes.
Le nombre de connexions devient vite excessif, et le serveur surchargé prend trop de temps à répondre, voire même ne répond plus.

Les IP concernées par le VoilaBot sont les suivantes :

193.252.149.15
193.252.149.16
81.52.143.15
81.52.143.16

Ces IP sont associées respectivement au noms de domaine suivants : natcrawlbloc03.net.s1.fti.net, natcrawlbloc01.net.s1.fti.net, natcrawlbloc04.net.s1.fti.net, natcrawlbloc02.net.s1.fti.net

Les autres adresses de VoilaBot semblent être inactives depuis un moment.

La première solution censée bloquer les bot des moteurs de recherche est de créer un fichier robots.txt, et d’interdire l’accès au site pour certains moteur. Il faut donc uploader un fichier nommé robots.txt à la racine du site qui contiendrait le code suivant :

User-agent: VoilaBot
Disallow: /

Malheureusement, cette solution semble inutile puisque VoilaBot semble passer à travers et ignore donc les normes définies par l’ensemble des moteurs de recherche.

La solution suivante serait de bloquer l’accès au niveau du fichier .htaccess, de la manière suivante :

deny from 193.252.149.15
deny from 193.252.149.16
deny from 81.52.143.15
deny from 81.52.143.16

Cette solution est maintenant efficace, mais le problème est que le serveur va tout de même recevoir la connexion des IP désignées et donc, il y aura quand même de la surcharge au niveau du serveur.

La dernière solution et la plus efficace est d’utiliser le firewall IPTABLES. Il faut pour cela être sur serveur dédié Linux et avoir les accès root puisque nous allons configurer le firewall.
La documentation pour le télécharger et l’installer est disponible sur netfilter.org

Une fois installé, on rejette les adresses de VoilaBot en entrant les commandes shell suivantes:

iptables -I INPUT -s 193.252.149.15 -j DROP
iptables -I INPUT -s 193.252.149.16 -j DROP
iptables -I INPUT -s 81.52.143.15 -j DROP
iptables -I INPUT -s 81.52.143.16 -j DROP

Cette fois, VoilaBot ne peut plus accèder au serveur, le problème est réglé, et tout à coup, les pages se chargent enfin à une vitesse normale.
On peut aussi créer un fichier de configuration pour exécuter automatiquement ces requêtes au démarrage du serveur qui, dans l’hypothèse de création d’un fichier de configuration /etc/init.d/firewall, peut ressembler à ceci :

#!/bin/sh
# chkconfig: 3 21 91
# description: Firewall
IPT=/sbin/iptables
case "$1" in
start)
$IPT -I INPUT -s 193.252.149.15 -j DROP
$IPT -I INPUT -s 193.252.149.16 -j DROP
$IPT -I INPUT -s 81.52.143.15 -j DROP
$IPT -I INPUT -s 81.52.143.16 -j DROP
echo "Lancement du firewall ... OK"
exit 0
;;
stop)
$IPT -F INPUT
echo "Arrêt du firewall ....... OK"
exit 0
;;
restart)
/etc/init.d/firewall stop
/etc/init.d/firewall start
exit 0
;;
*)
echo "Usage: /etc/init.d/firewall {start|stop|restart}"
exit 1
;;
esac

Il suffit donc d’exécuter les commandes :
– Pour démarrer le firewall : /etc/init.d/firewall start
– Pour arrêter le firewall : /etc/init.d/firewall stop
– Pour redémarrer le firewall : /etc/init.d/firewall restart

Pour conclure, on peut dire qu’il est dommage qu’un moteur de recherche français nuise ainsi aux sites Internet… Pour rattraper son retard ? Parce qu’il est mal configuré ? Des questions à poser aux développeurs du VoilaBot…

Erreur Javascript Internet Explorer : Opération abandonnée

Erreur Javascript Internet Explorer : Opération abandonnée

Si l’on prend des navigateurs différents, on n’obtient pas forcement la même chose avec le même code. C’est régulièrement le cas avec Internet Explorer et Mozilla Firefox.

J’ai récemment eu des complications avec un code JavaScript. Le message indiquait « Internet Explorer ne peut pas ouvrir le site » « Opération abandonnée ! »

La raison de se problème réside dans le fait que du code JavaScript est exécuté avant le chargement complet de la page. Internet Explorer ne le supporte pas et bloque son chargement. Pour parer ce problème, il existe plusieurs méthodes, suivant s’il l’on utilise un Framework tel que prototype.js ou si l’on n’insère que quelques bout indépendant de script dans ses pages.

Pour la première solution, je pars du principe que l’on utilise propotype.js comme framework.
Il suffit de remplacer le code actuel par :

event.observe(window,'load',function () { 
     	// Insérer le script ici 
});

Ainsi, la fonction faisant planter Internet Explorer ne s’exécute qu’après le chargement de la page et l’on peut souffler.

La deuxième manière consiste à modifier soi-même le load de la fonction.

window.onload = function () {
      // Insérer le script ici 
}

Afin de coder proprement et permettre des ajouts futurs simple, nous allons ajouter la fonction au chargement de la page et non la remplacer comme il est habituellement fait et comme je l’ai montré ci-dessus. A la première syntaxe, préférez :

window.onload += function () { 
      // Insérer le script ici 
}

Nous faisons ici une concaténation et la fonction est ajoutée aux autres exécutés en cas de chargement de la page.

Et voilà, un problème de compatibilité réglé !

Erreur dans le code PHP : Warning: include_once(1)

Lors de la créations de vos sites Internet, vous avez peut-être un jour obtenu l’erreur suivante :

Warning: include_once(1) [function.include-once]: failed to open stream: No such file or directory in Votre chemin

Cette erreur est due à l’utilisation des fonction die ou exit combinée à include, include_once, require ou require_once dans votre code. Un exemple vaut mieux que de longues explications :

include_once('fichier.php') or die('Impossible d'ouvrir le fichier');

L’exemple ci-dessus est incorrect, préférez-lui donc le code suivant :

if (!include_once('fichier.php')) {
echo 'Impossible d'ouvrir le fichier';
}

La seule explication que j’ai pu trouver de cette erreur est que la fonction include peut s’écrire

include 'fichier.php';

ce qui ne correspond pas à l’appel d’une fonction. Ainsi, PHP interprèterais d’abord ‘fichier.php’ or die(‘Erreur’);, puis ferrait une inclusion de ce résultat (qui vaut toujours le booléen VRAI).