Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Нужна прога для мониторинга сайтов (https://forum.antichat.xyz/showthread.php?t=137544)

^_WhitE_DeMoN_^ 26.08.2009 20:57

Нужна прога для мониторинга сайтов
 
Нужна прога которая следила бы за присутствием моей ссылки/HTML/JavaScript кода на чужых сайтах.
Вчера целый день гуглил, сегодня Ачат перекаповал - не нашол :( Помогите...

POS_troi 26.08.2009 22:27

Автоматом или полу автоматом?

Готовое решение не предложу (принципильно) но дам направление

Список ресурсов +

PHP/Perl скрипт - тянеш страниц с ресурсов по списку +

Загоняеш в регулярку и ищеш свой код +

не нашол , отправляеш себе мыло

Это все в крон (под винду тоже есть порт)

Примерно с полтинник строк кода

^_WhitE_DeMoN_^ 27.08.2009 00:31

Да какую нибуть... Любая помощ или инфо будет очень полезна ! Нужно чтобы скрипт/прога обхажывала указанные сайты и их страницы в поиске нужного кода, в конце показавала результат. Желательно обойтись без спама на мыло :D Текущий список сайтов ~ 50 штук, будет стремительно увеличиватся...

+casper+ 27.08.2009 01:01

Пишеш php скрипт. Гет страницы, парсинг, запись результов в файл. А вот чтоб следить чтоб ссылка находилась в видимом поле низнаю и как.

geforse 27.08.2009 09:29

код написал, но только есть одна загвоздка.
не могу придумать как найти нужную ссылку на всей странице ?
Что в preg_match нужно написать, чтобы он нашёл нужный текст ?

ТС, вид у ссылки какой ?
<a href="http://antichat.ru">ANTICHAT.RU</a> ?

^_WhitE_DeMoN_^ 27.08.2009 17:59

@+casper+ На этом варианте остановлися...
@geforse Надо еще придумать как найти ссылку на ВСЕХ остальных станицах сайта =) Тоесть, скрипт должен искать линки, ведущие на страницы сканируемого сайта и проверять о наличии кода там (можно и обойтись... но не желательно). Вид ссылки может быть разный, надо искать это <a href="http://antichat.ru
С JavaScript-ом, думаю будет лекче, он один для всех, но спец-символов полно...

Еще думаю - не лучше ли будет, впарить еще один JavaScript к линкам/коду который будет орать моему серверу - "Я на http://antichat.ru/index.php !". Но тогда могут вырезать ссылку и оставить только оратора =)

Иду доки курить, скрипты искать, голову мучеть...

^_WhitE_DeMoN_^ 27.08.2009 19:13

Цитата:

не могу придумать как найти нужную ссылку на всей странице ?
Загоняем страницу в переменную с file_get_contents()

Gifts 27.08.2009 19:24

^_WhitE_DeMoN_^ Решили конкурировать с сапой, но на пхп все сделать? :D
PHP код:

$input file_get_contents('Страниццо');
$array = array('<a href="http://ссылка1">http://ссылка1</a>''<a href="http://ссылка2">http://ссылка2</a>''вообще любой текст');
foreach(
$array as $one)
{
echo 
'Текст '.$one.(strpos($input,$one)!==false?' есть ':' отсутствует ').'на странице <br/>';



geforse 27.08.2009 19:26

Цитата:

Сообщение от ^_WhitE_DeMoN_^
Загоняем страницу в переменную с file_get_contents()

Как же это я не догадался :D

Я больше cURL люблю, чем file_get_contents()
Я имел ввиду что нужно написать в preg_match_all(), чтобы нашлась нужная ссылка

Быть может найти все ссылки -> Поместить в массив -> Циклом проверять каждый элемент массива на соответствие с нужной...

^_WhitE_DeMoN_^ 27.08.2009 20:06

@Gifts Большая конкуренция не получится =) Но надо же както выживать... Да и люди не любят back-link ставить, придется заставить =)
Спасибо за код, очень помогло !
@geforse С cURL-ом не знаком... Все равно...
Работаю над етим =)

+ Потом буду ставить, кто больше поможет... Спасибо всем !

Вот пока что накодил:
Код:

<?php 
$opts = array( 
  'http'=>array( 
    'method'=>"GET", 
    'header'=>"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7\nReferer: http://для.красоты\n  "
  ) 
); 

$context = stream_context_create($opts); 
  $a = file_get_contents('http://ищем.сдесь', false,$context); 
if (preg_match("/<a href=\"http:\/\/искомый.линк/i", $a)) {
    echo "Линк найден.";
} else {
    echo "Линк не найден.";
}

?>


^_WhitE_DeMoN_^ 27.08.2009 23:57

@geforse Ты мне об этом говорил ?
PHP код:

<?php   
$opts 
= array(  
  
'http'=>array(  
    
'method'=>"GET",  
    
'header'=>"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7\nReferer: http://откуда.пришол/\n  " 
  
)  
);  

echo 
'<html><head><style type="text/css">#ok {font-weight: bold; color: green; } #no {font-weight: bold; color: red; }</style></head><body>';

$context stream_context_create($opts); 
$urls  = array('сайт.1''сайт.2''и.так.далее');
foreach(
$urls as $url)
{
$input file_get_contents('http://'.$urlfalse,$context); 
$array = array('a href="http://че.ищем''a href="http://может.еще.че''название.нашего.сервиса'); 
foreach(
$array as $one

echo 
$url.' >>> '.$one.(strpos($input,$one)!==false?' <p id="ok">OK</p> ':' <p id="no">BAD</p> ').'<br/>'
}  
}

echo 
'</body></html>';
?>

Дописал чуть :D

Но какой метод лучше пользовать, preg_match или strpos ?

Еще, база адресов у меня находится в .dat (txt) файле, вот в таком формате
Код:

циферки.числа||циферки.числа||0||0||текст||http://адрес.сайта/||
циферки.числа||циферки.числа||1||0||текст||http://адрес.сайта/||

Буду разжевовать как их выдернуть от туда и запихнуть напр. в $urls

geforse 28.08.2009 15:37

Цитата:

Сообщение от ^_WhitE_DeMoN_^
@geforse Ты мне об этом говорил ?

Нет, это не мой код

^_WhitE_DeMoN_^ 28.08.2009 20:23

Да знаю что не твой :D
Я про это:
Цитата:

Быть может найти все ссылки -> Поместить в массив -> Циклом проверять каждый элемент массива на соответствие с нужной...

^_WhitE_DeMoN_^ 30.08.2009 02:02

Помогитее =)

Вот че написал:
PHP код:

<?php   
$opts 
= array(  
  
'http'=>array(  
    
'method'=>"GET",  
    
'header'=>"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7\nReferer: http://откуда.пришли/\n  " 
  
)  
);  

    echo 
'<html><head><style type="text/css">#ok {font-weight: bold; color: green; } #no {font-weight: bold; color: red; }</style></head><body>';
    
$line file('http://мой.сайт/папка/index.dat'FILE_IGNORE_NEW_LINES);
foreach(
$line as $value) {
    if(
strlen($value)<20) continue;
    
$value     str_replace(array("http://","www.","/"),array('','',''),$value);
    
$urls      explode('||',$value);

    
$context   stream_context_create($opts);
    foreach(
$urls[5] as $url) {
        
$input file_get_contents('http://'.$urlfalse,$context); 
        
$array = array('a href="http://че.ищем''a href="http://может.еще.че''название.сервиса'); 
        foreach(
$array as $one) { 
            echo 
$url.' >>> '.$one.(strpos($input,$one)!==false?' <p id="ok">OK</p> ':' <p id="no">BAD</p> ').'<br/>'
        }  
    }
}
echo 
'</body></html>';
?>

Но, скрипт ругается:
Цитата:

Warning: Invalid argument supplied for foreach() in /home/....../parser.php on line 18
Тоесть на foreach($urls[5] as $url)
Че я не так делаю ? Поправьте меня... Доки курить нет времени и желания, дрыхнуть пора :( Но, Ачат не спит ;)

^_WhitE_DeMoN_^ 30.08.2009 16:07

Цитата:

Сообщение от FireFenix
это значит, что у тебя не передаётся массив в $urls[5]

:confused: Но echo urls[5]; выводит все нужные елементы массива ..? Предложте решение...

m0Hze 30.08.2009 16:15

Цитата:

Сообщение от ^_WhitE_DeMoN_^
:confused: Но echo urls[5]; выводит все нужные елементы массива ..? Предложте решение...

Если срабатывает ехо,то эо не массив,а скорее элемент массива.Пробуй: $url as $array

^_WhitE_DeMoN_^ 30.08.2009 16:51

Извини, но, я так думаю или ты правда перепутал чето...
Цитата:

Сообщение от m0Hze
$url as $array

??

//Edit:
Какой же я придурок...
PHP код:

<?php   
$opts 
= array(  
  
'http'=>array(  
    
'method'=>"GET",  
    
'header'=>"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7\nReferer: http://откуда.пришол/\n  " 
  
)  
);  

echo 
'<html><head><style type="text/css">#ok {font-weight: bold; color: green; } #no {font-weight: bold; color: red; }</style></head><body>';
    
$line file('http://мой.сайт/папка/index.dat'FILE_IGNORE_NEW_LINES);
foreach(
$line as $value
{
    if(
strlen($value)<20) continue;
    
$value     str_replace(array("http://","www.","//|","/|"),array('','','|','|'),$value);
    
$urls      explode('||',$value);
    
$context   stream_context_create($opts);
    
$input     file_get_contents('http://'.$urls[5], false,$context); 
    
$array     = array('a href="http://че.ищем''a href="http://может.еще.че''Имя.нашего.сервиса'); 
    foreach(
$array as $one
        { 
        echo 
$urls[5].' >>> '.$one.(strpos($input,$one)!==false?' <p id="ok">OK</p> ':' <p id="no">BAD</p> ').'<br/>'
        }  
    
}
echo 
'</body></html>';
?>

Разобрался...
У кого есть идеи, пусть не стесняется :D Может лучше вариант предложит...

FireFenix 31.08.2009 17:59

если это некий чекер, то лучше curl_multi или просто curl

Код:

$value    = str_replace(array("http://","www.","//|","/|"),array('','','|','|'),$value);
    $urls      = explode('||',$value);

имхо лучше регуляркой
Код:

циферки.числа||циферки.числа||1||0||текст||http://адрес.сайта/||

preg_match_all('/([0-9.]*)\|\|([0-9.]*)\|\|1\|\|0\|\|([a-z]*)\|\|([^\n|$]*)/ims', $array, $match)
как-то так

Код:

    $array    = array('a href="http://че.ищем', 'a href="http://может.еще.че', 'Имя.нашего.сервиса');
    foreach($array as $one)
        {
        echo $urls[5].' >>> '.$one.(strpos($input,$one)!==false?' <p id="ok">OK</p> ':' <p id="no">BAD</p> ').'<br/>';
        }

этот кусок вообще индусский код.... Если идёт выборка - такие вещи делаются регуляркой, если же просто проверка, то лучше вынести отдельно, чем лепить в 1 строку

^_WhitE_DeMoN_^ 31.08.2009 23:00

FireFenix Большое спасибо, люблю такие мнения.
Да, это должно быть похоже на чекер :D
С curl-ом не знаком...
Особых преимуществ регулярных выражений сдесь не вижу, а и я о них еще только читаю :)
А про индусский код - согласен, посмотрю что можно сделать, как только дочитаю... и еще - этот кусок не мой, один чувак его скинул в тему :D

rewiaca 03.09.2009 14:44

А можно намного проще, просто посылать на гугл запросы в виде:
site:www.сайт.domen "href="твой сайт""

Расскажу что я юзал:
Есть бесплатная прога для мониторинга http://www.yccy.ru/ там много возможностей, но одна из:
Цитата:

Пакетная проверка обратных ссылок(текста ссылки) в Яндексе, Google.
Также есть анализ беклинков на определенном сайте, можно тоже свой скрипт туда прикрутить, чтобы парсил определенный урл(твой) http://www.pr-cy.ru/link_extractor/

И сайт http://www.backlinkwatch.com но он выдает все беклинки которые проиндексированы


Время: 06:47