все о веб-программировании и веб-дизайне
Держи позиции сайтов под прицелом (Yandex XML)
Все, кто занимается продвижением или делает это не специально, интересуется позициями своего сайта/сайтов. Хоть и каждый для этого дела использует разные программы/скрипты, я предлагаю же создать что-то под себя почти с нуля. Сегодня мы будем снимать позиции с популярной в России поисковой системы Яндекс. Яндекс разработчикам предлагает очень удобный интерфейс для взаимодействия. Благодаря которому мы с легкостью можем встроить на свой сайт поиск или что-нибудь полезное еще. Но сегодня мы ограничимся лишь снятием для конкретного сайта и ключевого слова позиции. В начале нам зарегистрировать свой IP-адрес, потому как Яндекс накладывает ограничение на количество запросов с одного IP-адреса, но их с лихвой хватит для нескольких сайтов. Нетерпеливым предлагаю сразу скачать исходник со всеми скриптами и картинкой, отображающейся когда идет запрос, но еще не получен результат. И тут применяется AJAX технология, реализовать которую нам помог так любимый мной jQuery.
Для начала сам файл, который и будет принимать наши запросы с позицией и сайтом, формировать XML и отправлять Яндексу.
Файл post.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <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-шники получают деньги лишь имея продвигаемый сайт в десятке. Желаю, чтобы позиции ваших сайтов только росли! =)
| Print article | This entry was posted by Вредный on 03.03.2010 at 20:20, and is filed under jQuery, php, программирование. Follow any responses to this post through RSS 2.0. Вы можете оставить комментарий или трэкбэк с вашего сайта. |