. Cоздание плагина wordpress – часть 4 | Makarou.com - когда сайты превращаются в бизнес

Cоздание плагина wordpress – часть 4

Урок по созданию плагина wordpress - часть 4

Дорогие друзья, вот и заканчивается наш урок по созданию плагина для wordpress.

Сегодня мы с вами рассмотрим  серверный скрипт — Yandex XML, который будет обрабатывать наши запросы к поисковику, и выдавать позиции сайта по ключевой фразе.

Ну что же, приступим. :)

Создадим пустой php файл в директории плагина, и назовем его search. Я взял готовый скрипт, который предоставляет Яндекс. Но пришлось переписать основу скрипту, под нашу поисковую форму.

Привожу вам скрипт который предоставил Яндекс:


// Для запуска требуется PHP 5

header ("Content-Type: text/html;charset=utf-8");

// верхняя части страницы

include "template_header.html";

# обработка полей формы

$host  = array_key_exists('host', $_REQUEST)  ? $_REQUEST['host']  : '';

$query = array_key_exists('query', $_REQUEST) ? $_REQUEST['query'] : '';

$query_esc = htmlspecialchars($query);

$host_esc  = htmlspecialchars($host);

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

// спрашивать яндекс только после сабмита формы

$exit = $_SERVER["REQUEST_METHOD"] != 'POST';

$page  = 0;

$found = 0;

$pages = 20;

$error = false;

print "<table width='100%'><tr><td width='16%'/><td>";

// мы должны получить место сервера в выдаче по некому запросу.

// делаем запрос по десять ссылок на страницу и запрашиваем 20

// страниц. при нахождении сервера останавливаемся и выдаем его

// место в выдаче

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 ) {

// print $response->getBody();

$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) {

// если URL начинается с имени хоста, выходим из цикла

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 "<p>сайт «$host» находится на месте № $found по запросу «$query»</p>";

print "<p>Попробуйте узнать позицию другого сайта!</p><br/>\n";

} elseif ($host) {

print "<p>сайт «$host» находится далее, чем на ". $pages*10 ." месте в выдаче «Яндекса»";

print" по запросу «$query»</p><p>Попробуйте узнать позицию другого сайта!</p><br/>\n";

} else {

print "<p>Узнайте позицию сайта в выдаче «Яндекса» по запросу!</p>";

}

}

?>

</td></tr></table>

<form method='POST' accept-charset='utf-8'>

<table width='100%'>

<tr>

<td width="16%"/>

<td width="75%">

<table>

<tr>

<td><label for='query'>Запрос:</label></td>

<td><input type='text' name='query' id='query' value='<?php print $query_esc ?>'/>   Пример: волшебные травы</td>

</tr>

<tr>

<td><label for='host'>Имя сервера:</label></td>

<td><input type='text' name='host' id='query' value='<?php print $host_esc ?>'/>   Пример: narcom.ru</td>

</tr>

<tr>

<td/>

<td><input type="submit" value="Искать!"/></td>

</tr>

</table>

</td>

<td width="9%">

</tr>

</table>

</form>

<?php

// дописываем html

include "template_footer.html";

Переписав основную часть кода :) , наш скрипт превращается в:


header('Content-type: text/html; charset=windows-1251');

if(version_compare(phpversion(), '5.0.0', '<')){

exit('Ваша версия php ('.phpversion().'), не поддерживает данный плагин!');

}

#-> обработка полей формы

$_POST['p']=trim($_POST['p']);

$_POST['h']=trim($_POST['h']);

$_POST['s']=trim($_POST['s']);

#-> more

if(strlen($_POST['p'])===0){exit('Ошибка: Вы не ввели ключевую фразу!');}

$query_esc = htmlspecialchars($_POST['p']);

if(strlen($_POST['h'])===0){exit('Ошибка: Вы не ввели URL вашего сайта!');}

if(!preg_match("/^(https?:\/\/([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6})$/i",$_POST['h'])){exit('Ошибка: Неверный формат URL, пользуйтесь подсказкой!');}

if(!preg_match('|^[\d]*$|', $_POST['s'])){exit('Ошибка: Вы не выбрали поисковую систему!');}

if($_POST['s']<1 or $_POST['s']>2){exit('Ошибка: Вы не выбрали поисковую систему!');}

#-> Yandex search ===

if(strcmp($_POST['s'],1)===0){

$host = preg_replace("[^http://]", '', $_POST['h']);

#-> options

$page  = 0;

$found = 0;

$pages = 30;

$error = false;

#-> go go go

while($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 "Ошибка: ".iconv("UTF-8", "WINDOWS-1251", $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 "<p>Ваш сайт находится на месте № ".$found." по запросу «".iconv("UTF-8", "WINDOWS-1251", $query_esc)."»</p>";

print "<p>Попробуйте узнать позицию другого сайта!</p><br/>\n";

}elseif($host){

print "<p>Ваш сайт находится далее, чем на ". $pages*10 ." месте";

print" по запросу «".iconv("UTF-8", "WINDOWS-1251", $query_esc)."»</p><p>Попробуйте узнать позицию по другой ключевой фразе!</p><br/>\n";

}else{

print "<p>Узнайте позицию сайта в выдаче «Яндекса» по запросу!</p>";

}

}

exit();

}

if(strcmp($_POST['s'],2)===0){

exit('Гугл пока что не работает');

}

Как вы можете заметить, пришлось поменять кодировку на windows-1251, так как были косяки с отображаемыми данными. J Так же сделал проверку на вводимые данные. Переменная pages – отвечает за то, на скольких страницах выдачи искать нужный сайт, по умолчанию стоит 20, я поставил 30, так как это значение оказалось самое оптимальное. Я тестировал со значениями 40 -50, но иногда скрипт выдавал ошибку, о превышении лимита выполнения скрипта. Можно поставить больше, если только у вас на сервере время выполнения скрипта стоит выше, чем стандартное значение.

Теперь немного разберем параметры, которые передаются скрипту от AJAX скрипта. AJAX скрипт мы писали в прошлом уроке.

$_POST['p'] – переменная передает значение поля – ключевая фраза.

$_POST['h'] – переменная передает значение поля – URL вашего сайта.

$_POST['s'] – переменная передает значение поля – Поисковая система.

Лимит проверок в день не может превышать 1000 раз. Для этого надо добавить IP адрес вашего сайта здесь — http://xml.yandex.ru/ .

Вот и все,  друзья. :)

На этом наш урок закончен, можете тестировать получившийся скрипт. Если у кого-то возникли трудности или вопросы, пишите в комментарии, всем помогу. ;)

Вот готовый вариант плагина — Поиск позиции в Яндекс.

Постовой

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

WordPress

Понравился пост? добавь его к себе в закладки:
Хочешь быть всегда в курсе обновлений блога? подписывайся через: