Здравствуйте, есть задача пропарсить все сообщения от пользователя на форуме xenforo.
Дело в том,что как я понял - без рекурсии не обойтись.
При переходе на пятую страницу сообщений пользователя возможно два исхода.
1 - парсер закончит свою работу и вернет результат. 2 - он регуляркой узнает то,что есть еще более старые сообщения и запустит еще раз самого себя.
Что-то я написал,но ничего у меня не работает,или работает тяжко.
function getAll($id)
{
$resultarray = array();
$url = getRedirect('https://forum.arizona-rp.com/search/member?user_id='.$id);
preg_match_all('/https:\/\/forum.arizona-rp.com\/search\/(\d+)\//',$url,$searchid);
$searchid = $searchid[1][0];
$resultarray = recursiveparse('https://forum.arizona-rp.com/search/'.$searchid.'/?page=',$resultarray,$searchid);
return $resultarray;
}
function recursiveparse($url,$resultarray,$searchid)
{
for ($i=1; $i <= 5; $i++) {
$page = getPage($url . $i);
$ik = $i + 1;
if (strpos($page,'<a href="/search/'.$searchid.'/?page='.$ik.'">'))
{
preg_match_all('/<a href="\/profile-posts\/(\d+)\/">.*<\/a>/',$page,$foo);
preg_match_all('/<a href="\/profile-posts\/comments\/(\d+)\/">.*<\/a>/',$page,$fok);
preg_match_all('/<a href="\/threads\/\d+\/post-(\d+)">/',$page,$threads);
$resultarray = array_merge($resultarray,$foo[1],$fok[1],$threads[1]);
} else {
if(preg_match_all('/https:\/\/forum.arizona-rp.com\/search\/\d+\/older\?before=\d+/',$page))
{
preg_match_all('/https:\/\/forum.arizona-rp.com\/search\/\d+\/older\?before=\d+/',$page,$pageurl);
$resultarray = recursiveparse($pageurl[0][0],$resultarray);
} else {
preg_match_all('/<a href="\/profile-posts\/(\d+)\/">.*<\/a>/',$page,$foo);
preg_match_all('/<a href="\/profile-posts\/comments\/(\d+)\/">.*<\/a>/',$page,$fok);
preg_match_all('/<a href="\/threads\/\d+\/post-(\d+)">/',$page,$threads);
$resultarray = array_merge($resultarray,$foo[1],$fok[1],$threads[1]);
break;
}
}
}
return $resultarray;
}
С рекурсией столкнулся впервые,прошу помощи.
Сам список сообщений -
https://forum.arizona-rp.com/search/3456826/