nulldec0de/yandex-search-api-php-client
Composer 安装命令:
composer require nulldec0de/yandex-search-api-php-client
包简介
PHP клиент для работы с Yandex Search API
README 文档
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 корректны
nulldec0de/yandex-search-api-php-client 适用场景与选型建议
nulldec0de/yandex-search-api-php-client 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 0 次下载、GitHub Stars 达 1, 最近一次更新时间为 2025 年 10 月 30 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「api」 「search」 「yandex」 「search-api」 「yandex-cloud」 「yandex-search」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 nulldec0de/yandex-search-api-php-client 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 nulldec0de/yandex-search-api-php-client 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 nulldec0de/yandex-search-api-php-client 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A Laravel package to retrieve data from Google Search Console
Indexed Search Autocomplete - Extends the TYPO3 Core Extension Indexed_Search searchform with an autocomplete feature.
The flysystem adapter for yandex disk rest api.
Abstraction Layer to index and search entities
Easy and complete YooKassa (previously Yandex Checkout) integration for Laravel
A PSR-7 compatible library for making CRUD API endpoints
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 10
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-10-30