Видео Работа с фейковыми данными в Human Emulator
Создание случайных данных для автозаполнения различных форм и полей.
Последнее время очень много сайтов требуют от нас регистрации для получения доступа к их контенту. При этом не хочется оставлять свои реальные данные на чьём-то сайте ради того, что бы скачать или прочитать что-то. Поэтому мы заполняем такие формы регистрации так называемыми"фейковыми" данными, то есть неправдивыми. Хорошо если такие действия нам приходится выполнять раз в пятилетку, ну а если у нас есть необходимость постоянно регистрироваться, тут уже понадобиться десятки, а может и сотни таких неправдивых данных. Специально для этого в Human Emulator добавлен объект submitter.
Этот объект содержит методы по получению случайного профиля пользователя его имени и фамилии, его географического положения, а также функции создания случайного набора букв и цифр. Весь функционал работает в двух языковых режимах: "en" - английский, "ru" - русский. В RU режиме также можно указывать пол.
Логин и пароль.
Для генерации логина и пароля в объекте submitter можно использовать функции:
- Ник $submitter->generate_random_nick_name
- Текст $submitter->generate_random_text
- Число $submitter->generate_random_number
Пример:
// получить случайный ник $len_nick = $submitter->generate_random_nick_name(rand(7,12)); echo "случайный ник : ".$len_nick."<br>"; // случайный ник с цифрой на конце: $len_nick = $submitter->generate_random_nick_name(5,7).rand(100,999); echo "случайный ник с цифрой на конце : ".$len_nick."<br>"; // случайных текст английский $rand_pwd_en = $submitter->generate_random_text(rand(8,12),1); echo "случайных текст английский : ".$rand_pwd_en."<br>"; $rand_pwd_ru = $submitter->generate_random_text(rand(8,12),2); echo "случайных текст кириллица : ".$rand_pwd_ru."<br>"; echo "generate_random_number : ".$submitter->generate_random_number(1,10,true)."<br>"; echo "mt_rand : ".mt_rand(1,10)."<br>"; // // получить составной пароль echo "составной пароль : ".$pwd = strtoupper($submitter->generate_random_text(rand(1,3),1)). mt_rand(10,100).$submitter->generate_random_text(rand(1,3),1).mt_rand(1,1000);
Результат:
случайный ник : moqaruf случайный ник с цифрой на конце : boduq654 случайных текст английский : fjzuhtce случайных текст кириллица : дожэгвичащ generate_random_number : 5 mt_rand : 2 составной пароль : AWV62xex57
Как видим из примера функция $submitter->generate_random_number аналогична функциям php rand и mt_rand, единственное её отличие это возможность генерировать вещественное число, то есть число вместе со знаками после запятой.
Используя "чистый"(без использование объектов хуман эмулятора) пхп код можно также генерировать логин и пароль.
Пример:
// генерация логина echo "логин : ".generate_login(rand(5,12))."<br>"; // генерация пароля echo "пароль : ".generate_password(rand(5,12))."<br>"; // возвращает 128-битный хеш-код echo "id : ".$id = md5(uniqid(rand(),true))."<br>"; echo "пароль2 : ".generate_password2(rand(5,12)); function generate_password2($number) { $arr = array("a","b","c","d","e","f", "g","h","i","j","k","l", "m","n","o","p","r","s", "t","u","v","x","y","z", "A","B","C","D","E","F", "G","H","I","J","K","L", "M","N","O","P","R","S", "T","U","V","X","Y","Z", "1","2","3","4","5","6", "7","8","9","0",".",",", "(",")","[","]","!","?", "&","^","%","@","*","$", "<",">","/","|","+","-", "{","}","`","~"); // Генерируем пароль $pass = ""; for($i = 0; $i < $number; $i++) { // Вычисляем случайный индекс массива $index = rand(0, count($arr) - 1); $pass .= $arr[$index]; } return $pass; } // функция генерации пароля function generate_password($len) { $string = ""; for ($i=0; $i<$len; $i++) { $ch = ""; $d = (int)rand(1,3); if ($d==1) { $ch = chr((int)rand(0, 9)+48); } if ($d==2) { $ch = chr((int)rand(0,25)+65); } if ($d==3) { $ch = chr((int)rand(0,25)+97); } $string.=$ch; } return $string; } // функция генерации логина function generate_login($len) { $r = ""; $allowedSymbols = array("b","a","c","e","d","o","f","i","g","u","h","o","j","e","k","o","l","e","m","u","n","o","p","a","q","e","r","o","s","i","t","u","v","e","w","a","x","o","y","i","z"); for ($i=0; $i<$len; $i++) { $rand=array_rand($allowedSymbols); if ($i % 2 == 0) { while($rand% 2 != 0) {$rand=array_rand($allowedSymbols);} $r.=$allowedSymbols[$rand]; } else { while($rand% 2 == 0) {$rand=array_rand($allowedSymbols);} $r.=$allowedSymbols[$rand]; } } return $r; }
Результат:
логин : xuwuyuqopi пароль : tE05n7d6Au id : 9f52e3de6c07cbc82df1eb971d17e674 пароль2 : yPROH|6x
В сети можно найти огромное количество различных примеров для генерации логина и пароля на PHP под любые требования к их созданию.
Для записи полученных логина и пароля в файл можно использовать следующий код:
$textfile->add_string_to_file("путь к файлу с аккаунтами",$len_nick.":".$pwd."\r\n",60);
описание функции add_string_to_file
Имя и фамилия.
Для генерации случайных имени и фамилии используются следующие функции:
Пример:
// /////////////////////////// английские имя и фамилия echo "английские имя и фамилия : "; $f_name = $submitter->generate_random_name("EN"); $l_name = $submitter->generate_random_second_name("EN"); echo $f_name." ". $l_name ."<br>"; // ///////////////////////////////////// русские имя и фамилия // пол $i_gender=rand(0,1); $str_gender="man"; if($i_gender==1) $str_gender="woman"; echo "пол : ".$str_gender."<br>"; // Имя $f_name = $submitter->generate_random_name("RU",$str_gender); // Фамилия $l_name = $submitter->generate_random_second_name("RU",$str_gender); echo "русские имя и фамилия : ".$f_name." ". $l_name ."<br>"; // переводим имя и фамилию в латиницу echo "переводим имя и фамилию в латиницу : " . $full_name_lat = rus2translit($f_name." ".$l_name); // функция перевода текста с кириллицы в траскрипт function rus2translit($str) { // сначала заменяем "односимвольные" фонемы. $str = strtr($str, "абвгдеёзийклмнопрстуфхъыэ", "abvgdeeziyklmnoprstufh"ie"); $str = strtr($str, "АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ", "ABVGDEEZIYKLMNOPRSTUFH"IE"); // Затем - "многосимвольные". $str = strtr($str, array( "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya", "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH", "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA", "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye")); // Возвращаем результат. return $str; }
Результат:
английские имя и фамилия : Hanski Jimenez пол : man русские имя и фамилия : Андрей Андроников переводим имя и фамилию в латиницу : Andrey Andronikov
Как видно из примера мы можем создавать как английские, так и русские имена и фамилии и в случае необходимости транслитерировать русские имена и фамилии с использованием латиницы.
Дата рождения и возраст.
Для генерации случайной даты рождения и вычисления возраста используется php функционал.
Пример:
// ////////////////////////////////// день рождения // день $day = rand(1,28); // добавим ноль в начало если меньше 10 if($day<10) $day="0".$day; // месяц $month=rand(1,12); if($month<10) $month="0".$month; // год $year = rand(1970,1993); echo "дата рождения : ".$day.".".$month.".".$year ."<br>"; // использование функционала date php для создания случайной даты в заданном диапазоне // начало диапазона дат $sDateFrom = "1970-01-01"; // конец диапозона дат $sDateTill = "2000-01-01"; $sDate = date("d.m.Y", mt_rand(strtotime($sDateFrom), strtotime($sDateTill))); echo "дата рождения с использованием date : ".$sDate."<br>"; // вычислим возраст echo "возраст : ".calculate_age($sDate); // вычислить возраст по дате рожения function calculate_age($birthday) { $birthday_timestamp = strtotime($birthday); $age = date("Y") - date("Y", $birthday_timestamp); if (date("md", $birthday_timestamp) > date("md")) { $age--; } return $age; }
результат:
дата рождения : 15.10.1984 дата рождения с использованием date : 30.11.1979 возраст : 37
В зависимости от того каким образом надо будет вводить дату в форму, либо это несколько выпадающих списков для отдельного ввода дня, месяца и года или же это просто поле для ввода даты рождения, мы можем сгенерировать необходимые нам данные и в дальнейшем определить возраст по полученному дню рождения.
Местоположение.
Для создания местоположения используются следующие функции:
- Улица $submitter->generate_random_street
- Город $submitter->generate_random_city
- Регион $submitter->generate_random_region
- Страна $submitter->generate_random_country
пример:
// местоположение на русском echo "местоположение на русском <br>"; echo "регион : ".$submitter->generate_random_region("RU")."<br>"; echo "страна : ".$submitter->generate_random_country("RU")."<br>"; echo "город : ".$submitter->generate_random_city("RU")."<br>"; echo "улица : ".$submitter->generate_random_street("RU")."<br>"; // местоположение на английском echo "местоположение на английском <br>"; echo "регион : ".$submitter->generate_random_region("EN")."<br>"; echo "страна : ".$submitter->generate_random_country("EN")."<br>"; echo "город : ".$submitter->generate_random_city("EN")."<br>"; echo "улица : ".$submitter->generate_random_street("EN")."<br>";
результат:
местоположение на русском регион : Замбия страна : Гайана город : Верхняя тура улица : Балаклавская, ул. местоположение на английском регион : Vermont страна : Belarus город : Hillersleben улица : Iniscarn Road
Как видно из примера все функции генерят полностью случайные и не связанные между собой локации.
Для того что бы получать связанные локации можно использовать php код из сети. Вот например есть API Вконтакте с уже готовыми базами данных https://vk.com/dev/database. Берём и адаптируем это для наших нужд.
Пример:
$lang = 0; // russian $headerOptions = array( "http" => array( "method" => "GET", "header" => "Accept-language: ru\r\n" . "Cookie: remixlang=$lang\r\n" ) ); // получаем список стран используя api.vk.com $methodUrl = "http://api.vk.com/method/database.getCountries?v=5.5&need_all=1&count=1000"; $streamContext = stream_context_create($headerOptions); // содержимое базы $json = file_get_contents($methodUrl, false, $streamContext); // массив со странами $arr = json_decode($json, true); //echo "Total countries count: " . $arr["response"]["count"] . " loaded: " . count($arr["response"]["items"])."<br>"; // берём случайный элемент массива $num = rand(0,$arr["response"]["count"]-1); // получаем случайный id страны $countryId = $arr["response"]["items"][$num]["id"]; echo "<br>страна : "; $countryName = $arr["response"]["items"][$num]["title"]; // $countryId = 1; // Russia // выведем в панель отладки название страны echo $countryName = iconv("utf-8", "windows-1251//IGNORE", $countryName); // получаем регионы используя api.vk.com и полученный выше $countryId $methodUrl = "http://api.vk.com/method/database.getRegions?v=5.5&need_all=1&offset=0&count=1000&country_id=" . $countryId; $streamContext = stream_context_create($headerOptions); // читаем файл $json = file_get_contents($methodUrl, false, $streamContext); // получаем массив с регионами $arr1 = json_decode($json, true); //echo "Total regions count: " . $arr["response"]["count"] . " loaded: " . count($arr["response"]["items"]); //print_r($arr["response"]["items"]); // случайный элменет массива $num = rand(0,$arr1["response"]["count"]-1); // id региона $regionId = $arr1["response"]["items"][$num]["id"]; echo "<br>регион : "; $RegionName = $arr1["response"]["items"][$num]["title"]; // выведем в панель отладки название региона echo $RegionName = iconv("utf-8", "windows-1251//IGNORE", $RegionName); // получаем города используя api.vk.com и полученный выше $countryId и $regionId $methodUrl = "http://api.vk.com/method/database.getCities?v=5.5&country_id=" . $countryId . "®ion_id=" . $regionId . "&offset=0&need_all=1&count=1000"; $streamContext = stream_context_create($headerOptions); $json = file_get_contents($methodUrl, false, $streamContext); // заполняем массив $arr2 = json_decode($json, true); //echo "Total cities count: " . $arr["response"]["count"] . " loaded: " . count($arr["response"]["items"]); //print_r($arr["response"]["items"]); // случайный элемент массива $num = rand(0,$arr2["response"]["count"]-1); // id города $cytiId = $arr2["response"]["items"][$num]["id"]; echo "<br>город : "; $СytiName = $arr2["response"]["items"][$num]["title"]; // выведем в панель отладки название города echo $СytiName = iconv("utf-8", "windows-1251//IGNORE", $СytiName);
Результат:
страна : Чили регион : Regin de la Araucana город : Teodoro Schmidt
Ну а для получения номера дома и номера квартиры используем функции rand(1,28); или mt_rand(1,28); с нужными диапазонами.
Как видим, помимо использования встроенного в Хуман Эмулятор функционала для генерации различных данных, разработчикам скриптов автоматизации в Human Emulator доступен любой код на php. Вы можете легко внедрять в программу любые готовые классы и функции и использовать их вместе со встроенным функционалом программы.