Answer the question
In order to leave comments, you need to log in
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 questionAsk a Question
731 491 924 answers to any question