Всем привет! Есть у меня скриптик по определению позиции сайта в поисковых системах. И с недавнего времени он перестал работать корректно, а точнее сказать, вообще перестал работать с яндексом. Причиной может служить изменение структуры выдачи яндексом или ещё что-то... не знаю точно. Смотрел сам скрипт, вроде как должен работать, но что-то никак... посмотрите пожалуйста, думаю, некоторым это будет интересно.
@words=( # список ключевых запросов через запятую
\'гипсокартон\',
\'сухие смеси\',
\'ротбанд\',
\'утепление стен\',
\'утепление\',
\'кнауф\',
\'отделочные материалы\',
\'сухие строительные смеси\',
);
$site=\'elbor.info\'; #проверяемый домен (+любой его субдомен) или выбранный субдомен
$needed=\'yg\'; #какие поисковики интересуют: yandex rambler aport google
$maxpages=6; #сколько страниц выдачи просматривать, если сайт не найден на предыдущих (вывод по 50 записей на страницу)
$proxy=\'\'; #прокси-сервер в виде IP или домена и порт ([url]http://123.456.7.89:8000[/url]), при пустом значении прокси не устанавливается
#список смотреть здесь: [url]http://core.proxyswitcher.com/proxy_list.html[/url]
$delay=1; #задержка между запросами в секундах
#_________________________
$useragent=\'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\'; # НЕ МЕНЯТЬ НА АЛЬТЕРНАТИВНЫЕ БРАУЗЕРЫ! ТОЛЬКО IE!
$timeout=100;#время ожидания ответа, в секундах
###############################################
# Евгений, PromoSite.RU
# [url]http://promosite.ru/services/monitoring.php[/url]
# ---------------------------------------------
# Updated by vladots [work@vladots.ru]
###############################################
$nowtime=time();
$date=localtime($nowtime);
$date=~s#(\\d+:)#
$1#i;
$n=$site;
$n=~s#\\.#_#g;
$sname=$n.\'_trends.html\';
open(F,"<$sname");
until(eof(F)) {$stext.=<F>;};
close F;
if (!($stext=~m#<html>#))
{
$stext=\'new\';
}
else
{
$stext=~s#(<\\!--.+?-->)#$1<td></td>#gi;
};
$code=\'%22%B8%E9%F6%F3%EA%E5%ED%E3%F8%F9%E7%F5%FA%FD%E6%E4%EB%EE%F0%EF%E0%E2%FB%F4%FF%F7%F1%EC%E8%F2%FC%E1%FE%22%B8%E9%F6%F3%EA%E5%ED%E3%F8%F9%E7%F5%FA%FD%E6%E4%EB%EE%F0%EF%E0%E2%FB%F4%FF%F7%F1%EC%E8%F2%FC%E1%FE\';
$code=~s/(%[0123456789A-F][0123456789A-F])/push(@codes,$1)/eg;
$lett=\'"ёйцукенгшщзхъэждлорпавыфячсмитьбю"ЁЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮ\';
$lett=~s/(.)/push(@letters,$1)/eg;
push(@codes, \'+\');
push(@letters, \' \');
sub urlencode
{
my $str=$_[0];
my ($k, $i, $j);
for($k=0; $k<@codes; $k++)
{
$i=$codes[$k];
$j=$letters[$k];
$str=~s#$j#$i#eg;
};
return $str;
}
use LWP::UserAgent;
use HTTP::Request;
use URI::URL;
use HTTP::Headers;
$ua = new LWP::UserAgent;
$ua->agent($useragent);
$ua->max_size(100000);
$ua->timeout($timeout);
if ($proxy ne \'\') {$ua->proxy([\'http\', \'ftp\'], $proxy);};
sub getdomain
{
my $paga=$_[0];
$paga=~s#^[url]http://##ig;[/url]
if ($paga=~m#^(.*?)[?:/]#i) {$paga=$1};
return "http://".$paga;
}
sub full
{
my $parent=$_[0];
my $child=$_[1];
my $proto;
my $domains;
my $dir;
my $file;
$parent=~s#&\\;#&#g;
$child=~s#&\\;#&#g;
if ($child=~m#\\.(xls|doc|rtf|txt|gif|jpg|jpeg|mpg|mpeg|mp3|tiff|avi|wov|exe|zip|rar|gz|tar|bz2|bz|tgz|lha|lzh|arj|mov|wav|au|qt|mpe|midi|ra|ram|rm)#i) {return \'\'};
if ($child=~m#[url]http://#i[/url]) {return $child};
if ($child=~m#^/#i)
{
if ($parent=~s|(https?://)?(([0-9a-zA-Z_-]+\\.)+[0-9a-zA-Z_-]{2,3})((/[0-9a-zA-Z_-]+?)*?)/?([^/]*?[?#.][^/]*)?$|$proto=$1; $domain=$2; $dirs=$4; $file=$6|ige )
{
if ($proto eq \'\') {$proto=\'http://\';};
$child=~s/#.*$//;
return $proto.$domain.$child;
};
}
else {
$child=~s#\\.\\./#/#ig;
if ($parent=~s|(https?://)?(([0-9a-zA-Z_-]+\\.)+[0-9a-zA-Z_-]{2,3})((/[0-9a-zA-Z_-]+?)*?)/?([^/]*?[?#.][^/]*)?$|$proto=$1; $domain=$2; $dirs=$4; $file=$6|ige )
{
while ($child=~m#^/#)
{ if ($dirs=~m#/[0-9a-zA-Z_-]+$#)
{
$child=~s#^/##;
$dirs=~s#/[0-9a-zA-Z_-]+$##;
}
else {
print "incorrect link out of dirs\\n";
$child=~s#^/##;
};
};
}
else {print "can\'t understand parent url..\\n";};
$child="/".$child;
$child=~s#^//#/#;
if ($proto eq \'\') {$proto=\'http://\';};
$child=~s/#.*$//;
return $proto.$domain.$dirs.$child;
};
}
sub get
{
my $urlo=$_[0];
$hdrs = new HTTP::Headers(Accept => \'text/html\',ACCEPT_LANGUAGE => \'ru\');
$url = new URI::URL($urlo);
$req = new HTTP::Request(GET, $url, $hdrs);
$req->referer($current);
sleep($delay);
$resp = $ua->request($req);
if ($resp->is_success)
{
$result=$resp->content;
print "\\n Got ".$urlo;
$current=$urlo;
return $result;
}
else
{
$msg=$resp->message;
print $msg;
return 0;
};
};
for($i=0; $i<@words; $i++)
{
$word=$words[$i];
$currow="<td><font size=\\"-1\\">$word</font></td>";
$navrow=\'\';
#######
if ($needed=~m#y#)
{
$current=\'http://www.yandex.ru/\';
$se=$current;
$num=\'000\';
$p=0;
$navrow.="<td><font size=\\"-1\\"><a href=\\"\\#$current\\">$current</a></font></td>";
$page=\'http://www.yandex.ru/yandsearch?text=\'.urlencode($word).\'&numdoc=50\';
$result=get($page);
while(!($result=~s#<li value=(\\d+)>\\s*<div class="title">\\s*<A tabindex="\\d+" onClick="r.this,\'web/pos=\\d+\'." href="http://([a-zA-Z0-9-]+\\.)*$site#$num=$1#igse)&&($p<$maxpages))
{
$p++;
print "\\n $p-th page... (50 on page)";
$result=~s#<a.*href="(\\/yandpage\\?[^"]*)"\\s*target=_self>следующая.*#$page=full($page,$1);#igse;
$result=get($page);
};
print "\\n\\nYour site is number ".$num." in Yandex by the -".$word."- query.";
print "\\nProgress: ".int(100*$i/(@words+0))."%\\n\\n";
$currow.="<td><a href=\\"$page\\" target=\\"_blank\\">$num</a></td>";
if ($stext eq \'new\')
{
$uprow{$se}.="<tr><td><font size=\\"-1\\">$word</font></td><!--$word_$se--><td><a href=\\"$page\\" target=\'_blank\'>$num</a></td></tr>"."\\n";
$daterow="<tr><td>Запрос|Дата</td><\\!--date--><td><font size=\\"-2\\"><a href=\\"\\#$nowtime\\">$date</a></font></td></tr>";
}
else
{
$stext=~s#(<\\!--$word_$se-->)<td></td>#$1<td><a href="$page" target=\'_blank\'>$num</a></td>#i;
$stext=~s#(<\\!--date-->)<td></td>#$1<td><font size="-2"><a href="\\#$nowtime">$date</a></font></td>#i;
};
};
#######
if ($needed=~m#r#)
{
$current=\'http://www.rambler.ru/\';
$se=$current;
$num=\'000\';
$p=0;
$rps=0; # rambler page start in <ol> tag
$navrow.="<td><font size=\\"-1\\"><a href=\\"\\#$current\\">$current</a></font></td>";
$page=\'http://search.rambler.ru/srch?words=\'.urlencode($word).\'&limit=50\';
$result=get($page);
while(!($result=~m#<li><div class="ttl"><a onclick="R.this, \'r=[^\']*\'." href="http://([a-zA-Z0-9-]+\\.)*$site#is)&&($p<$maxpages))
{
$p++;
print "\\n $p-th page...";
$hlp=$p+1;
$result=~s#<a href="(/srch\\?oe=\\d+&limit=\\d+&words=[^"]*)">$hlp</a>#$page=full($page,$1);#ei;
$result=get($page);
};
if ($result=~s#<li><div class="ttl"><a onclick="R.this, \'r=[^\']*\'." href="http://([a-zA-Z0-9-]+\\.)*$site.+$#<li><div class="ttl">#is)
{
$result=~s#<ol start="(\\d+)">#$rps=$1#igse;
$result=~s#<li><div class="ttl">#$num++#igse;
$num+=$rps-1;
};
print "\\n\\nYour site is number ".$num." in Rambler by the -".$word."- query.";
print "\\nProgress: ".int(100*$i/(@words+0))."%\\n\\n";
$currow.="<td><a href=\\"$page\\" target=\\"_blank\\">$num</a></td>";
if ($stext eq \'new\')
{
$uprow{$se}.="<tr><td><font size=\\"-1\\">$word</font></td><!--$word_$se--><td><a href=\\"$page\\" target=\'_blank\'>$num</a></td></tr>"."\\n";
$daterow="<tr><td>Запрос|Дата</td><\\!--date--><td><font size=\\"-2\\"><a href=\\"\\#$nowtime\\">$date</a></font></td></tr>";
}
else
{
$stext=~s#(<\\!--$word_$se-->)<td></td>#$1<td><a href="$page" target=\'_blank\'>$num</a></td>#i;
$stext=~s#(<\\!--date-->)<td></td>#$1<td><font size="-2"><a href="\\#$nowtime">$date</a></font></td>#i;
};
};
#######
if ($needed=~m#a#)
{
$current=\'http://www.aport.ru/\';
$a_pages = 3*$maxpages; # 15 [on page] * 3 = 45 ~= 50 ;)
if ($a_pages > 10) { $a_pages = 10; } # для перехода к следующему списку там используется >
$se=$current;
$num=\'000\';
$p=1;
$navrow.="<td><font size=\\"-1\\"><a href=\\"\\#$current\\">$current</a></font></td>";
$page=\'http://sm.aport.ru/scripts/template.dll?r=\'.urlencode($word);
$result=get($page);
while(!($result=~s#<li value=(\\d+)>\\s*<span class=title><a href="http://([a-zA-Z0-9-]+\\.)*$site#$num=$1#igse)&&($p<$a_pages))
{
$p++;
print "\\n $p-th page... (15 on page / 3 pages)";
$result=~s#<a href=(template.dll\\?r[^>]+)>$p</a>#$page=full($page,$1);#ei;
$result=get($page);
};
print "\\n\\nYour site is number ".$num." in Aport by the -".$word."- query.";
print "\\nProgress: ".int(100*$i/(@words+0))."%\\n\\n";
$currow.="<td><a href=\\"$page\\" target=\\"_blank\\">$num</a></td>";
if ($stext eq \'new\')
{
$uprow{$se}.="<tr><td><font size=\\"-1\\">$word</font></td><!--$word_$se--><td><a href=\\"$page\\" target=\'_blank\'>$num</a></td></tr>"."\\n";
$daterow="<tr><td>Запрос|Дата</td><\\!--date--><td><font size=\\"-2\\"><a href=\\"\\#$nowtime\\">$date</a></font></td></tr>";
}
else
{
$stext=~s#(<\\!--$word_$se-->)<td></td>#$1<td><a href="$page" target=\'_blank\'>$num</a></td>#i;
$stext=~s#(<\\!--date-->)<td></td>#$1<td><font size="-2"><a href="\\#$nowtime">$date</a></font></td>#i;
};
};
#######
if ($needed=~m#g#)
{
$current=\'http://www.google.com/\';
$se=$current;
$num=\'000\';
$p=0;
$gps=0; # google page start
$navrow.="<td><font size=\\"-1\\"><a href=\\"\\#$current\\">$current</a></font></td>";
$page=\'http://www.google.com/search?q=\'.urlencode($word).\'&num=10&hl=ru\';
$result=get($page);
$result=~s#<blockquote class=g>\\s*<p class=g>.+?</blockquote>##igs; # kill 2nd level snippets
while(!($result=~m#<p class=g><a.+?href="http://([a-zA-Z0-9-]+\\.)*$site#igs)&&($p<$maxpages))
{
$p++;
print "\\n $p-th page...";
$result=~s#<td nowrap><a href=(/search\\?q=[^>]*)><.+?>
<span class=b>.+?</span></a></table>#$page=full($page,$1);#ei;
$result=get($page);
};
# get google page start
$result=~s#<td id=resultStats.+?><.+?>.+?<b>(\\d+)</b>#$gps=$1#igse;
@garr=split(\'<p class=g>\',$result);
for($j=0; $j<@garr; $j++) {
$garr[$j]=~s#^<a.+?href="http://([a-zA-Z0-9-]+\\.)*$site#$num=$j+$gps-1; $j=@garr+1;#igse;
};
print "\\n\\nYour site is number ".$num." in Google by the -".$word."- query.";
print "\\nProgress: ".int(100*$i/(@words+0))."%\\n\\n";
$currow.="<td><a href=\\"$page\\" target=\\"_blank\\">$num</a></td>";
if ($stext eq \'new\')
{
$uprow{$se}.="<tr><td><font size=\\"-1\\">$word</font></td><!--$word_$se--><td><a href=\\"$page\\" target=\'_blank\'>$num</a></td></tr>"."\\n";
$daterow="<tr><td>Запрос|Дата</td><\\!--date--><td><font size=\\"-2\\"><a href=\\"\\#$nowtime\\">$date</a></font></td></tr>";
}
else
{
$stext=~s#(<\\!--$word_$se-->)<td></td>#$1<td><a href="$page" target=\'_blank\'>$num</a></td>#i;
$stext=~s#(<\\!--date-->)<td></td>#$1<td><font size="-2"><a href="\\#$nowtime">$date</a></font></td>#i;
};
};
###
$curout.="<tr>$currow</tr>\\n";
};
if ($stext eq \'new\')
{
$stext=\'<html><body><h1>Мониторинг</h1>\';
while(($k,$v)=each(%uprow))
{
$stext.="<a name=\\"$k\\"></a><h3>$site : $k</h3><table border=1 cellspacing=0 cellpadding=5>$daterow$v</table>";
};
$stext.="<hr><h1>По датам:</h1>";
};
$stext.="<a name=\'".$nowtime."\'></a><h3>$site : ".localtime($nowtime)."</h3><table border=1 cellspacing=0 cellpadding=5><tr><td>Запрос|SE</td>$navrow</tr>\\n$curout</table><p>Сайт на первых $maxpages страницах выдачи может быть не найден<hr>";
if ($st eq \'new\') {$stext.=\'</body></html>\';};
$stext=~s#000#нет на $maxpages стр.)#g;
open(F,">$sname");
print F $stext;
close F;
print "\\a";