T
T
tolikryg2018-11-21 20:33:34
PHP
tolikryg, 2018-11-21 20:33:34

In Original Texts from Yandex, you can't set it up?

After enabling, I get this:
HTTP CODE: 400
URL: https://api.webmaster.yandex.net/v3/user/MY/hosts...
----------------- - Response from Yandex: ---------------------
string(0) ""

# Определяем константы
    define('CLIENT_ID', '***********************************************');
    define('CLIENT_SECRET', '***********************************************');
    define('YANDEX_TOKEN', '***********************************************');
    define('WEBSITE_ID', '*****************');
    define('USER_ID', '*****************');
    define('YANDEX_WEBMASTER_HOST', 'api.webmaster.yandex.net');
    define('YANDEX_API_REQUEST_TIMEOUT', 30);
    
    # Функция для курления
    function getPage($curlOptions = array()) {
            $ch = curl_init();
            curl_setopt_array($ch, $curlOptions);
            $result = curl_exec($ch);
            $info = curl_getinfo($ch);
            return array('result' => $result, 'info' => $info);
        }
    # Функция отправки текста
    function sendTextToYandex($text) {
        $url = "/v3/user/" .USER_ID. "/hosts/" . WEBSITE_ID . "/original-texts/";
        $text = urlencode($text);
        $text = "<original-text><content>".$text."</content></original-text>";
        $additionalHeaders = array('Content-Length: ' . strlen($text));
        $curlOptions = array(CURLOPT_CONNECTTIMEOUT => 30, CURLOPT_POSTFIELDS => $text);
        $response = performYandexWebmasterApiRequest($url, 'POST', $curlOptions, $additionalHeaders);
        return $response;
        }
    # Функция непосредственной подготовки на выполнения запроса добавления уникального текста
    function performYandexWebmasterApiRequest($url, $requestType = 'GET', $curlOptions = array(), $additionalHeaders = array()) {
        $headers = array(
            "Content-type: application/json",
            "{$requestType} {$url} HTTP/1.1",
            'Host: api.webmaster.yandex.ru',
            'Authorization: OAuth '.YANDEX_TOKEN
        );
 
        $headers = array_merge($headers, $additionalHeaders);
        $requestOptions = array(
            CURLOPT_URL => 'https://' . YANDEX_WEBMASTER_HOST . $url,
            CURLOPT_SSL_VERIFYPEER => 0,
            CURLOPT_CONNECTTIMEOUT => YANDEX_API_REQUEST_TIMEOUT,
            CURLOPT_HTTPHEADER => $headers,
            CURLOPT_RETURNTRANSFER => 1
        );
        if (count($curlOptions)) {
            foreach ($curlOptions as $curlOption => $curlOptionValue) {
                $requestOptions[$curlOption] = $curlOptionValue;
            }
        }
        $response = getPage($requestOptions);
        return $response;
        }
 
 
    if(YANDEX_TOKEN == '')
    {   
        # Когда у нас нет токена, получаем проверочный код, Далее забираем параметр code="XXXX" и передаем его в гет /script.php?code="XXXX"
        if (!isset($_GET["code"])) {
            Header("Location: https://oauth.yandex.ru/authorize?response_type=code&client_id=".CLIENT_ID);
            die();
            }
 
        $url = 'https://oauth.yandex.ru/token';
        
        $postData = 'grant_type=authorization_code&code='.$_GET["code"].'&client_id='.CLIENT_ID.'&client_secret='.CLIENT_SECRET;
        # Загаловки
        $headers = array(
            'POST /token HTTP/1.1',
            'Host: oauth.yandex.ru',
            'Content-type: application/x-www-form-urlencoded',
            'Content-Length: ' . strlen($postData),
        );
        # Создаем массив для курления
        $curlOptions = array(
            CURLOPT_POST            => 1,
            CURLOPT_HEADER          => 0,
            CURLOPT_URL             => $url,
            CURLOPT_CONNECTTIMEOUT  => 1,
            CURLOPT_FRESH_CONNECT   => 1,
            CURLOPT_RETURNTRANSFER  => 1,
            CURLOPT_FORBID_REUSE    => 1,
            CURLOPT_TIMEOUT         => 5,
            CURLOPT_SSL_VERIFYPEER  => false,
            CURLOPT_POSTFIELDS      => $postData,
            CURLOPT_HTTPHEADER      => $headers
        );
        # Получаем результат запроса
        $response = getPage($curlOptions);
        # Если все отлично и вернулся токен, то вывожу его на экран
        if ($response['info']['http_code'] == 200) {
            $liveToken = json_decode($response['result']);
 
            echo 'Token: '.$liveToken->access_token.'<br> Will live up to: '.(date('F j, Y, g:i a', time()+$liveToken->expires_in));
            
        }
        # Если время жизни проверочного кода иссяк (он живет очень коротко, я так понял несколько секунд...), то вывожу сообщение об ошибке на экран
        elseif($response['info']['http_code'] == 400){
            $error = json_decode($response['result']);
            echo 'Error:  '.$response['info']['http_code'].', '.$error->error_description;
        }
    }
    # Если токен получен, можно приступить к добавлению "Оригинального текста"
    else
    {
        # Minimum length is 500
        $text = 'Сам отправляемый текст';
        # Стартуем добавление текста
        $response = sendTextToYandex($text);
        # Выводим на монитор результат выполненного запроса (вернется либо ошибка, либо уведомление о добавленном тексте)
        print "<pre>";
        print "\nHTTP CODE: " . $response['info']['http_code'];
        print "\nURL:" . $response['info']['url'];
        print "\n ------------------ Response from Yandex: ---------------------\n\n";
        var_dump($response['result']);
        print "</pre>";
        # Удачи :)
    }

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question