@electronikprm

Как спарсить данные о позиции домена по запросу в Яндекс.xml?

Всем привет!
Есть скрипт определения позиции сайта по запросу, получается что формирую запрос xml и парсю.
Пытаюсь определить позицию сайта по атрибуту по порядку (может есть какой другой способ, я не знаю)
но почему то всегда происходит ответ "Результаты поиска не найдены", в чём может быть проблема, или может у кого есть более простой скрипт, заранее спасибо) буду благодарен даже за описание как происходит парсинг позиции, если вы знаете конечно

<?php
$user = "login"; // логин Яндекса 
$key = "xml_key"; // xml ключ из https://xml.yandex.ru/settings/ 
$query = "яндекс"; // запрос
$site = "https://ya.ru/"; // сайт который ищем

$url = "https://yandex.ru/search/xml?user=".$user."&key=".$key."&query=".urlencode($query)."&lr=225"; // параметр lr для поиска только по региону 225 - Россия
$xml = simplexml_load_file($url);

$position = 0;
foreach ($xml->response->results->grouping->group as $group) {
    $count = $group->count;
    if ($position <= $count) {
        // искомый сайт находится в этой группе
        foreach ($group->doc as $doc) {
            if ($doc->domain == parse_url($site, PHP_URL_HOST)) {
                $position += 1;
                break 2; // выходим из двух циклов
            }
            $position += 1;
        }
    } else {
        $position += $count;
    }
}
if ($position == 0) {
    echo "Результаты поиска не найдены";
} elseif ($position > 100) {
    echo "Сайт ".$site." не найден в первых 100 результатах поиска по запросу ".$query;
} else {
    echo "Запрос: ".$query."<br>";
    echo "Домен: ".$site."<br>";
    echo "Позиция сайта в поиске: ".$position."<br>";
}
?>
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
Hungry_Hunter
@Hungry_Hunter
Однозначно на ваш вопрос ответить нельзя.
После строки:
$xml = simplexml_load_file($url);
Напишите:
var_dump($xml);

Таким образом вы увидите что возвращает вам яндекс. Скорее всего там будет ошибка:
Запрос пришёл с IP-адреса, не входящего в список разрешённых для данного пользователя


Скорее всего в настройках https://xml.yandex.ru/settings/ вы не указали IP-адрес, с которого будут совершаться запросы. Также второй вариант, вы указали IP-адрес версии v4, а сервер отправляет запросы с IPv6. В ошибке об этом будет написано, с какого адреса идут запросы. Вам нужно будет указать его в настройках, на указанной выше странице.

Другая причина, на вашем яндекс-аккаунте нет XML-лимитов, которые нужны для совершения запросов к яндексу. В этом случае вы можете воспользоваться сервисами, которые предоставляют такие лимиты.
Например XMLstock.com - стоимость всего 4 рубля за 1000 запросов.

А так в целом скрипт рабочий. Запустил, проверил. позиции определяются.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы