Rendez wordpress conforme avec la directive européenne sur la vie privée

par Cnil

 

Ce plugin est la pour mettre facilement vos sites wordpress en conformité avec la future (au mois de Mai 2012) application de la directive européenne sur la vie privée concernant l’information et le choix des internautes concernant le stockage de cookies sur leur ordinateur lors de la visite de vos sites.

Si l’utilisateur refuse l’utilisation des cookies via ce plugin alors tous les cookies seront supprimés sur le site a chaque chargement de page (sauf si vous êtes loggé sur la partie admin).

Le choix de l’utilisateur est alors mémorisé dans …….. un cookie lolilol ! (c’est tout le paradoxe de ce projet)

Le script est disponible gratuitement sur mon espace GitHub : https://github.com/beunwa/WpAutorizeCookie

Ps : le look de l’alerte est aisément modifiable dans le plugin via les css

Ps2 : je me suis largement inspiré du site de la CNIL pour ce plugin, merci à eux

 

Controlez le nom de l’auteur affiché sur WordPress

par Pierre Richard

Suite a une petite discussion sur twitter ce matin il m’est apparu que la plupart des utilisateurs de communiqués de presse ne prenait pas la peine de modifier leur nom d’auteur.

J’ai donc réalisé un petit plugin WordPress qui va vous permettre de modifier le nom d’auteur affiché et ce pour chaque article que vous allez poster.

Il se présente sous la forme d’un simple champ texte supplémentaire situé juste à droite de la zone ou vous tapez votre texte habituellement, vous n’avez plus qu’a choisir le nom à afficher et le tour est joué !

Le script est disponible gratuitement sur mon espace GitHub : https://github.com/beunwa/WpAuthorName

Scrapebox n’aime pas l’utf-8 mais c’est pas grave

par Rosie Varte

Scrapebox n’aime pas l’utf8, vous devez impérativement lui donner a manger des caractères issus du charset iso-8859-1 sinon vous allez avoir de drôles de résultats. (de toute façon il n’y a que les anglais qui savent scraper c’est bien connu :D )

Mais alors comment doit on faire si on veut récuperer les serps Ukrainienne ???
Il faut passer par un encodage html des caractères non supportés par le mode iso-8859-1 avant de coller vos ‘footprints’ dans la scrapebox, ensuite Google sera capable automatiquement de les convertir en caractères utf-8, comme ca tout le monde est content.

Voila pour l’astuce et voila comment générer vos footprints utf-8 compatible scrapebox juste en faisant des copié collé :

<?php
$rt = '';
if(isset($_POST['txt'])){
	$tab = preg_split('#(\r?\n)#', trim($_POST['txt']));
	foreach($tab as $v){
		$v = trim(stripslashes($v));
		$v = str_replace('"', 'QUOTE', $v);
		$v = htmlentities($v);
		$v = str_replace('QUOTE', '"', $v);
		echo $v.'';
	}
}
?>
Colle tes footprints un par ligne
<form  action="" method="post">
	<textarea name="txt" style="width:500px;height:300px;"></textarea>
	<input type="submit" value="Go" />
</form>

Script de check de réputation via WOT

par admin

A la demande de @GHBSXR (sorry je m’y ferai jamais) j’ai réalisé un script php qui va vous permettre de vérifier la ‘réputation’ de vos sites via le service WOT (Web Of Trust).

WOT permet via ses plugins chrome ou firefox ou simplement via son site web de vérifier 4 notes attribués par les internautes :

  • Niveau de confiance,
  • Renommée du vendeur,
  • Conservation de la vie privée et
  • Sécurité pour les enfants

Si vous souhaitez plus d’infos sur ce service je vous renvoi à l’article WOT de Sandrine (avec de la pub pour moi dedans :) )

Vous devez pour pouvoir utiliser le script avoir un server avec php + php-curl activé, collez simplement votre liste d’urls (1 par ligne) et le script vous renverra un fichier csv qui contiendra le domaine de l’url + les informations associés sur WOT.
Attention WOT n’attribue des scores que pour les domaines et sous domaines, donc pas besoin de coller 150 urls du meme domaine, ca ne sert à rien.

Voici donc ce script :


<?php
function getDomValue($path, $html){
	$dom = new DOMDocument();
	@$dom->loadHTML($html);
	$xp = new DOMXPath($dom);
	$nodeList = $xp->query($path);
	foreach($nodeList as $domElement){
		return $domElement->nodeValue;
	}
	return false;
}
function __outputCSV(&$vals, $key, $filehandler) {
   fputcsv($filehandler, $vals, ';', '"');
}
function getHeaders(){
    $headers = array();
    foreach ($_SERVER as $k => $v)
    {
        if (substr($k, 0, 5) == "HTTP_")
        {
            $k = str_replace('_', ' ', substr($k, 5));
            $k = str_replace(' ', '-', ucwords(strtolower($k)));
            $headers[$k] = $v;
        }
    }
    return $headers;
}
function getUrl($u){
	global $proxyTab;

	if($proxyTab !== false){
		$proxy = $proxyTab[rand(0, count($proxyTab)-1)];
	}
	$head = getHeaders();
	$headers = array();
	$headers[] = 'Accept: '.$head['Accept'];
	$headers[] = 'Accept-Language: '.$head['Accept-Language']  ;
	$headers[] = 'Accept-Charset: '.$head['Accept-Charset'];
	$headers[] = 'Keep-Alive: '.$head['Keep-Alive'];
	$headers[] = 'Connection: '.$head['Connection'];

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL,$u);
	curl_setopt($ch, CURLOPT_FAILONERROR, 1);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
	curl_setopt($ch, CURLOPT_TIMEOUT, 15); // times out after Ns
	curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
	curl_setopt($ch, CURLOPT_HEADER, 1);
	curl_setopt($ch, CURLOPT_HTTPHEADER, $headers );
	if($proxyTab !== false){
		$proxy = $proxyTab[rand(0, count($proxyTab)-1)];
		$proxy = explode(':',$proxy);
		curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
		curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
		curl_setopt($ch, CURLOPT_PROXY, $proxy[0]);
		curl_setopt($ch, CURLOPT_PROXYPORT, $proxy[1]);
	}
	$res = curl_exec( $ch );
	$info = curl_getinfo($ch);

	$header = preg_replace('#^HTTP.*\n#', '', $res);
	$header = substr($header, 0, $info['header_size']);
	preg_match_all('#^([^:].+):\s(.+)$#mi', $header, $m);
	$header = @array_combine($m[1], $m[2]);

	$pattern = "#META http-equiv=['|\"]Refresh['|\"] content=['|\"][0-9]+;url=(.*?)['|\"]#si";
	if(preg_match($pattern, $res, $loc)) {
		$url = $loc[1];
	}else{
		$url = $info['url'];
	}

	return array($res, $info, $url, $header);
}
if(isset($_POST['txt'])){
	//$proxyTab = file();

	$tab = preg_split('#(\n)#',$_POST['txt']);
	$results = array(array('Domain', 'Rank', 'Popularity', 'Trustworthiness', 'Vendor reliability', 'Privacy', 'Child Safety'));
	foreach($tab as $t){
		$t = trim($t);
		if(substr($t, 0, 4) != 'http') $t = 'http://'.$t;
		$u = parse_url($t);
		$host = $u['host'];
		if($t != ''){
			$r = array();
			$res = getUrl('http://www.mywot.com/en/scorecard/'.$host);
			$r['domain'] = $host;
			$r['rank'] = getDomValue('//ul[@id="rank"]/li[2]/span[1]', $res[0]);
			$r['pop'] = getDomValue('//div[contains(@class, "popularity")]/@class', $res[0]);
			preg_match('#.*popularity-([0-9]).*#', $r['pop'], $m);
			$r['pop'] = $m[1];
			$r['trust'] = getDomValue('//*[@id="reputation-table"]/tbody/tr[2]/td[2]/div[1]/div[1]/div', $res[0]);
			$r['rel'] = getDomValue('//*[@id="reputation-table"]/tbody/tr[4]/td[2]/div[1]/div[1]/div', $res[0]);
			$r['priv'] = getDomValue('//*[@id="reputation-table"]/tbody/tr[6]/td[2]/div[1]/div[1]/div', $res[0]);
			$r['safe'] = getDomValue('//*[@id="reputation-table"]/tbody/tr[8]/td[2]/div[1]/div[1]/div', $res[0]);
			$results[] = $r;
		}
	}
	$fp = fopen('php://memory', 'w');
    array_walk($results, '__outputCSV', $fp);
    rewind($fp);
    $output = stream_get_contents($fp);
	fclose($fp);
	header('Content-type: application/vnd.ms-excel');
	header('Content-disposition: attachment; filename="wotexport.csv"');
	echo $output;
	die();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="fr-fr">
	<head profile="http://gmpg.org/xfn/11">
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title>WOT checker</title>
    </head>
    <body>
<h1>WOT EXTRACTOR</h1>
<p>Collez votre liste d'url dans le champ texte ci-dessous et cliquez sur Go</p>
<form  action="" method="post">
	<textarea name="txt" style="width:500px;height:300px;"><?php echo $rt; ?></textarea>
	<input type="submit" value="Go" />
</form>
</body>
</html>

PS : si vous souhaitez utiliser des proxys alors remplacer la ligne 76 par $proxyTab = array(‘ip1:port’,'ip2:port’);

Concours seo par bertimus

par admin

L’ami Bertimus aka Berti ramisu organise un concours de référencement éclair de 5 semaines.
Un aspect important : le futur mot clef ne pourra pas être inclu dans le nom de domaine qui participera au concours, il faudra aussi jouer avec un domaine tout neuf.

Apparement beaucoup de lots interessants vont être mis en jeu (et pas que des licenses de soft pour une fois ;) )

Plus d’infos sur seoworldcup

Bonne chance a tous !

Recuperer le top des recherches google francaise

par admin

Suite a une idée de MickealB de lereferencement, voici en quelques lignes comment récuperer le top des recherches google en france sur les 7 derniers jours.

Pour commencer on se rend sur la bonne page (ici le top des recherches fr sur 7 jours) :

http://www.google.com/insights/search/#cat=0&q=&geo=FR&date=today%207-d&gprop=&cmpt=q

On pense a scruter la console de firebug qui nous indique quel fichier est appelé par google :

http://www.google.com/insights/search/overviewReport?cat=0&q=&geo=FR&date=today%207-d&gprop=&cmpt=q&content=1

Il ne nous reste plus qu’a utiliser l’excellent plugin xPather pour firefox et ainsi trouver la requete xpath qui va bien :

//div[contains(@id, "overviewTopSearchesDiv")]//tr[contains(@class,"trends-table-row")]/td[2]

Maintenant il ne reste plus qu’a utiliser xpath et php pour extraire la liste des recherches en quelques lignes :

$url = 'http://www.google.com/insights/search/overviewReport?cat=0&q=&geo=FR&date=today%207-d&gprop=&cmpt=q&content=1';
$html = file_get_contents($url);

$dom = new DOMDocument();
@$dom->loadHTML($html);
$xp = new DOMXPath($dom);
$nodeList = $xp->query('//div[contains(@id, "overviewTopSearchesDiv")]//tr[contains(@class,"trends-table-row")]/td[2]');
foreach($nodeList as $domElement){
    echo $domElement->nodeValue.'';
}

ATTENTION : dans cet exemple j’ai utilisé la fonction file_get_contents qui ne sait pas gérer les proxys, je vous conseille fortement d’utiliser les fonctions curl de php pour pouvoir utiliser des proxys, vous pourrez ainsi appeler ce sript sans crainte de vous faire kicker par google.

Pour obtenir d’autres infos il ne vous reste plus qu’a trouver l’url correpondant à vos besoin sur google insight ;)

Extraire des données seo pour une liste d’urls

par admin

Il y a 2 jours j’ai eu besoin d’extraire la liste des titles et des h1 du site d’un client afin de réaliser un audit et une série de recommandation son optimisation onsite.
J’ai cherché quelques minutes un outil permettant de faire cela simplement et rapidement mais je n’ai pas trouvé (j’ai surement mal cherché :) )
Du coup je l’ai codé en php et je vous le livre.

Ce tool scrap une liste d’urls et extrait pour chaques urls :
- la balise title
- la balise h1
- le status du header (200, 404,500, etc ..)
- le charset de la page
- la balise keywords (ca coutais rien de l’ajouter)
- la balise description
- la redirection (si il y en a une, meta refresh incluse)

A la fin du scrap vous recupérez un fichier csv pret à être ouvert dans votre tableur préféré.

Il y a quelques optis a faire, par exemple mettre un timer entre chaque scrap car avec une grosse liste d’urls vous risquez de mettre votre serveur a genou :D

Que rajouteriez vous a cette liste pour completer l’outil ?

Verification de la langue d’une page avec Bing

par admin

Je me suis penché sur les commandes de recherche fournies par Bing récemment (je devais m’ennuyer un petit peu).
J’ai retenu deux de ces commandes qui utilisées conjointement permettent de déterminer si une page est rédigée dans une langue.
Ces deux commandes sont :

  • « language »
  • « url »

Imaginons que je veuille verifier si la page « http://fr.wikipedia.org/wiki/Poker » est rédigée en anglais, je vais alors taper la commande suivante dans Bing :

language:{en} url:http://fr.wikipedia.org/wiki/Poker

Bing va me renvoyer zero résultats, la page n’est pas rédigée en anglais.

Maintenant si je verifie si la meme page est rédigée en français :

language:{fr} url:http://fr.wikipedia.org/wiki/Poker

Bing va me renvoyer un résultat, la page est bien rédigée en Français.
Si vous essayez avec la page http://en.wikipedia.org/wiki/Poker vous obtiendrez le résultat inverse (logique).

J’ai essayé cette technique sur un paquet de page et je n’ai pas encore rencontré de faux positifs, le seul problème de cette technique c’est qu’elle repose sur l’index de Bing :( . En effet beaucoup de mes tests n’ont pas aboutis car la page n’existait tout simplement pas dans Bing.

Il existe plusieurs solution de détection de la langue (notament celle évoquée par Seoblackout).

Et vous vous utilisez quoi comme technique de détection de langue ?
Avez vous détecté des faux positifs avec la technique Bing ?

Les stats fournies par wordpress.com ne sont pas fiables

par admin

J’ai lancé un site de niche il y a quelques mois sur l’impulsion de l’ami Rudy, avec l’aide d’un bon scrapper (et d’un bon cloaking) j’ai rapidement réussi à obtenir du traffic sans faire beaucoup de liens. J’ai bossé un peu le design, installé le plugin de stats fourni par wordpress.com et j’ai laissé en plan.
Je me reposais sur mes lauriers : 700 visiteurs / jour c’est pas si mal suite a un lancement ;)

Je suis assez fan de getclicky car il ne permet pas de tracer un réseau comme c’est le cas avec gg analytics et puis son interface et plutôt pratique. On peut ajouter très facilement un suivi getclicky dans un wordpress grâce au plugin fourni dans la partie goodies du site getclicky.
J’ai donc décidé courant octobre d’y ajouter mon site pour pouvoir le suivre avec mes autres money sites sans avoir a me logger dans la partie admin de mon site…

Et la GROSSE SURPRISE :

Et oui getclicky m’affiche environ 6 fois moins de visiteurs.
Je n’ai pas décortiqué le plugin de stats wordpress mais il est évident qu’il y a un problème de comptage, peut-être qu’il compte les robots, peut être qu’il ne compte pas les visites uniques?
En tout cas j’utilise getclicky depuis longtemps et j’ai pu le comparer a d’autres systèmes de stats, je ne pense pas que le problème vienne de lui.

Si vous pensez être le roi du pétrole en regardant vos stats sur wordpress.com gare à la chute :D

Et vous vous avez déja reperé ce genre de problème ?

Anticopie d’article facile et très éfficace

par admin

Le duplicate content est la plaie du web dirons certains, d’autres l’utilise a outrance.
Dans les deux cas cette technique ultra simple que je vais vous dévoiler vous servira.

Si vous êtes un rédacteur et que vous en avez marre de voir vos articles se faire copier par les petites mains délocalisés du web alors cette solution bloquera toutes tentative de copier / coller.
Si vous êtes une de ces petites mains alors vous comprendrez comment contourner cette technique anti plagiat.

Cette technique simple est utilisée sur moodinstitute, vous remarquerez que :

  • Il est impossible de selectionner quoi que ce soit
  • Il est impossible de glisser / déposer quoi que ce soit
  • Il est impossible clic droit quoi que ce soit

La je vous vois arriver en vous disant : Ok je désactive javascript et basta je pompe tout !

Et bien non, même sans javascript cette technique fonctionne (ok sauf sur ie :D ) car elle utilise aussi les css

Donc voici la soluce :

<body style="-webkit-user-select:none;-moz-user-select:none;" oncontextmenu="return false" ondragstart="return false" onselectstart="return false" ondrag="return false" >

Avec ce code vous blindez l’intégralité de votre page, mais pour ne protéger qu’une partie il vous suffit de coller ca dans n’importe quelle balise à protéger.

Enjoy !

PS : Cette solution n’écartera que les noobs, mais ce sont certainement les plus nombreux. (un scrappeur digne de ce nom n’utilise pas le copié / collé)

Powered by WordPress and Divioseo