На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Парсинг пользователей и вставка их в базу данных MyBB


Ну что ж, форум мы создали, теперь надо его наполнять. Помимо непосредственного общения, я решил добавлять контент и другими способами. Первый из них – это парсинг закрытых форумов. В данном материале мы научимся брать контент из одного такого форума, требующего авторизацию и занесение информации напрямую в базу данных.

Для начала надо получить страницу. Если идти обычным способом через file_get_contents или курлом без кук, то ничего не получится – страница с темой форума закрыта от неавторизованного пользователя. Можно отправить пост-запрос курлом, затем прочитать куки и уже так получать страницу. Но я поступил проще – скопировал куки из браузера



и подставил их:

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION, true);
$kook = "ipkey=46575; uid=1366372; up=a35b3e501a953933c; bp=185b8948381f8173f; session_id=27; user_res=1366x768; brid=3643702185; rbrid=0; au=233372; luid=233072; luids=efd4; last_user_name=Zггe; auth_time=1582899409; auth_time_md5=49ffc7d63bec669bc749; auth_secure_ip=1; auth_secure_md5=efd40d160262f4c7e9b2; store_auto=0; sidmainsign=0; ip_alert=1;; ip_alert_s=bca7fa; authtime=1582813009; authtime_sign=dfa8d; sidp=0afe3; sid_ok=1; version=v2; bversion=v2";
$headers = [
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,pl;q=0.6,la;q=0.5',
'Cookie: '.$kook,
'DNT: 1',
'Host:сайт.ru',
'Upgrade-Insecure-Requests: 1',
'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
$result = iconv("windows-1251", "utf-8", $result);
curl_close($ch);
Данные, само собой, подставьте свои. Также тут в коде сразу конвертируем windows-1251 в утф8 – сайт не новый. Ну а теперь можно дальше работать с переменной $result, в которой хранится исходный код страницы.

Воспользуемся библиотекой simple html, пример работы с которой я приводил в этой статье. Правда, так как сервер у нас на php 7.4, то потребуется новая версия библиотеки, скачать можно отсюда. Иначе будут ошибки с регулярными выражениями.

Теперь можно импортировать и получать нужное:

include_once('simple_html_dom.php');
foreach($html->find('table td') as $element)  {
	$ret = $element->find('b a', 0);
	if ($ret!="") {
		if (strpos($ret, 'info.php?id') !== false) {
			$nik = $ret->plaintext;
И если ника такого нет в базе данных, то заносим в MyBB напрямую:

if ($result = $conn->query("SELECT uid FROM `mybb_users` WHERE `username` = '$nik'")) {
				$row_cnt = $result->num_rows;
				if ($row_cnt == 0) {
					$qwer = "INSERT INTO `mybb_users` (`uid`, `username`, `password`, `salt`, `loginkey`, `email`, `postnum`, `threadnum`, `avatar`, `avatardimensions`, `avatartype`, `usergroup`, `additionalgroups`, `displaygroup`, `usertitle`, `regdate`, `lastactive`, `lastvisit`, `lastpost`, `website`, `icq`, `skype`, `google`, `birthday`, `birthdayprivacy`, `signature`, `allownotices`, `hideemail`, `subscriptionmethod`, `invisible`, `receivepms`, `receivefrombuddy`, `pmnotice`, `pmnotify`, `buddyrequestspm`, `buddyrequestsauto`, `threadmode`, `showimages`, `showvideos`, `showsigs`, `showavatars`, `showquickreply`, `showredirect`, `ppp`, `tpp`, `daysprune`, `dateformat`, `timeformat`, `timezone`, `dst`, `dstcorrection`, `buddylist`, `ignorelist`, `style`, `away`, `awaydate`, `returndate`, `awayreason`, `pmfolders`, `notepad`, `referrer`, `referrals`, `reputation`, `regip`, `lastip`, `language`, `timeonline`, `showcodebuttons`, `totalpms`, `unreadpms`, `warningpoints`, `moderateposts`, `moderationtime`, `suspendposting`, `suspensiontime`, `suspendsignature`, `suspendsigtime`, `coppauser`, `classicpostbit`, `loginattempts`, `loginlockoutexpiry`, `usernotes`, `sourceeditor`) VALUES (NULL, '$nik', '936b9fcab98720375b7ae0a5', 'e6Mqx', 'JBx2PFafP3WugNVKuGw6uW0XAqAV9XbPE00HnAPJRdPu', '$nik@mail.ru', '0', '0', '', '', '', '2', '', '0', '', '15818172', '15829725', '15818697', '15818694', '', '0', '', '', '', 'all', '', '1', '0', '0', '0', '1', '0', '1', '1', '1', '0', 'linear', '1', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '', '', '0', '0', '0', '0', '', '', '', '0', '0', '0', '', 0xd99f99, '', '525', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '', '0');";
					mysqli_query($conn, $qwer) or die (mysqli_error($conn)); 
					$uid = mysqli_insert_id($conn);
Также необходимо обновить число пользователей, что-то типа такого будет:

INSERT INTO `mybb_stats`(`dateline`, `numusers`, `numthreads`, `numposts`) VALUES ( UNIX_TIMESTAMP(), (SELECT COUNT(uid) AS a FROM `mybb_users`), '2', '4');
И после обновления кэша статистики число пользователей будет расти:



Да, надо не забыть еще поставить задачу крону, например, на каждые 15 минут:

*/15 * * * *     root    /usr/bin/php /var/www/сайт.ru/public_html/forum/cron789/script.php  2>&1




Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, php, парсинг, mybb, форум

Читайте также:




Урок 36. Краткие функции-стрелки
Что такое диод и для чего он используется?


© upread.ru 2013-2021
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.