На одном из сайтов в списке пользователей было очень много регистраций ботов. На взгляд это было несколько тысяч пользователей, который мешали нормальной статистике. Регистрации спамные шли в прошлые годы до того, как сайт переехал на решение Аспро Максимум.
Как же отфильтровать список пользователей, чтобы удалить регистрации ботов
- Дата регистрации и последней авторизации будут совпадать или отличаться на 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");?>
12312