» » » Отправка в пинг сервис Яндекс Поиска [PHP]

Отправка в пинг сервис Яндекс Поиска [PHP]

Отправка в пинг сервис Яндекс Поиска [PHP]

 

Незамысловатая функция для отправки адреса сайта в Яндекс. Но нужно регистрировать свой поиск для сайта и получить секретный ключ.

<?php

function pingYandex($url, $log=true)
    {
        $key = '866a40f3931ad0c167356e5a2b6d8ad565fc05b3'; // специальный ключ
        $yalogin = 'puritan'; //логин Яндекса
        $searchId = '2030335';// айди поиска для сайта


        if ( $url ) {
            $postdata = http_build_query(array(
                'key' => urlencode($key),
                'login' => urlencode($yalogin),
                'search_id' => urlencode($searchId),
                //'pluginid' => urlencode($pluginId),
                //'cmsver' => $cmsver,
                //'publishdate' => $this->get_date($articleInfo['publish_up']),
                'urls' => $url
                ));

            $host = 'site.yandex.ru';
            $length = strlen($postdata);

            $out = "POST /ping.xml HTTP/1.1\r\n";
            $out .= "HOST: " . $host . "\r\n";
            $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
            $out .= "Content-Length: " . $length . "\r\n\r\n";
            $out .= $postdata . "\r\n\r\n";
            try {
                $errno = '';
                $errstr = '';
                $result = '';
                $socket = @fsockopen($host, 80, $errno, $errstr, 30);
                if ($socket) {
                    if (!fwrite($socket, $out)) {
                        throw new Exception("unable to write");
                    } else {
                        while ($in = @fgets($socket, 1024)) {
                            $result.=$in;
                        }
                    }
                } else {
                    throw new Exception("unable to create socket");
                }
                fclose($socket);
                if ($log) {
                $result_xml = array();
                preg_match('/(<.*>)/u', $result, $result_xml);
                if (count($result_xml) && function_exists('simplexml_load_string')) {
                    $result = array_pop($result_xml);
                    $xml = simplexml_load_string($result);

                if(isset( $xml -> error ) && isset( $xml -> error -> code)) {
                    if($xml -> error -> code){
                        $errorcode = (string)$xml -> error -> code;

                        if (($errorcode=="ILLEGAL_VALUE_TYPE")||($errorcode=="SEARCH_NOT_OWNED_BY_USER")||($errorcode=="NO_SUCH_USER_IN_PASSPORT"))
                            $message = "Один или несколько параметров в настройках плагина указаны неверно - ключ (key), логин (login) или ID поиска (searchid).";
                        elseif ($errorcode == "TOO_DELAYED_PUBLISH")
                            $message = "Максимальный срок отложенной публикации - 6 месяцев";
                        elseif ($errorcode=="USER_NOT_PERMITTED")
                        {
                            $errorparam = (string)$xml -> error -> param;
                            $errorvalue = (string)$xml -> error -> value;
                            if ($errorparam=="key")
                                $message = "Неверный ключ (key) ".$errorvalue.". Проверьте настройки плагина.";
                            elseif ($errorparam=="ip")
                                $message = "Запрос приходит с IP адреса ".$errorvalue.", который не указан в списке адресов в настройках вашего поиска";
                            else
                                $message = "Запрос приходит с IP адреса, который не указан в списке адресов в настройках вашего поиска, либо Вы указали неправильный ключ (key) в настройках плагина.";

                        }
                        else $message=$errorcode;
                    }
                }
                elseif(isset($xml -> invalid)) {
                    $invalidurl = $xml->invalid->url;
                    $errorcode = $xml->invalid["reason"];
                    if ($errorcode=="NOT_CONFIRMED_IN_WMC")
                        $message = "Сайт не подтвержден в сервисе Яндекс.Вебмастер для указанного имени пользователя.";

                    elseif ($errorcode=="OUT_OF_SEARCH_AREA")
                        $message = "Адрес ".$invalidurl." не принадлежит области поиска вашей поисковой площадки.";

                    elseif ($errorcode=="MALFORMED_URLS")
                        $message = "Невозможно принять некорректный адрес: ".$invalidurl;
                    
                    else $message=$errorcode;
                    
                    } elseif( isset($xml -> added) 
                    && isset($xml -> added['count']) 
                    && $xml -> added['count'] >0) {
                        $addedaddress = $xml->added->url;
                        $message = "Плагин работает корректно. Последний принятый адрес: ".$addedaddress;
                }
                    
                }
                return $message;
            } else return 'ok';
            } catch (exception $e) {
                return 'fail1';
            }
            return 'fail2';
        }
    }
 
 
$url = 'https://antonov.work/'; //отправляемая ссылка
echo pingYandex($url, false); // false -выключает проверку на ошибки при отправки (экономит время выполнения), true - включает

?>
[30 августа 2013 15:40] pur1tan:
Для непонятливых добавил описание в скрипт. А вместо nolog будет выводится "ok".
К слову о скрипте. Запускайте сначала в режиме отладки, то есть вот так:


echo pingYandex($url, true);

И уже тогда, при положительном результате, отключайте проверку на ошибки. Успехов.
[30 августа 2013 15:40] libero:
Непонятно, куда этот скрипт, какой урл он отправит в яндекс. Запустил на сайте, пишет; "nolog"