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

 

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

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

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

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

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

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

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 ?

« Older Entries