Все, кто занимается продвижением или делает это не специально, интересуется позициями своего сайта/сайтов. Хоть и каждый для этого дела использует разные программы/скрипты, я предлагаю же создать что-то под себя почти с нуля. Сегодня мы будем снимать позиции с популярной в России поисковой системы Яндекс. Яндекс разработчикам предлагает очень удобный интерфейс для взаимодействия. Благодаря которому мы с легкостью можем встроить на свой сайт поиск или что-нибудь полезное еще. Но сегодня мы ограничимся лишь снятием для конкретного сайта и ключевого слова позиции. В начале нам зарегистрировать свой IP-адрес, потому как Яндекс накладывает ограничение на количество запросов с одного IP-адреса, но их с лихвой хватит для нескольких сайтов. Нетерпеливым предлагаю сразу скачать исходник со всеми скриптами и картинкой, отображающейся когда идет запрос, но еще не получен результат. И тут применяется AJAX технология, реализовать которую нам помог так любимый мной jQuery.
Для начала сам файл, который и будет принимать наши запросы с позицией и сайтом, формировать XML и отправлять Яндексу.
Файл post.php
<?php
header ("Content-Type: text/html;charset=utf-8");
$host = isset($_REQUEST['host']) ? $_REQUEST['host'] : '';
$query = isset($_REQUEST['query']) ? $_REQUEST['query'] : '';
$query_esc = htmlspecialchars($query);
$host_esc = htmlspecialchars($host);
$host = preg_replace("[^http://|www\.]", '', $host);
$page = 0;
$found = 0;
$pages = 50;
$error = false;
$exit = 0;
while (!$exit && $page < $pages && $host)
{
// XML запрос
$doc = <<<DOC
<?xml version='1.0' encoding='utf-8'?>
<request>
<query>$query_esc</query>
<page>$page</page>
<maxpassages>0</maxpassages>
<groupings>
<groupby attr='d' mode='deep' groups-on-page='10' docs-in-group='1' curcateg='-1'/>
</groupings>
</request>
DOC;
$context = stream_context_create(array(
'http' => array(
'method'=>"POST",
'header'=>"Content-type: application/xml\r\n" .
"Content-length: " . strlen($doc),
'content'=>$doc
)
));
$response = file_get_contents('http://xmlsearch.yandex.ru/xmlsearch', true, $context);
if ( $response ) {
$xmldoc = new SimpleXMLElement($response);
$xmlresponce = $xmldoc->response;
if ($xmlresponce->error) {
print "Возникла следующая ошибка: " . $xmlresponce->error . "<br/>\n";
$exit = 1;
$error = true;
break;
}
$pos = 1;
$nodes = $xmldoc->xpath('/yandexsearch/response/results/grouping/group/doc/url');
foreach ($nodes as $node) {
if ( preg_match("/^http:\/\/(www\.)?$host/i", $node) ) {
$found = $pos + $page * 10;
$exit = 1;
break;
}
$pos++;
}
$page++;
} else {
print "внутренняя ошибка сервера\n";
$exit = 1;
}
}
if (!$error) {
// если что-то найдено, то выводим результат
if ($found) {
print $found;
} elseif ($host) {
print "<p>сайт находится далее, чем на ". $pages*10 ." месте в выдаче";
}
}
?>
В строке указывается количество страниц, которое нужно просмотреть в поисках своего сайта.
И теперь HTML-файл, который обернет нам это большой, но несложный код.
index.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$('document').ready(function() {
$('img.busy').hide();
$("button#push").click(function() {
$('div#output div').text('');
var host = $('input#host').val();
var query = $('input#query').val();
var queryString = '/post.php?query=' + query + "&host=" + host;
$('img.busy').bind("ajaxSend", function() {
$(this).show();
}).bind("ajaxComplete", function() {
$(this).hide();
});
$.get(queryString, function(data) {
$('div#output div').text(data);
});
});
});
</script>
</head>
<body>
<table width="40%" border="0" align="center" cellpadding="3" cellspacing="3">
<tr>
<td>хост</td>
<td><input id="host" type="text"></td>
<td><center><div id="output"><img src="img/ajax.gif" class="busy"/><div></div></div></center></td>
</tr>
<tr>
<td>запрос</td>
<td><input id="query" type="text"></td>
<td><center><button id="push">запросить</button></center></td>
</tr>
</table>
</body>
</html>
Вот и все, основную часть кода предоставил Яндекс, я по большей части дописал лишь оболочку и немного модернизировал скрипт запросов.
Этот скрипт легко можно переделать так, чтобы каждый день он запускался по расписанию и проверял позиции для некоторых ключевых слов для десятка сайтов, сохранял полученную информацию в БД. Насколько мне известно, некоторые SEO-шники получают деньги лишь имея продвигаемый сайт в десятке. Желаю, чтобы позиции ваших сайтов только росли! =)