Сен 4

Плагин «Позиции в Яндексе»

Рубрики: Php Метки:  Количество просмотров: 1 743

Пора наполнять полезные утилиты новыми плагинами. Это мой первый плагин который добавлен в рубрику «Seo», надеюсь что не последний.

яндекс

Пользоваться плагином определения позиций в яндексе можно уже сейчас. Вот как он работает:

  1. Вводите поисковую фразу, например «рыбалка»
  2. Вбиваете хостнейм, позицию которого нужно найти, например «rybalka.tv»

Примерно такой будет результат:
позиции в яндексе

Мой определитель позиций отправляет максимум 2 XML запроса на сервер яндекса, в каждом ответе ожидается по 100 ссылок (кстати странно что в документации говорится о возвращаемом максимуме в 20 ссылок), поэтому если ваш сайт находится дальше двухсотой позиции, то плагин уведомит об этом.

Разработчикам:
Работает этот плагин на основе сервиса Яндекс.XML. К сожалению есть ограничения которые установил сам яша. Это количество запросов в сутки. На данный момент их должно быть не более 1000 в сутки.

Если захочется установить определитель позиций на свой сайт, придется сделать следующие действия:

  1. Авторизуйтесь (ссылка «Войти» вверху страницы). Если у вас нет логина и пароля на Яндексе — зарегистрируйтесь.
  2. Введите свой IP-адрес. Здесь я остановлюсь подробнее. Яндекс.XML просит ввести и зарегистрировать IP адрес с которого будут делаться запросы на их XML сервер.

    Поэтому вводим IP адрес на этой странице. Только после этого можно делать запросы.

Исходники:
В примерах на Яндекс.XML есть исходные коды подобной утилиты для определения позиций для языков php и perl. Посмотрите здесь — http://xml.yandex.ru/examples.xml?id=372989. Ее я взял за основу для моего плагина. Внес несколько изменений, и получилась полезная утилита.

Итак исходник моего плагина:

<?php

	function get_title(){
		echo 'Определение позиций сайта в&nbsp;Яндексе&nbsp;&#8212;';
	}

	function get_content(){

		if( isset($_POST["send"]) && isset($_POST["key"]) && isset($_POST["hostname"]) ){

			$key = htmlspecialchars($_POST["key"]);
			$hostname = htmlspecialchars($_POST["hostname"]);
			$host = preg_replace("[^http://|www\.]",'',$_POST["hostname"]);

			$page = $found = 0;
			$pages = 2;
			$error = false;
			$exit = $_SERVER["REQUEST_METHOD"] != 'POST';

			// мы должны получить место сервера в выдаче по некому запросу.
			// делаем запрос по десять ссылок на страницу и запрашиваем 50
			// страниц. при нахождении сервера останавливаемся и выдаем его
			// место в выдаче
			while (!$exit && $page < $pages && $host){

			    // XML запрос
			    $xml_code = "<?xml version='1.0' encoding='utf-8'?>" .
					"<request>" .
						"<query>$key</query>" .
						"<page>$page</page>" .
			    		"<maxpassages>0</maxpassages>" .
			    		"<groupings>" .
			        		"<groupby attr='d' mode='deep' groups-on-page='100' docs-in-group='1' curcateg='-1'/>" .
			    		"</groupings>" .
					"</request>";

			    $context = stream_context_create(
			    	array(
				        'http' => array(
				            'method'=>"POST",
				            'header'=>"Content-type: application/xml\r\n" .
			    	                  "Content-length: " . strlen($xml_code),
			        	    'content'=>$xml_code
			        	)
			    	)
			    );

	    		if( $response = file_get_contents('http://xmlsearch.yandex.ru/xmlsearch',true,$context) ){

			        $xmldoc = new SimpleXMLElement($response);
	        		$xmlresponce = $xmldoc->response;

			        if ($xmlresponce->error) {
			            echo "Возникла следующая ошибка: " . $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) {

						$found++;

			            // если URL начинается с имени хоста, выходим из цикла
			            if ( preg_match("/^http:\/\/(www\.)?$host/i", $node) ) {
			                $exit = 1;
			                break;
			            }
			            $pos++;
			        }

	        		$page++;
			    }else{
			        echo "внутренняя ошибка сервера\n";
			        $exit = 1;
			    }
			}

			if( !$error ) {

			    if( $found < 200 ) {
			        echo "<table align=\"center\" id=\"info\"><tr><td><h1>&laquo;" . $host . "&raquo;</h1></td><td><h3>находится на месте</h3></td><td><h1 style=\"color: blue;\">№" . $found . "</h1></td><td><h3>по запросу</h3></td><td><h1>&laquo;$key&raquo;</h1></td></tr></table>";
			    }
			    else{
			    	echo "<center>На первых 20 страницах этого сайта нет.</center>";
			    }
			}		

		}

?>
		<br /><br />
		<form method="post">
			<table cellpadding="4" style="font-size: 18px;" align="center">
				<tr>
					<td>Ключевое слово:</td><td><input type="text" name="key" /></td>
				</tr>
				<tr>
					<td>Хостнейм:</td><td><input type="text" name="hostname" /></td>
				</tr>
				<tr>
					<td colspan="2" align="center"><input type="submit" name="send" value="Узнать позицию!" /></td>
				</tr>
			</table>
		</form>

<?php		

	}

?>

Постовой:
Рыбалка — разговоры о рыбалке. Секреты рыбной ловли, место встречи рыбаков

Внимание! Данный скрипт устарел. Новая версия доступна на странице
http://www.samborsky.com/yandex-positions/

Другие статьи автора

Комментарии

  1. Цитировать Axiom777

    Полезная штука!
    Спасибо!

Добавить комментарий