На одном из сайтов в списке пользователей было очень много регистраций ботов. На взгляд это было несколько тысяч пользователей, который мешали нормальной статистике. Регистрации спамные шли в прошлые годы до того, как сайт переехал на решение Аспро Максимум.

Как же отфильтровать список пользователей, чтобы удалить регистрации ботов

  • Дата регистрации и последней авторизации будут совпадать или отличаться на 1-2 секунды.
  • Имя пользователя на латинице. Фамилия и имя при этом часто совпадают.
  • У пользователя нет заказов
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
use \Bitrix\Main;
$APPLICATION->SetTitle("user-bot");
?>
<?
global $USER;
if($USER->IsAdmin()){
	$result = '';
	$cyrillic_Name = '';
	$date_start = date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), mktime(0, 0, 0, 1, 1, 2022));

	$dbUser = \Bitrix\Main\UserTable::getList(array(
		'select' => array('ID', 'DATE_REGISTER', 'LAST_LOGIN', 'NAME'),
		'filter' => [      
			//">DATE_REGISTER" => $date_start, //по дате
		],
		'limit' => 1000,
	));
	$cnt_DeleteUser = 0;
	while ($arUser = $dbUser->fetch()){

		// сравниваем дату реги и последней авторизации
		$result = $DB->CompareDates($arUser['LAST_LOGIN'], $arUser['DATE_REGISTER']); 

		// проверяем имя на использование кириллицы
		if(!empty($arUser['NAME'])){
			$cyrillic_Name = preg_match( '/[\p{Cyrillic}]/u', $arUser['NAME']); 
		}

		// совпадают дата реги с последней авторизаццией и имя пользователя не на кириллице
		if($result == 0 && $cyrillic_Name == 0){
			// есть ли у пользователя заказ
			$dbOrders = \Bitrix\Sale\Order::getList([
			  'select' => ['ID'],
			  'filter' => [
			      "USER_ID" => $arUser['ID'], 
			  ],
			  'limit' => 1,
			  'order' => ['ID' => 'DESC']
			]);
			while ($order = $dbOrders->fetch()){
				$userHasOrder = $order['ID'];
			}
            
		    //если заказа нет и совпадают дата реги с последней авторизаццией и имя пользователя не на кириллице
		    if (!$userHasOrder && $result == 0 && $cyrillic_Name == 0) {
				$Uid = IntVal($arUser['ID']);
				if (CUser::Delete($Uid))
				{
					echo "<pre style='text-align:left;'>";print_r('Удален - '. $Uid.'. Имя: '.htmlspecialchars($arUser['NAME']));echo "</pre>";
					$cnt_DeleteUser++;
				}
				else
				{
				   global $APPLICATION;
				   echo "<pre style='text-align:left;'>";print_r('Ошибка - '. $Uid);echo "</pre>";
				   var_dump($APPLICATION->LAST_ERROR);
				}
		    }
		    unset($userHasOrder);
		   }
	}
	echo "<pre style='text-align:left;'>";print_r('Удалено пользователей - '. $cnt_DeleteUser);echo "</pre>";
}
?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

От bufwar

Один комментарий к “Очистка списка пользователей от регистраций ботов”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *