Yandex.XML получение данных на php (POST)

Автор: Igor Kirsanov

Пример работы с Yandex.XML через php. Данные отправляются POST запросом.

Необходимо прописать свои данные для работы, такие как имя пользователя, ключ доступа, регион, результатов на странице и т.п.

В примере получение данных для региона Москва, 100 результатов на странице. Запрос получаем через get, query=текст


header("Content-type: text/xml");
function getResponse ($xml_data)
    {
    
        $user = "yandex_user_name";
        $key = "00000000000000000";
        $filter = "strict";
        $lr = "213";
        $l10n = "ru";
        $page = "0"
        
        // Поисковый запрос к Яндексу
        $query = $_GET["query"];
        
        $yandex = "https://yandex.ru/search/xml" .
        "?user=" . $user .
        "&key=" . $key .
        "&filter=" . $filter .
        "&lr=" . $lr .
        "&l10n=" . $l10n;

        $ch = curl_init($yandex);
        curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);

        if (!isset($response))
            return null;
        return $response;
    }

$xw = xmlwriter_open_memory();
xmlwriter_set_indent($xw, 1);
$res = xmlwriter_set_indent_string($xw, ' ');

xmlwriter_start_document($xw, '1.0', 'UTF-8');

// Первый элемент request
xmlwriter_start_element($xw, 'request');

// Дочерний элемент query
xmlwriter_start_element($xw, 'query');
xmlwriter_text($xw, $query);
xmlwriter_end_element($xw);

// page = 0
xmlwriter_start_element($xw, 'page');
xmlwriter_text($xw, $page);
xmlwriter_end_element($xw);

// maxpassages = 3
xmlwriter_start_element($xw, 'maxpassages');
xmlwriter_text($xw, "3");
xmlwriter_end_element($xw);


// sortby = rlv
xmlwriter_start_element($xw, 'sortby');
xmlwriter_text($xw, 'rlv');
xmlwriter_end_element($xw);

// Дочерний элемент groupings
xmlwriter_start_element($xw, 'groupings');

// Дочерний элемент groupby
xmlwriter_start_element($xw, 'groupby');

//  attr = ""
xmlwriter_start_attribute($xw, 'attr');
xmlwriter_text($xw, '');
xmlwriter_end_attribute($xw);

// mode = flat
xmlwriter_start_attribute($xw, 'mode');
xmlwriter_text($xw, 'flat');
xmlwriter_end_attribute($xw);

// groups-on-page = 100
xmlwriter_start_attribute($xw, 'groups-on-page');
xmlwriter_text($xw, '100');
xmlwriter_end_attribute($xw);

// docs-in-group = 1
xmlwriter_start_attribute($xw, 'docs-in-group');
xmlwriter_text($xw, '1');
xmlwriter_end_attribute($xw);

// groupby
xmlwriter_end_element($xw);
// groupings
xmlwriter_end_element($xw);

xmlwriter_end_document($xw);

$xml_data = xmlwriter_output_memory($xw);

echo getResponse ($xml_data);