Информация о пользователе

Ник: darkkkk
Статус: Активен
С нами с:
26.05.2018 18:34
Лайки
Лайки: +0
Лайки
0
Дизлайки
0
Я лайкал: +2
Я лайкал
+2
Я дизлайкал
0
Комментарии
Комментировал: 1
Посты
0
Комментарии
1
Ответы: 1
Посты
0
Комментарии
1
Laravel 5.5 и парсинг. Что такое краулер (crawler).
darkkkk писал(а):
Ответ на комментарий Как вы получаете идентификатор поста? В примере вижу использование палочек | что-то вроде a|p?= или a|archives/{d}. Это фишка краулера или ваша реализация? Если ваша реализация, то не могли бы вы подсказать, как сделать также?
Я использовал свои модификаторы. Писал функционал давно, уже точно не помню, что и как я делал. Но глянул код, все достаточно просто. Вот мой метод, который получает ссылки для парсинга и считывает модификаторы:
/**
* Get links for posts.
*
* @param $parser object collection with parsing settings
* @return array with links
*/
public function getLinks($parser)
{
// Create empty array for links.
$links = [];

// Get html remote text.
$html = file_get_contents($parser->parsing_site);

// Create new instance for parser.
$crawler = new Crawler($html, $parser->parsing_site);

// Check exist additional condition.
if (strpos($parser->settings->link, '|')) {
// Get link conditions.
list($linkCondition, $stringInUrl) = explode('|', $parser->settings->link);
} else {
$linkCondition = $parser->settings->link;
$stringInUrl = '';
$condition = false;
}


// If exist string URL condition.
if (!empty($stringInUrl)) {

// If exist only numbers condition.
if (strpos($stringInUrl, '{d}')) {
$stringInUrl = str_replace('{d}', '', $stringInUrl);
$condition = true;
}
}

// Get links from mail link page.
$crawler->filter($linkCondition)->each(function (Crawler $node, $i) use (&$links, $parser, $stringInUrl, $condition) {
$link = $node->link()->getUri();

// If no condition for exist string in URL.
if (empty($stringInUrl) && $this->checkLink($link)) {
$links[$link] = $link;
}

// If exist condition for exist string in URL.
if (!empty($stringInUrl) && strpos($link, $stringInUrl) !== false) {
// If not number condition.
if (!$condition && $this->checkLink($link)) {
$links[$link] = $link;
}

// If exist number condition.
if ($condition) {
// Get data after condition string.
$linkData = explode('/', substr($link, strpos($link, $stringInUrl), strlen($link)));

if (is_numeric($linkData[1]) && $this->checkLink($link)) {
$links[$link] = $link;
}
}
}
});

// Check count entries.
if (count($links) > $parser->settings->count) {
$i = 1;
// Delete part entries.
foreach ($links as $key => $value) {
if ($i > $parser->settings->count) {
unset($links[$key]);
}
$i++;
}
}

return $links;
}