Newsgroup: it.comp.www.php
Titolo: conta impression filtrare i roboot

buona sera, scusate l'ingenuità, volevo realizzare un conta impression
per un banner, ingenuamente ho scritto una cosa  come sotto, solo che
mi registra anche tutti i roboot dei motori di ricerca
 
che facci mi metto a filtrare gli useragent? o c'è un sistema più
semplice?
 
enrico
 
 
 
 
<?php
 
 
$idSponsor="1";
$posizione= $_SERVER['PHP_SELF'];
$ipvisitatore=$_SERVER['REMOTE_ADDR'];
  $my_user_agent = strtolower($_SERVER["HTTP_USER_AGENT"]);
$giorno= date("d/m/y");
$giornom= date("y-m-d");
$ora= date("H:i");
 
$logfile = $giornom."impression.log";
 
$log = fopen("report/".$idSponsor."campagna/".$logfile, "ab");
 
if
($impressionNumber=count(file("report/".$idSponsor."campagna/".$logfile))){ $impressionNumber=$impressionNumber;
}
else { 
 
	$impressionNumber=0;
 
 
 
 }
 
$impressionNumber++;
$logimpres=$impressionNumber."|campagnan: ".$idSponsor."|pagina:
".$posizione."|visitatore: ".$ipvisitatore."|browser:
".$my_user_agent."|giorno. ".$giorno."| ora: ".$ora;
 
//echo $logimpres;
 
 
fputs($log, $logimpres."\r\n");
 
fclose($log);
?>
 
<a href="click.php?idSponsor=<?php echo $idSponsor; ?>"
target="_blank"><img src="
http://www.sito.it/banners/banner01b.jpg
"
alt="sito sito"></a>
 

 
 
La soluzione precisa-precisa è veramente difficile, e ho una startup che
fa online advertisement, per cui se non lo so io...
 
La soluzione immediata è invece semplice: fregatene. I robot sono una
percentuale sul totale veramente infima.
 
Ciao!

Il giorno Fri, 23 Mar 2018 14:45:13 -0700 (PDT)
fma...@gmail.com
 ha scritto:

intendo anche gli spider dei motori di ricerca e da quel che vedo nei
log, sono un botto oppure sarò ricco a breve.
 
Enrico
 
 

 
 
Dopo una o due settimane avrai in media una decina di visite da ogni
spider. Se sono di più sì, non sono spider :)
 
Ciao!

 
 
Supponiamo che sia così, in ogni caso gli spider viaggiano per tutte le
pagine del sito, e mi ritrovo 1099 esposizioni in un giorno del banner
che è presente in tutte le pagine; questo sito al momento non ha tutti
questi visitatori, awstats ieri mi dava 470 pagine visitate, per tanto
c'è 629 impression di troppo , circa.
 
se non filtro non ho dati coerenti.
 
Enrico 
 
 


Puoi sempre filtrare su User-Agent, volendo. Gli spiders hanno sempre
ognuna lo stesso.
 
 
Ciao!
 
P.S.
Comunque, se ti fai pagare CPM o CPC stai attento, che qualcuno che tira
su bot per aumentarli c'è sempre.
Anche per questo di solito si fa fare questo tipo di lavoro a chi riesce
a filtrare non solo gli spiders, ma soprattutto comportamenti fraudolenti.

 fraudolenti.
 
in questo caso l'unico che ha interesse ad aumentare le impression
sarei io, ma non ho interesse perchè non sarà questo il core business
del progetto; poi se freghi i clienti sei uno stupido.
 
ma per i click è abbastanza semplice, fai una correlazione tra ip e
user agent e dici che quella correlazione sul banner può cliccare una
volta ogni  tot ore. 
 
per le impression se hai tanti banners  fai un random con esclusione
temporale della correlazione.  
 
ma non sono nemmeno lontanamente in questa fase  del progetto.
 
grazie comunque 
enrico 
 


 
T'avverto, io l'ho fatto, non è semplice come sembra tu pensi.
 
 
Ciao!

 T'avverto, io l'ho fatto, non è semplice come sembra tu pensi.
 
si ne son certo, ma  sto sperimentando e i numeri sono veramente
scarsi attualmente è solo studio 
 
Enrico 
 
 

 
 
Secondo voi perchè non va?
 
 
$spider=array("googlebot","ahrefsbot","mj12bot","bingbot","sitechecker","baiduspider","dotbot","crawler","istellabot","bubing","linkdexbot","yandexbot","facebookexternalhit","cliqzbot","
addthis.com
","robot","qwantify");
 
$arrlength=count($spider);
 
for($x=0;$x<$arrlength;$x++)
  {
 if (strpos($my_user_agent, $spider[$x]) !== FALSE)
{ $spiderbot=TRUE; } else { $spiderbot=FALSE;  } }
 
 
if($spiderbot==TRUE) {} else {
//scrivi log
}
 

 }
 
Anche se dicono che son gusti, TRUE/FALSE sarebbe meglio scriverli in
minuscolo (quantomeno per standard PSR-2). Meglio ancora non scriverli
per nulla.
 
$spiders = /*...*/;
foreach($spiders as $spider)
    if (stripos($agent, $spider)===false)
        /* no spider */
    else
        /* spider */
 
Ciao!

 
 
 
risolto con un break.
 
perchè giustamente  continuava il ciclo e anche se aveva trovato un
TRUE, poi alla fine del ciclo  tornava FALSE
 
for($x=0;$x<$arrlength;$x++)
  {
 if (strpos($my_user_agent, $spider[$x]) !== FALSE)
{ $spiderbot=TRUE; break; } else { $spiderbot=FALSE;  } }
 
 
Enrico 
 

}
 
Mi pare che vada. Io riscriverei così, però:
 
	for($x=0; $x<$arrlength; $x++) {
            if (strpos($my_user_agent, $spider[$x]) !== FALSE) {
                break;
            }
        }
	if ($x === $arrlength) {
		//scrivi log
	}
 
...e poi ordinerei l'array in ordine di frequenza di hit decrescente (l'agent
si prende facilmente, dai log di apache, per es.).
 
Leonardo
 
-- 
 
Ya se escucha sonar la metralla, ya el clarín toca fuego graneado:
ahora o nunca, muchachos arriba a acabar a estos hijos del diablo.