nulldec0de / yandex-search-api-php-client
PHP клиент для работы с Yandex Search API
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/nulldec0de/yandex-search-api-php-client
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.0
- psr/log: ^1.0|^2.0|^3.0
Requires (Dev)
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2025-10-30 12:34:14 UTC
README
PHP клиент для работы с Yandex Search API. Позволяет выполнять поисковые запросы через Yandex Cloud Search API и получать результаты поиска. Может использоваться для поиска позиций вашего сайта.
Возможности
- Автоматическое управление IAM токенами (обновление при истечении)
- Поддержка различных типов поиска (русский, турецкий, международный)
- Поддержка множества регионов России и других стран
- Асинхронные запросы с проверкой статуса операции
- Извлечение ссылок из XML результатов
- Интеграция с PSR-3 логгерами
- Полная поддержка типов (PHP 8.1+)
Требования
- PHP 8.1 или выше
- Composer
- OAuth токен от Yandex
- Folder ID в Yandex Cloud
Установка
Через Composer
composer require nulldec0de/yandex-search-api-php-client
Ручная установка
- Клонируйте репозиторий:
git clone https://github.com/NullDec0de/YandexSearchAPI-php.git
- Установите зависимости:
composer install
Быстрый старт
Базовое использование
<?php require_once 'vendor/autoload.php'; use YandexSearchAPI\YandexSearchAPIClient; use YandexSearchAPI\SearchType; use YandexSearchAPI\Region; // Инициализация клиента $client = new YandexSearchAPIClient( folderId: 'your-folder-id', oauthToken: 'your-oauth-token' ); // Простой поиск с ожиданием результатов try { $links = $client->getLinks( queryText: 'PHP programming', searchType: SearchType::RUSSIAN, region: Region::MOSCOW_AND_MOSCOW_REGION, nLinks: 10 ); foreach ($links as $link) { echo $link . "\n"; } } catch (\YandexSearchAPI\YandexSearchAPIError $e) { echo "Ошибка: " . $e->getMessage() . "\n"; }
Расширенное использование
<?php use YandexSearchAPI\YandexSearchAPIClient; use YandexSearchAPI\SearchType; use YandexSearchAPI\Region; use Psr\Log\LoggerInterface; // С кастомным логгером $logger = new MyCustomLogger(); $client = new YandexSearchAPIClient( folderId: 'your-folder-id', oauthToken: 'your-oauth-token', logger: $logger ); // Асинхронный поиск $operationId = $client->search( queryText: 'Yandex Cloud', searchType: SearchType::RUSSIAN, region: Region::RUSSIA, page: 0, nLinks: 20 ); // Проверка статуса и получение результатов sleep(2); $xmlResults = $client->getSearchResults($operationId); // Извлечение ссылок из XML $links = YandexSearchAPIClient::extractYandexSearchLinks($xmlResults);
Поиск с ожиданием результатов
<?php $client = new YandexSearchAPIClient( folderId: 'your-folder-id', oauthToken: 'your-oauth-token' ); // Автоматическое ожидание результатов с таймаутом try { $xmlResults = $client->searchAndWait( queryText: 'Python tutorials', searchType: SearchType::INTERNATIONAL, region: Region::RUSSIA, maxWait: 300, // максимум 5 минут ожидания interval: 1, // проверка каждую секунду nLinks: 15 ); $links = YandexSearchAPIClient::extractYandexSearchLinks($xmlResults); } catch (\YandexSearchAPI\YandexSearchTimeoutError $e) { echo "Таймаут: " . $e->getMessage() . "\n"; }
API Документация
YandexSearchAPIClient
Конструктор
public function __construct( string $folderId, string $oauthToken, ?LoggerInterface $logger = null, ?Client $httpClient = null )
Параметры:
$folderId- ID папки в Yandex Cloud (обязательный)$oauthToken- OAuth токен от Yandex (обязательный)$logger- Экземпляр PSR-3 логгера (опционально)$httpClient- Кастомный Guzzle HTTP клиент (опционально)
Методы
search()
Выполняет поисковый запрос и возвращает ID операции.
public function search( string $queryText, SearchType $searchType = SearchType::RUSSIAN, Region $region = Region::RUSSIA, int $page = 0, int $nLinks = 10, float $responseTimeout = 5.0 ): string
Параметры:
$queryText- Текст поискового запроса$searchType- Тип поиска (по умолчаниюSearchType::RUSSIAN)$region- Регион поиска (по умолчаниюRegion::RUSSIA)$page- Номер страницы результатов (по умолчанию 0)$nLinks- Количество ссылок на странице (по умолчанию 10)$responseTimeout- Таймаут ответа в секундах (по умолчанию 5.0)
Возвращает: ID операции (string)
Исключения: YandexSearchAPIError
getSearchResults()
Получает результаты поиска по ID операции.
public function getSearchResults(string $operationId): string
Параметры:
$operationId- ID операции, полученный из методаsearch()
Возвращает: XML контент с результатами поиска (string)
Исключения: YandexSearchAPIError
searchAndWait()
Выполняет поиск и ожидает завершения операции с автоматической проверкой статуса.
public function searchAndWait( string $queryText, SearchType $searchType = SearchType::RUSSIAN, Region $region = Region::RUSSIA, int $maxWait = 300, int $interval = 1, int $nLinks = 10 ): string
Параметры:
$queryText- Текст поискового запроса$searchType- Тип поиска$region- Регион поиска$maxWait- Максимальное время ожидания в секундах (по умолчанию 300)$interval- Интервал проверки статуса в секундах (по умолчанию 1)$nLinks- Количество ссылок на странице
Возвращает: XML контент с результатами поиска (string)
Исключения: YandexSearchTimeoutError, YandexSearchAPIError
getLinks()
Удобный метод для получения только ссылок из результатов поиска.
public function getLinks( string $queryText, SearchType $searchType = SearchType::RUSSIAN, Region $region = Region::RUSSIA, int $nLinks = 10, int $maxWait = 300, int $interval = 1 ): array
Возвращает: Массив URL-адресов (string[])
Исключения: YandexSearchTimeoutError, YandexSearchAPIError
extractYandexSearchLinks()
Статический метод для извлечения ссылок из XML контента.
public static function extractYandexSearchLinks(string $xmlContent): array
Параметры:
$xmlContent- XML контент с результатами поиска
Возвращает: Массив URL-адресов (string[])
Enums
SearchType
Типы поиска:
SearchType::RUSSIAN- Поиск по русскоязычному интернетуSearchType::TURKISH- Поиск по турецкому интернетуSearchType::INTERNATIONAL- Международный поиск
Region
Поддерживаемые регионы включают:
Region::RUSSIA- Вся РоссияRegion::MOSCOW_AND_MOSCOW_REGION- Москва и Московская областьRegion::SAINT_PETERSBURG- Санкт-ПетербургRegion::EKATERINBURG- ЕкатеринбургRegion::NOVOSIBIRSK- Новосибирск- И многие другие регионы России и стран СНГ
Полный список регионов доступен в файле Enums.php.
ResponseFormat
Форматы ответа:
ResponseFormat::XML- XML форматResponseFormat::HTML- HTML формат
Исключения
YandexSearchAPIError- Базовое исключение для всех ошибок APIYandexSearchTimeoutError- Исключение при таймауте ожидания результатовYandexAuthError- Исключение при ошибках аутентификации
Получение OAuth токена
- Перейдите на Yandex OAuth
- Создайте новое приложение
- Получите OAuth токен
Получение Folder ID
- Войдите в Yandex Cloud Console
- Выберите или создайте облако
- Создайте каталог (folder)
- Скопируйте Folder ID из адресной строки или настроек каталога
Примеры использования
Поиск по разным регионам
use YandexSearchAPI\Region; $regions = [ Region::MOSCOW_AND_MOSCOW_REGION, Region::SAINT_PETERSBURG, Region::EKATERINBURG ]; foreach ($regions as $region) { $links = $client->getLinks( queryText: 'рестораны', region: $region, nLinks: 5 ); echo "Регион: {$region->value}\n"; foreach ($links as $link) { echo " - $link\n"; } }
Работа с пагинацией
for ($page = 0; $page < 3; $page++) { $operationId = $client->search( queryText: 'PHP разработка', page: $page, nLinks: 10 ); sleep(2); $results = $client->getSearchResults($operationId); $links = YandexSearchAPIClient::extractYandexSearchLinks($results); echo "Страница " . ($page + 1) . ":\n"; foreach ($links as $link) { echo " - $link\n"; } }
Обработка ошибок
try { $links = $client->getLinks('test query'); } catch (\YandexSearchAPI\YandexAuthError $e) { echo "Ошибка аутентификации: " . $e->getMessage() . "\n"; } catch (\YandexSearchAPI\YandexSearchTimeoutError $e) { echo "Таймаут: " . $e->getMessage() . "\n"; } catch (\YandexSearchAPI\YandexSearchAPIError $e) { echo "Ошибка API: " . $e->getMessage() . "\n"; } catch (\Exception $e) { echo "Неожиданная ошибка: " . $e->getMessage() . "\n"; }
Логирование
Клиент поддерживает PSR-3 логгеры:
use Monolog\Logger; use Monolog\Handler\StreamHandler; $logger = new Logger('yandex_search'); $logger->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG)); $client = new YandexSearchAPIClient( folderId: 'your-folder-id', oauthToken: 'your-oauth-token', logger: $logger );
Требования к системе
- PHP 8.1+
- Расширение
ext-json - Расширение
ext-xml - Расширение
ext-curl(для Guzzle)
Тестирование
composer test
Поддержка
Если у вас возникли вопросы или проблемы:
- Проверьте документацию Yandex Search API
- Создайте Issue на GitHub
- Убедитесь, что ваши OAuth токен и Folder ID корректны