АРМАДА
Cофт для внутреннего анализа страниц сайта и блога
Новая тема Написать ответ Advanced Hosters - профессиональный хостинг

seogrot
Свой
Зарегистрирован: 20.11.2010
Сообщений: 86
Обратиться по нику
# Добавлено:Пт Сен 02, 2011 10:38 amДобавить в избранноеОтветить с цитатой
Добрый день, нужен адекватный софт, чтоб вытянуть все url адреса внутренних страниц сайта, если на сайте есть блог, то все url адреса постов блога, и получить к каждой странице тайтл и киверды (из метатегов).

Нужно что-то вроде E RIDA 2, (впринципе там функционал вполне нормальный, только если на сайте есть блог, для одного сайта просканиаровало, для другого нет, хз...).

Какие есть варианты?

Ну или если ничего подобного нет, подошёл бы вариант, загрузить список внутренних ссылок а программа (скрипт) вытянула для каждой страницы метатеги.
Лучший хостинг для WordPress

tribe
Профессионал
Зарегистрирован: 02.09.2007
Сообщений: 504
Обратиться по нику
# Добавлено:Пт Сен 02, 2011 12:26 pmОтветить с цитатой
есть прога xenu для получения урлов сайта, ответы сервера, h1 и тп
сам юзаю скрипт, перед запуском создай
1. urls.txt - сюда урлы ложи
2. запусти geturls.php
3. info.csv - результат в таблице по стлбцам - урл, тайтл, описание, слова, h1.

2. geturls.php
Код:
<?php

define("INPUT_FILE",  "urls.txt");
define("OUTPUT_FILE", "info.csv");

if (!file_exists(INPUT_FILE))
{
   echo "Input file not found";
   return;
}

$fpOut = fopen(OUTPUT_FILE, "w");

foreach(file(INPUT_FILE) as $line)
{
   $url = trim($line);

   if (empty($url))
      continue;
   
   $pageContent = file_get_contents($url);
   $pageTitle = $pageHeader = null;
   $charset = null;
   $res = array();
   
   if (!empty($pageContent))
   {      
      $meta = array();
      preg_match_all('/<[\s]*meta[\s]*http-equiv[\s]*="?([^>"]*)"?[\s]*content="?([^>&­quot;]*)"?[\s]*[\/]?[\s]*>/si', $pageContent, $res, PREG_PATTERN_ORDER);
                  
      for ($i = 0; $i < count($res[1]); $i++)
      {
         $meta[strtolower(trim($res[1][$i]))] = $res[2][$i];
      }

      foreach ($http_response_header as $header)
      {
         if (preg_match('@^Content-Type:.*?charset *= *([^;]+)@i', $header, $res))
         {
            $charset = strtolower(trim($res[1]));
            break;
         }
      }
      
      if (!empty($meta['content-type']))
      {
         if (preg_match('@charset *= *([^;]+)@i', $meta['content-type'], $res))
         {
            $charset = strtolower(trim($res[1]));
         }
      }
      
      if ($charset != null && $charset != 'windows-1251')
      {
         $pageContent = iconv($charset, "windows-1251//IGNORE", $pageContent);
      }
      
      echo "{$url} {$charset}<br>\r\n";

      $meta = array();      
      preg_match_all('/<[\s]*meta[\s]*name[\s]*="?([^>"]*)"?[\s]*content="?([^>"&­#93;*)"?[\s]*[\/]?[\s]*>/si', $pageContent, $res, PREG_PATTERN_ORDER);
      
      for ($i = 0; $i < count($res[1]); $i++)
      {
         $meta[strtolower(trim($res[1][$i]))] = $res[2][$i];
      }
   
      if (preg_match('@<title.*?>(.+?)</title>@im', $pageContent, $res))
      {
         $pageTitle = $res[1];
      }
      
      if (preg_match_all('@<h1.*?>(.+?)</h1>@im', $pageContent, $res))
      {
         if (count($res[1]) == 1)
            $pageHeader = $res[1][0];
         else
            $pageHeader = implode("; ", $res[1]);
      }
      
      $outStr = array();
      $outStr[] = safeString($url, false);
      $outStr[] = safeString($pageTitle);
      $outStr[] = safeString(isset($meta['keywords']) ? $meta['keywords'] : "");
      $outStr[] = safeString(isset($meta['description']) ? $meta['description'] : "");
      $outStr[] = safeString($pageHeader);
      
      fputs($fpOut, implode(";", $outStr) . "\r\n");
   }
}

fclose($fpOut);

function safeString($str, $isTrim = true)
{
   if ($isTrim)
      preg_replace("@([ \r\n\t]+)@", ' ', $str);

   return '"' . str_replace('"', '""', trim($str)) . '"';
}
   
?>


seogrot
Свой
Зарегистрирован: 20.11.2010
Сообщений: 86
Обратиться по нику
# Добавлено:Пт Сен 02, 2011 1:54 pmОтветить с цитатой
Большое спасибо за прогу и отдельное за скрипт, пока ещё не проверил, но судя по всему именно, то что мне нужно!
Лучший хостинг для WordPress

seogrot
Свой
Зарегистрирован: 20.11.2010
Сообщений: 86
Обратиться по нику
# Добавлено:Пт Сен 02, 2011 2:38 pmОтветить с цитатой
seogrot писал(а):
Большое спасибо за прогу и отдельное за скрипт, пока ещё не проверил, но судя по всему именно, то что мне нужно!



xenu - не подошла, там она description определяет, а keywords нет((. Буду пробовать юзать скрипт.
Лучший хостинг для WordPress

seogrot
Свой
Зарегистрирован: 20.11.2010
Сообщений: 86
Обратиться по нику
# Добавлено:Сб Сен 03, 2011 10:59 amОтветить с цитатой
А Вы бы не могли выслать мне файл geturls.php а то уже часа полтора бьюсь над скриптом никак не могу его коректно заставить работать.
кое-какие ошибки повылазили при запуске в частности здесь
Код:
$meta[strtolower(trim($res[1][$i&#
93;))] = $res[2][$i];



заменил

Код:
&#
93; на ] и переносы строки поубирал кое-где



сейсас анализирует урлов 50 из файла и определяет тайтл с h1, мететеги не хочет ну и выдаёт ошибку

Код:

Maximum execution time of 30 seconds exceeded in Z:\home\site.com\www\pars\geturls.php on line 21



Буду признателен если выложите рабочую версию скрипта, очень надо...
Лучший хостинг для WordPress

Akceptor
Профессионал
Зарегистрирован: 17.05.2010
Сообщений: 606
Обратиться по нику
# Добавлено:Сб Сен 03, 2011 5:47 pmОтветить с цитатой
Цитата:
Maximum execution time of 30 seconds exceeded in Z:\home\site.com\www\pars\geturls.php on line 21


Это не в скрипте проблема, а в настройках пхп. Походу, скрипт не успевает отработать и ему выставляется таймаут.
Попробуй добавить
Код:
<?php ini_set("max_execution_time", "60"); ?>

, поправить ручками в php.ini или же
Код:
set_time_limit(60)


(Вместо 60 нужный лимит)
Думки вголос

exolon
V.I.P.
Зарегистрирован: 22.11.2007
Сообщений: 2397
Обратиться по нику
# Добавлено:Сб Сен 03, 2011 7:23 pmОтветить с цитатой
Запускай лучше из консоли.

seogrot
Свой
Зарегистрирован: 20.11.2010
Сообщений: 86
Обратиться по нику
# Добавлено:Вс Сен 04, 2011 10:31 amОтветить с цитатой
Akceptor писал(а):
Цитата:
Maximum execution time of 30 seconds exceeded in Z:\home\site.com\www\pars\geturls.php on line 21


Это не в скрипте проблема, а в настройках пхп. Походу, скрипт не успевает отработать и ему выставляется таймаут.
Попробуй добавить
Код:
<?php ini_set("max_execution_time", "60"); ?>

, поправить ручками в php.ini или же
Код:
set_time_limit(60)


(Вместо 60 нужный лимит)



С этим разобрался, спасибо. А почему метаданные не хочет парсить не знаете?
Лучший хостинг для WordPress
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ

Перейти:  





Генеральный спонсор



Партнеры