Sfoglia il codice sorgente

Implementate le whitelist

pezcurrel 4 anni fa
parent
commit
026b333c25

+ 169 - 87
web/admin/crawler/crawler.php

@@ -28,7 +28,8 @@ $opts=array(
 	'timeout'=>5,
 	'timeout'=>5,
 	'biglistfp'=>null,
 	'biglistfp'=>null,
 	'prodlistfp'=>null,
 	'prodlistfp'=>null,
-	'blacklists'=>array()
+	'blacklists'=>array(),
+	'whitelists'=>array()
 );
 );
 
 
 $help='DESCRIZIONE
 $help='DESCRIZIONE
@@ -38,10 +39,12 @@ $help='DESCRIZIONE
  una che conterrà i dati di tutte le istanze di partenza e delle istanze
  una che conterrà i dati di tutte le istanze di partenza e delle istanze
  ad esse note (comprese quelle bloccate, escluse soltanto quelle che non
  ad esse note (comprese quelle bloccate, escluse soltanto quelle che non
  rispondono da un lasso di tempo impostabile), e una che conterrà solo
  rispondono da un lasso di tempo impostabile), e una che conterrà solo
- le istanze non bloccate, che danno possibilità di iscrizione di nuovi
- utenti, il cui numero di utenti è compreso tra 11 e 30000, che
- conoscono almeno altre 500 istanze, e la cui media di toot per utente
- è maggiore o uguale a 10.
+ le istanze non bloccate, la cui piattaforma è mastodon, che danno
+ possibilità di iscrizione di nuovi utenti, il cui numero di utenti
+ è compreso tra 11 e 30000, che conoscono almeno altre 500 istanze,
+ che hanno avuto almeno 10 utenti attivi nell\'ultimo mese o, se questo
+ dato non è disponibile, la cui media di toot per utente è maggiore
+ o uguale a 10.
 SINTASSI
 SINTASSI
  crawler.php -i <file> | -s <file> -b <file> -p <file> [altre opzioni]
  crawler.php -i <file> | -s <file> -b <file> -p <file> [altre opzioni]
 OPZIONI
 OPZIONI
@@ -85,8 +88,16 @@ OPZIONI
   formato di questi file vedi sopra il paragrafo relativo nella
   formato di questi file vedi sopra il paragrafo relativo nella
   descrizione dell\'opzione «-s, --startinstancesfp». Questa opzione può
   descrizione dell\'opzione «-s, --startinstancesfp». Questa opzione può
   essere utilizzata più volte per specificare più file di istanze
   essere utilizzata più volte per specificare più file di istanze
-  bloccate. Nel file di configurazione è l\'unica opzione con un formato
-  particolare: «blacklistfp=file1[,file2[,file3[...]]].
+  bloccate. Nel file di configurazione ha un formato particolare:
+  «blacklistfp=file1[,file2[,file3[...]]]».
+ -w, --whitelistfp
+  Imposta un eventuale file di istanze da non scartare mai, nemmeno
+  se fanno parte di una delle blacklist utilizzato o non corrispondono
+  ai criteri di filtraggio. Il formato di questi file è semplice:
+  un dominio per riga (le righe vuote o che cominciano con il carattere
+  «#» vengono ignorate. Questa opzione può essere utilizzata più volte
+  per specificare più whitelist. Nel file di configurazione
+  ha un formato particolare: «whitelistfp=file1[,file2[,file3[...]]]».
  -t, --timeout <secondi>
  -t, --timeout <secondi>
   Imposta il timeout delle richieste http(s) in secondi.
   Imposta il timeout delle richieste http(s) in secondi.
   DEFAULT: '.$opts['timeout'].' secondi.
   DEFAULT: '.$opts['timeout'].' secondi.
@@ -171,6 +182,8 @@ if (!is_null($inifp)) {
 						mexit('L’opzione «excludeafter» specificata in «'.$inifp.'» non è in un formato corretto (usa «-h» per vedere la guida).'.N,1);
 						mexit('L’opzione «excludeafter» specificata in «'.$inifp.'» non è in un formato corretto (usa «-h» per vedere la guida).'.N,1);
 				} elseif ($key=='blacklists') {
 				} elseif ($key=='blacklists') {
 					$opts['blacklists']=explode(',',$val);
 					$opts['blacklists']=explode(',',$val);
+				} elseif ($key=='whitelists') {
+					$opts['whitelists']=explode(',',$val);
 				} else {
 				} else {
 					$opts[$key]=$val;
 					$opts[$key]=$val;
 				}
 				}
@@ -233,6 +246,13 @@ for ($i=1; $i<$argc; $i++) {
 			$i++;
 			$i++;
 			$opts['blacklists'][]=$argv[$i];
 			$opts['blacklists'][]=$argv[$i];
 			break;
 			break;
+			case '-w':
+			case '--whitelistfp':
+			if ($i+1>=$argc || $argv[$i+1]=='')
+				mexit('L’opzione «'.$argv[$i].'» richiede un parametro di tipo file (usa «-h» per vedere la guida).'.N,1);
+			$i++;
+			$opts['whitelists'][]=$argv[$i];
+			break;
 			case '-l':
 			case '-l':
 			case '--loadbiglist':
 			case '--loadbiglist':
 			if ($i+1>=$argc || ($argv[$i+1]!='si' && $argv[$i+1]!='no'))
 			if ($i+1>=$argc || ($argv[$i+1]!='si' && $argv[$i+1]!='no'))
@@ -292,6 +312,7 @@ if ($opts['loadbiglist']) {
 }
 }
 
 
 $blinstances=array();
 $blinstances=array();
+$wlinstances=array();
 
 
 function loadblacklist($bluri) {
 function loadblacklist($bluri) {
 	global $blinstances, $opts;
 	global $blinstances, $opts;
@@ -314,41 +335,58 @@ function loadblacklist($bluri) {
 	}
 	}
 }
 }
 
 
-if ($opts['onlinecheck']) {
+$startinstances=array();
+echo('Carico il file delle istanze di partenza («'.$opts['startinstancesfp'].'») ... ');
+$buf=@file_get_contents($opts['startinstancesfp']);
+if ($buf!==false) {
+	echo('OK :-)'.N);
+	$buf=explode(N,$buf);
+	foreach ($buf as $val) {
+		if ($val!='' && $val[0]!='#') {
+			$kv=explode('|',$val);
+			if ($kv[1]=='') $kv[1]=null;
+			$startinstances[$kv[0]]=$kv[1];
+		}
+	}
+} else {
+	mexit(N.'Non ho potuto caricare il file delle istanze di partenza «'.$opts['startinstancesfp'].'», muoio.'.N,1);
+}
+if (count($startinstances)<1)
+	mexit('Il file delle istanze di partenza «'.$opts['startinstancesfp'].'» non contiene alcuna voce, muoio.'.N,1);
+
+foreach ($startinstances as $dom=>$bluri) {
+	if (!is_null($bluri)) {
+		echo('Recupero la lista delle istanze bloccate da «'.$dom.'» («'.$bluri.'») ... ');
+		loadblacklist($bluri);
+	} else {
+		echo('NON recupero la lista delle istanze bloccate da «'.$dom.'»: la uri della stessa non è definita.'.N);
+	}
+}
+foreach ($opts['blacklists'] as $bluri) {
+	echo('Carico la lista delle istanze bloccate dall\'URI «'.$bluri.'» ... ');
+	loadblacklist($bluri);
+}
+sort($blinstances);
+echo(count($blinstances).' istanze bloccate.'.N);
 
 
-	$startinstances=array();
-	echo('Carico il file delle istanze di partenza («'.$opts['startinstancesfp'].'») ... ');
-	$buf=@file_get_contents($opts['startinstancesfp']);
+foreach ($opts['whitelists'] as $wluri) {
+	echo('Carico la whitelist delle istanze dall\'URI «'.$wluri.'» ... ');
+	$buf=@file_get_contents($wluri);
 	if ($buf!==false) {
 	if ($buf!==false) {
 		echo('OK :-)'.N);
 		echo('OK :-)'.N);
 		$buf=explode(N,$buf);
 		$buf=explode(N,$buf);
 		foreach ($buf as $val) {
 		foreach ($buf as $val) {
-			if ($val!='' && $val[0]!='#') {
-				$kv=explode('|',$val);
-				if ($kv[1]=='') $kv[1]=null;
-				$startinstances[$kv[0]]=$kv[1];
-			}
+			if ($val!='' && $val[0]!='#' && !in_array($val,$wlinstances))
+				$wlinstances[]=$val;
 		}
 		}
 	} else {
 	} else {
-		mexit(N.'Non ho potuto caricare il file delle istanze di partenza «'.$opts['startinstancesfp'].'», muoio.'.N,1);
+		mexit(N.'Non ho potuto caricare la whitelist delle istanze «'.$wluri.'», muoio.'.N,1);
 	}
 	}
-	if (count($startinstances)<1)
-		mexit('Il file delle istanze di partenza «'.$opts['startinstancesfp'].'» non contiene alcuna voce, muoio.'.N,1);
+}
+sort($wlinstances);
+echo(count($wlinstances).' istanze whitelistate.'.N);
 
 
-	foreach ($startinstances as $dom=>$bluri) {
-		if (!is_null($bluri)) {
-			echo('Recupero la lista delle istanze bloccate da «'.$dom.'» («'.$bluri.'») ... ');
-			loadblacklist($bluri);
-		} else {
-			echo('NON recupero la lista delle istanze bloccate da «'.$dom.'»: la uri della stessa non è definita.'.N);
-		}
-	}
-	foreach ($opts['blacklists'] as $bluri) {
-		echo('Carico le istanze bloccate dall\'URI «'.$bluri.'» ... ');
-		loadblacklist($bluri);
-	}
-	sort($blinstances);
-	echo(count($blinstances).' istanze bloccate.'.N);
+if ($opts['onlinecheck']) {
 
 
 	$context=stream_context_create(array('http'=>array('timeout'=>$opts['timeout'])));
 	$context=stream_context_create(array('http'=>array('timeout'=>$opts['timeout'])));
 
 
@@ -391,39 +429,64 @@ foreach ($biglist as $dom=>$oinfo) {
 	echo('~~~~~~'.N);
 	echo('~~~~~~'.N);
 	if ($opts['onlinecheck']) {
 	if ($opts['onlinecheck']) {
 
 
-		echo('Recupero le informazioni Nodeinfo su «'.$dom.'» ('.$i.'/'.$biglistc.' - '.round(100/$biglistc*$i).'%) ... ');
+		echo('Recupero le informazioni su «'.$dom.'» ('.$i.'/'.$biglistc.' - '.round(100/$biglistc*$i).'%)'.N);
+
+		echo('Recupero le informazioni Nodeinfo ... ');
+		$ninfo=null;
 		$buf=@file_get_contents('https://'.$dom.'/nodeinfo/2.0',false,$context);
 		$buf=@file_get_contents('https://'.$dom.'/nodeinfo/2.0',false,$context);
 		if ($buf!==false) {
 		if ($buf!==false) {
 			echo('OK :-)'.N);
 			echo('OK :-)'.N);
 			$ninfo=json_decode($buf,true);
 			$ninfo=json_decode($buf,true);
-			if (!is_null($ninfo) && array_key_exists('software',$ninfo) && array_key_exists('name',$ninfo['software'])) {
-				echo('Il software è '.$ninfo['software']['name'].'!'.N);
-			} else {
-				echo('Impossibile determinare il software!'.N);
-			}
 		} else {
 		} else {
 			echo('ERRORE :-('.N);
 			echo('ERRORE :-('.N);
 		}
 		}
 
 
-		echo('Recupero le informazioni API su «'.$dom.'» ('.$i.'/'.$biglistc.' - '.round(100/$biglistc*$i).'%) ... ');
+		echo('Recupero le informazioni API sull\'attività dell\'istanza ... ');
+		$activity=null;
+		$buf=@file_get_contents('https://'.$dom.'/api/v1/instance/activity',false,$context);
+		if ($buf!==false) {
+			echo('OK :-)'.N);
+			$activity=json_decode($buf,true);
+		} else {
+			echo('ERRORE :-('.N);
+		}
+
+		echo('Recupero le informazioni API sull\'istanza ... ');
+		$info=null;
 		$buf=@file_get_contents('https://'.$dom.'/api/v1/instance',false,$context);
 		$buf=@file_get_contents('https://'.$dom.'/api/v1/instance',false,$context);
 		if ($buf!==false) {
 		if ($buf!==false) {
 			echo('OK :-)'.N);
 			echo('OK :-)'.N);
 			$info=json_decode($buf,true);
 			$info=json_decode($buf,true);
-			if (!is_null($oinfo) && array_key_exists('cr-checks',$oinfo))
-				$info['cr-checks']=$oinfo['cr-checks'];
-			$info['cr-checks'][]=array('time'=>time(),'ok'=>true);
+			if (!is_null($oinfo) && array_key_exists('X-Checks',$oinfo))
+				$info['X-Checks']=$oinfo['X-Checks'];
+			$info['X-Checks'][]=array('time'=>time(),'ok'=>true);
+			if (!is_null($ninfo)) {
+				if (array_key_exists('usage',$ninfo) && array_key_exists('users',$ninfo['usage'])) {
+					if (array_key_exists('activeMonth',$ninfo['usage']['users']))
+						$info['X-ActiveUsersPerMonth']=$ninfo['usage']['users']['activeMonth'];
+					if (array_key_exists('activeHalfyear',$ninfo['usage']['users']))
+						$info['X-ActiveUsersPerHalfYear']=$ninfo['usage']['users']['activeHalfyear'];
+				}
+				if (array_key_exists('software',$ninfo)) {
+					if (array_key_exists('name',$ninfo['software']))
+						$info['X-Software']=$ninfo['software']['name'];
+					if (array_key_exists('version',$ninfo['software']))
+						$info['X-Version']=$ninfo['software']['version'];
+				}
+			}
+			if (!is_null($activity))
+				$info['X-Activity']=$activity;
 			$newbiglist[$dom]=$info;
 			$newbiglist[$dom]=$info;
 		} else {
 		} else {
 			echo('ERRORE :-( ... ');
 			echo('ERRORE :-( ... ');
 			$lastokk=null;
 			$lastokk=null;
-			if (!is_null($oinfo) && array_key_exists('cr-checks',$oinfo)) {
-				foreach ($oinfo['cr-checks'] as $key=>$val)
+			if (!is_null($oinfo) && array_key_exists('X-Checks',$oinfo)) {
+				foreach ($oinfo['X-Checks'] as $key=>$val)
 					if ($val['ok']) $lastokk=$key;
 					if ($val['ok']) $lastokk=$key;
 			}
 			}
-			if (is_null($oinfo) || is_null($lastokk) || time()-$oinfo['cr-checks'][$lastokk]['time']<=$opts['excludeafter']) {
+			if (is_null($oinfo) || is_null($lastokk) || time()-$oinfo['X-Checks'][$lastokk]['time']<=$opts['excludeafter']) {
 				echo('ma riproveremo...'.N);
 				echo('ma riproveremo...'.N);
-				$oinfo['cr-checks'][]=array('time'=>time(),'ok'=>false);
+				$oinfo['X-Checks'][]=array('time'=>time(),'ok'=>false);
 				$newbiglist[$dom]=$oinfo;
 				$newbiglist[$dom]=$oinfo;
 			} else {
 			} else {
 				echo('e non riproveremo...'.N);
 				echo('e non riproveremo...'.N);
@@ -435,64 +498,81 @@ foreach ($biglist as $dom=>$oinfo) {
 		$info=$oinfo;
 		$info=$oinfo;
 	}
 	}
 	$whynot=array();
 	$whynot=array();
-	if (in_array($dom,$blinstances))
-		$whynot[]='Istanza blacklistata';
 	if (array_key_exists('uri',$info)) {
 	if (array_key_exists('uri',$info)) {
-		if (!array_key_exists('registrations',$info))
-			$whynot[]='Stato delle registrazioni non disponibile';
-		elseif ($info['registrations']==false)
-			$whynot[]='Registrazioni chiuse';
-		if (!array_key_exists('stats',$info))
-			$whynot[]='Stats non disponibili';
-		elseif (!array_key_exists('user_count',$info['stats']))
-			$whynot[]='Numero utenti non disponibile';
-		elseif ($info['stats']['user_count']<10 || $info['stats']['user_count']>30000)
-			$whynot[]='Numero utenti ('.$info['stats']['user_count'].') non compreso tra 10 e 30000';
-		elseif (!array_key_exists('domain_count',$info['stats']))
-			$whynot[]='Numero istanze conosciute non disponibile';
-		elseif ($info['stats']['domain_count']<500)
-			$whynot[]='Numero istanze conosciute minore di 500';
-		elseif (!array_key_exists('status_count',$info['stats']))
-			$whynot[]='Numero di toots non disponibile';
-		elseif ($info['stats']['status_count']/$info['stats']['user_count']<10)
-			$whynot[]='Media dei toots per utente minore di 10';
-		if (!array_key_exists('contact_account',$info) || is_null($info['contact_account']))
-			$whynot[]='Informazioni sull\'account admin principale non disponibili';
-		elseif (!array_key_exists('created_at',$info['contact_account']))
-			$whynot[]='Data di creazione dell\'account admin principale non disponibile';
-		elseif (time()-strtotime($info['contact_account']['created_at'])<6*31*24*60*60)
-			$whynot[]='L\'account admin principale risulta esser stato creato meno di 6 mesi fa';
+		if (!in_array($dom,$wlinstances)) {
+			if (in_array($dom,$blinstances))
+				$whynot[]='Istanza blacklistata';
+			if (array_key_exists('X-Software',$info) && !in_array($info['X-Software'],array('mastodon','corgidon')))
+				$whynot[]='Il software non è Mastodon (ma '.$info['X-Software'].')';
+			if (!array_key_exists('registrations',$info))
+				$whynot[]='Stato delle registrazioni non disponibile';
+			elseif ($info['registrations']==false)
+				$whynot[]='Registrazioni chiuse';
+			if (!array_key_exists('stats',$info)) {
+				$whynot[]='Stats non disponibili';
+			} else {
+				if (!array_key_exists('user_count',$info['stats']))
+					$whynot[]='Numero utenti non disponibile';
+				elseif ($info['stats']['user_count']<10 || $info['stats']['user_count']>30000)
+					$whynot[]='Numero utenti ('.$info['stats']['user_count'].') non compreso tra 10 e 30000';
+				if (!array_key_exists('domain_count',$info['stats']))
+					$whynot[]='Numero istanze conosciute non disponibile';
+				elseif ($info['stats']['domain_count']<500)
+					$whynot[]='Numero istanze conosciute minore di 500';
+	/*			if (!array_key_exists('status_count',$info['stats']))
+					$whynot[]='Numero di toots non disponibile';
+				elseif ($info['stats']['status_count']/$info['stats']['user_count']<10)
+					$whynot[]='Media dei toots per utente minore di 10';*/
+			}
+			if (array_key_exists('X-ActiveUsersPerMonth',$info)) {
+				if ($info['X-ActiveUsersPerMonth']<10)
+					$whynot[]='Numero utenti attivi nell\'ultimo mese minore di 10';
+			} elseif (array_key_exists('stats',$info) && array_key_exists('status_count',$info['stats']) && array_key_exists('user_count',$info['stats']) && $info['stats']['user_count']>0 && $info['stats']['status_count']/$info['stats']['user_count']<10) {
+					$whynot[]='Media dei toots per utente minore di 10';
+			}
+			if (!array_key_exists('contact_account',$info) || is_null($info['contact_account'])) {
+				$whynot[]='Informazioni sull\'account admin principale non disponibili';
+			}/* else {
+				if (!array_key_exists('created_at',$info['contact_account']))
+					$whynot[]='Data di creazione dell\'account admin principale non disponibile';
+				elseif (time()-strtotime($info['contact_account']['created_at'])<6*31*24*60*60)
+					$whynot[]='L\'account admin principale risulta esser stato creato meno di 6 mesi fa';
+			}*/
+		} else {
+			echo('«'.$dom.'» è whitelistata, la teniamo a prescindere.'.N);
+		}
 	} elseif (!array_key_exists($dom,$prodlist)) {
 	} elseif (!array_key_exists($dom,$prodlist)) {
 		$whynot[]='Info non disponibili, e l\'istanza non era già presente nella lista delle istanze occhei';
 		$whynot[]='Info non disponibili, e l\'istanza non era già presente nella lista delle istanze occhei';
 	}
 	}
 	if (count($whynot)==0) {
 	if (count($whynot)==0) {
 		if (array_key_exists($dom,$prodlist)) {
 		if (array_key_exists($dom,$prodlist)) {
 			if (array_key_exists('short_description',$info) && (!array_key_exists('short_description',$prodlist[$dom]) || $prodlist[$dom]['short_description']!=$info['short_description'])) {
 			if (array_key_exists('short_description',$info) && (!array_key_exists('short_description',$prodlist[$dom]) || $prodlist[$dom]['short_description']!=$info['short_description'])) {
-				$info['short_description_changed']=true;
-				$info['prev_short_description']=$prodlist[$dom]['short_description'];
+				$info['X-ShortDescriptionChanged']=true;
+				$info['X-PrevShortDescription']=$prodlist[$dom]['short_description'];
 			} else {
 			} else {
-				$info['short_description_changed']=false;
+				$info['X-ShortDescriptionChanged']=false;
 			}
 			}
 			if (array_key_exists('description',$info) && (!array_key_exists('description',$prodlist[$dom]) || $prodlist[$dom]['description']!=$info['description'])) {
 			if (array_key_exists('description',$info) && (!array_key_exists('description',$prodlist[$dom]) || $prodlist[$dom]['description']!=$info['description'])) {
-				$info['description_changed']=true;
-				$info['prev_description']=$prodlist[$dom]['description'];
+				$info['X-DescriptionChanged']=true;
+				$info['X-PrevDescription']=$prodlist[$dom]['description'];
 			} else {
 			} else {
-				$info['description_changed']=false;
+				$info['X-DescriptionChanged']=false;
 			}
 			}
 			echo('«'.$dom.'» era nella lista delle istanze occhei ed è stata AGGIORNATA! :-)'.N);
 			echo('«'.$dom.'» era nella lista delle istanze occhei ed è stata AGGIORNATA! :-)'.N);
-			if (array_key_exists('show',$prodlist[$dom]))
-				$info['show']=$prodlist[$dom]['show'];
+			if (array_key_exists('X-Show',$prodlist[$dom]))
+				$info['X-Show']=$prodlist[$dom]['X-Show'];
 			else
 			else
-				$info['show']=-1;
+				$info['X-Show']=-1;
 		} else {
 		} else {
-			$info['short_description_changed']=false;
-			$info['description_changed']=false;
-			$info['show']=-1;
+			$info['X-ShortDescriptionChanged']=false;
+			$info['X-DescriptionChanged']=false;
+			$info['X-Show']=-1;
 			echo('«'.$dom.'» non era nella lista delle istanze occhei ed è stata AGGIUNTA! :-)'.N);
 			echo('«'.$dom.'» non era nella lista delle istanze occhei ed è stata AGGIUNTA! :-)'.N);
 		}
 		}
 		$prodlist[$dom]=$info;
 		$prodlist[$dom]=$info;
 	} else {
 	} else {
 		if (array_key_exists($dom,$prodlist)) {
 		if (array_key_exists($dom,$prodlist)) {
+			unset($prodlist[$dom]);
 			echo('«'.$dom.'» era nella lista delle istanze occhei ma è stata SCARTATA! :-('.N);
 			echo('«'.$dom.'» era nella lista delle istanze occhei ma è stata SCARTATA! :-('.N);
 		} else {
 		} else {
 			echo('«'.$dom.'» non era nella lista delle istanze occhei e NON CI È ENTRATA! :-('.N);
 			echo('«'.$dom.'» non era nella lista delle istanze occhei e NON CI È ENTRATA! :-('.N);
@@ -501,13 +581,15 @@ foreach ($biglist as $dom=>$oinfo) {
 	}
 	}
 }
 }
 
 
+echo('~~~~~~'.N);
+
 if ($opts['onlinecheck']) {
 if ($opts['onlinecheck']) {
 	$json=json_encode($newbiglist,JSON_PRETTY_PRINT);
 	$json=json_encode($newbiglist,JSON_PRETTY_PRINT);
 	file_put_contents($opts['biglistfp'],$json);
 	file_put_contents($opts['biglistfp'],$json);
 	$newbiglistc=count($newbiglist);
 	$newbiglistc=count($newbiglist);
 	$diff=$newbiglistc-$ibiglistc;
 	$diff=$newbiglistc-$ibiglistc;
 	if ($diff>=0) $diff='+'.$diff;
 	if ($diff>=0) $diff='+'.$diff;
-	echo('Totale istanze nella listona: '.$newbiglistc.' ('.$diff.' rispetto allultima volta)'.N);
+	echo('Totale istanze nella listona: '.$newbiglistc.' ('.$diff.' rispetto all\'ultima volta)'.N);
 } else {
 } else {
 	echo('Totale istanze nella listona: '.count($biglist).N);
 	echo('Totale istanze nella listona: '.count($biglist).N);
 }
 }
@@ -515,6 +597,6 @@ $json=json_encode($prodlist,JSON_PRETTY_PRINT);
 file_put_contents($opts['prodlistfp'],$json);
 file_put_contents($opts['prodlistfp'],$json);
 $diff=count($prodlist)-$iprodlistc;
 $diff=count($prodlist)-$iprodlistc;
 if ($diff>=0) $diff='+'.$diff;
 if ($diff>=0) $diff='+'.$diff;
-echo('Totale istanze nella listina di quelle occhei: '.count($prodlist).' ('.$diff.' rispetto allultima volta)'.N);
+echo('Totale istanze nella listina di quelle occhei: '.count($prodlist).' ('.$diff.' rispetto all\'ultima volta)'.N);
 
 
 ?>
 ?>

+ 1 - 0
web/admin/crawler/crawler_pant.ini

@@ -6,3 +6,4 @@ timeout=5
 biglistfp=biglist_pant.json
 biglistfp=biglist_pant.json
 prodlistfp=prodlist_pant.json
 prodlistfp=prodlist_pant.json
 blacklists=blacklist_cagi.txt
 blacklists=blacklist_cagi.txt
+whitelists=whitelist_sorellanza.txt

+ 1 - 0
web/admin/crawler/crawler_sorellanza.ini

@@ -6,3 +6,4 @@ timeout=5
 biglistfp=biglist.json
 biglistfp=biglist.json
 prodlistfp=prodlist.json
 prodlistfp=prodlist.json
 blacklists=blacklist_cagi.txt
 blacklists=blacklist_cagi.txt
+whitelists=whitelist_sorellanza.txt