Сегодня я раскажу как с помощю PHP, реализовать экранный анализатор!
Экранный анализатор - программа или скрипт, которая просматривает Web-страницу, извлекая при этом нужные данные.
Сейчас мы расмотрим простейший анализатор, который извлечет ссылки и отсортирует их по катеогориям!
И так, первым делом мы создадим форму что передаст нашему скрипту ссылку!
Код:
<?php
echo '<form method=get>
Ваша ссылка: <input name="url" type="text" value="http://">
</form>';
Теперь перейдём непосредственно к получению и обработке ссылки
Код:
if (isset($_REQUEST["url"])) { // проверяем наличие ссылки
$url = $_REQUEST["url"]; // получаем данные от формы
if (!preg_match('|^https{0,1}://|', $url)) { // С помощю регулярного выражения, проверяем ссылку
print "URL $url не является валидным!";
exit(0);
}
}
Самое время получить ссылки! Я буду использовать простую функцию file_get_contents(), потому-что в нашем случае использовать socket или curl безсмысленно!
Код:
$page = file_get_contents($url); // Получаем страницу
preg_match_all('|<a\s[^>]*href="([^"]+)"|i', $page, $match); // С помощю регулярки, вытягиваем все гиперссылки!
Теперь все гиперссылки находятся в массиве $match[1], а match[0] содержит все совпадения!
Можна инициализировать массивы, которые будем использовать для хранения и сортировки ссылок!
Код:
$all = array();
$js = array();
$full = array();
$local = array();
Получив все что нужно, начнём сортировку!
Код:
foreach ($match[1] as $link) {
if ($all[$link]) { // Все ссылки
continue;
}
$all[$link] = true;
if (preg_match('/^javascript:/', $link)) { // Регуляркой достаем JS ссылки
$js[] = $link;
} elseif (preg_match('/^https{0,1}:/i',$link)) { // Достаем полные ссылки
$full[] = $link;
} else {
$local[] = $link; // Остатки
}
}
Мы все сделали, осталось лишь вывести результат!
Код:
print '<table border=0>
<tr><td>Всего ссылок:</td><td>';
print strval(count($match[1])) . "</td></tr>";
print '<tr><td>Уникальных ссылок:</td><td>';
print strval(count($all)) . "</td></tr>";
print '<tr><td>Локальных ссылок:</td><td>';
print strval(count($local)) . "</td></tr>";
print '<tr><td>Полных ссылок:</td><td>';
print strval(count($full)) . "</td></tr>";
print '<tr><td>JavaScript ссылок:</td><td>';
print strval(count($js)) . "</td></tr>";
print '</table>';
?>
Вот и все!
В результате у нас получился вот такой скрипт:
Код:
<?php
echo '<form method=get>
Ваша ссылка: <input name="url" type="text" value="http://">
</form>';
$url = $_REQUEST["url"];
if (!preg_match('|^https{0,1}://|', $url)) {
print "URL $url не является валидным!";
exit(0);
}
$page = file_get_contents($url);
preg_match_all('|<a\s[^>]*href="([^"]+)"|i', $page, $match);
$all = array();
$js = array();
$full = array();
$local = array();
foreach ($match[1] as $link) {
if ($all[$link]) {
continue;
}
$all[$link] = true;
if (preg_match('/^javascript:/', $link)) {
$js[] = $link;
} elseif (preg_match('/^https{0,1}:/i',$link)) {
$full[] = $link;
} else {
$local[] = $link;
}
}
print '<table border=0>
<tr><td>Всего ссылок:</td><td>';
print strval(count($match[1])) . "</td></tr>";
print '<tr><td>Уникальных ссылок:</td><td>';
print strval(count($all)) . "</td></tr>";
print '<tr><td>Локальных ссылок:</td><td>';
print strval(count($local)) . "</td></tr>";
print '<tr><td>Полных ссылок:</td><td>';
print strval(count($full)) . "</td></tr>";
print '<tr><td>JavaScript ссылок:</td><td>';
print strval(count($js)) . "</td></tr>";
print '</table>';
?>