Показать сообщение отдельно

Экранный анализатор на PHP
  #73  
Старый 31.03.2010, 01:06
Dr.Brain
Banned
Регистрация: 04.09.2009
Сообщений: 67
Провел на форуме:
178600

Репутация: 22
Отправить сообщение для Dr.Brain с помощью ICQ
По умолчанию Экранный анализатор на PHP



Сегодня я раскажу как с помощю 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>';
?>