PHP code example of jsonseo / php-sdk

1. Go to this page and download the library: Download jsonseo/php-sdk library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

jsonseo / php-sdk example snippets




nt = new JsonSeo\Client('YOUR_KEY');

$serp = $client->yandex([
    'text' => 'купить ноутбук',
    'region' => 213,
]);

foreach ($serp['results'] as $position => $result) {
    echo ($position + 1) . '. ' . $result['domain'] . ' — ' . $result['title'] . PHP_EOL;
}

$client->yandex('купить ноутбук');
$client->geoip('77.88.55.242');
$client->wordstatFrequency('ремонт айфона');

$serp = $client->yandex([
    'text' => 'ремонт айфона',
    'region' => 213,          // Москва
    'pages' => 10,            // до 100 позиций
    'break_domain' => 'example.com',
]);

foreach ($serp['results'] as $index => $result) {
    if (stripos($result['domain'], 'example.com') !== false) {
        echo 'Позиция: ' . ($index + 1) . PHP_EOL;
        break;
    }
}

echo 'Собрано страниц: ' . $serp['pages'] . PHP_EOL;
echo 'Нашлось всего: ' . $serp['found_human'] . PHP_EOL;

$serp = [
    'pages' => 3,
    'exhausted' => false,
    'breakDomainHit' => true,        // остановились на нужном домене
    'query' => 'ремонт айфона',
    'rawQuery' => 'ремонт айфона',
    'found' => 28000000,
    'found_human' => 'нашлось 28 млн результатов',
    'lr' => 213,
    'url' => 'https://yandex.ru/search/?text=...',
    'results' => [
        [
            'url' => 'https://example.com/remont-iphone/',
            'domain' => 'example.com',
            'title' => 'Ремонт айфонов в Москве',
            'passage' => 'Починим за 30 минут...',
            'breadcrumbs' => 'example.com › услуги',
        ],
    ],
];

$regions = $client->googleRegions('Казань');
$kazan = $regions['regions'][0]['id'];

$serp = $client->google([
    'q' => 'заказать пиццу',
    'region' => $kazan,
    'hl' => 'ru',
    'device' => 'desktop',
    'pages' => 2,
]);

$serp = $client->google(['q' => 'заказать пиццу', 'filter' => 0]);

$serp = $client->bing([
    'q' => 'buy a laptop',
    'mkt' => 'en-US',
    'pages' => 2,
]);

echo $serp['mkt'] . ' / ' . $serp['lang'] . PHP_EOL;  // фактический рынок и язык

$serp = $client->yandex([
    'text' => 'пластиковые окна',
    'region' => 213,
    'ads' => true,
]);

foreach ($serp['ads'] as $ad) {
    echo $ad['block'] . ' #' . $ad['position'] . ' — ' . $ad['domain'] . PHP_EOL;
    echo '   ' . $ad['title'] . PHP_EOL;
}

$serp = $client->yandex([
    'text' => 'чем отличается osb от фанеры',
    'ai' => true,
]);

if (isset($serp['aiAnswer'])) {
    echo $serp['aiAnswer']['markdown'] . PHP_EOL;

    foreach ($serp['aiAnswer']['sources'] as $source) {
        echo '[' . $source['id'] . '] ' . $source['domain'] . PHP_EOL;
    }
}

$images = $client->yandexImages([
    'q' => 'скандинавский интерьер',
    'orientation' => 'horizontal',
    'size' => 'large',
    'format' => 'jpg',
    'pages' => 2,
]);

foreach ($images['results'] as $image) {
    echo $image['width'] . '×' . $image['height'] . ' ' . $image['url'] . PHP_EOL;
    echo '   источник: ' . $image['sourceUrl'] . PHP_EOL;
}

$videos = $client->googleVideo([
    'q' => 'как заменить ремень грм',
    'duration' => 'long',
    'hl' => 'ru',
]);

foreach ($videos['results'] as $video) {
    echo $video['title'] . ' — ' . $video['durationText'] . PHP_EOL;
    echo '   ' . $video['url'] . ' (' . $video['provider'] . ')' . PHP_EOL;
}

$suggest = $client->yandexSuggest(['text' => 'купить кв', 'region' => 213]);

print_r($suggest['results']);
// ['купить квартиру в москве', 'купить квартиру в новостройке', ...]

$regions = $client->yandexRegions('Казань');

foreach ($regions['regions'] as $region) {
    echo $region['id'] . ' — ' . $region['name'] . ' (' . $region['subname'] . ')' . PHP_EOL;
}
// 43 — Казань (Республика Татарстан)

$frequency = $client->wordstatFrequency([
    'text' => 'ремонт айфона',
    'kind' => 'exact',       // точная частотность: "!ремонт !айфона"
    'region' => 213,
]);

echo $frequency['results']['totalValue'] . PHP_EOL;  // 27356

$wordstat = $client->wordstat(['text' => 'ремонт айфона', 'region' => [213, 2]]);

foreach ($wordstat['results']['popular'] as $phrase) {
    echo $phrase['value'] . "\t" . $phrase['text'] . PHP_EOL;
}

foreach ($wordstat['results']['associations'] as $phrase) {
    echo $phrase['value'] . "\t" . $phrase['text'] . PHP_EOL;
}

$graph = $client->wordstatGraph([
    'text' => 'купить ёлку',
    'graph_type' => 'month',
]);

foreach ($graph['results']['graph'] as $point) {
    echo $point['text'] . "\t" . $point['absolute'] . PHP_EOL;
}
// июнь 2026    9042
// июль 2026    11780

$map = $client->wordstatMap(['text' => 'купить ноутбук', 'map_type' => 'regions']);

foreach ($map['results']['rows'] as $row) {
    echo $row['text'] . "\t" . $row['absolute'] . "\tиндекс " . $row['popularity'] . PHP_EOL;
}

$forecast = $client->direct([
    'phrases' => ['ремонт айфона', 'замена экрана iphone', '"ремонт айфона"'],
    'region' => 213,
    'period' => 'month',
]);

foreach ($forecast['results'] as $row) {
    echo $row['phrase'] . ': ' . $row['shows'] . ' показов' . PHP_EOL;

    foreach ($row['positions'] as $place => $bid) {
        echo '   ' . $place . ': ставка ' . $bid['bid'] . ' ₽, бюджет ' . $bid['budget'] . ' ₽'
            . ', кликов ' . $bid['clicks'] . PHP_EOL;
    }
}

$location = $client->geoip('77.88.55.242');

echo $location['country']['name'] . ', ' . $location['region']['name'] . PHP_EOL;
echo $location['latitude'] . ', ' . $location['longitude'] . PHP_EOL;

$serp = $client->yandex([
    'text' => 'доставка пиццы',
    'region' => $location['region']['id'],
]);

$balance = $client->balance();

echo $balance['balance'] . ' ' . $balance['currency'] . PHP_EOL;  // 123.45 RUB

$client->call('новый/метод', ['параметр' => 'значение']);   // разберёт JSON
$client->callRaw('новый/метод', ['параметр' => 'значение']); // вернёт тело как есть

$client->direct(['ремонт айфона', 'ремонт телефона', 'замена экрана']);
$client->wordstat(['text' => 'ремонт', 'region' => [213, 2], 'device' => ['desktop', 'phone']]);

$client->yandex(['text' => 'купить ноутбук', 'ai' => true, 'ads' => true]);

use JsonSeo\Exception\PaymentRequiredException;
use JsonSeo\Exception\RateLimitException;
use JsonSeo\Exception\ValidationException;

try {
    $serp = $client->yandex(['text' => 'купить ноутбук', 'pages' => 50]);
} catch (ValidationException $e) {
    foreach ($e->errors() as $field => $messages) {
        echo $field . ': ' . implode(', ', $messages) . PHP_EOL;
    }
} catch (PaymentRequiredException $e) {
    echo 'Баланс кончился: ' . $client->balance()['balance'] . PHP_EOL;
} catch (RateLimitException $e) {
    echo 'Вернуться через ' . $e->retryAfter() . ' с' . PHP_EOL;
}

$client = new JsonSeo\Client('YOUR_KEY', [
    'attempts' => 5,           // всего попыток, вместе с первой
    'retry_delay' => 2.0,      // стартовая пауза
    'max_retry_delay' => 60.0, // потолок паузы
]);

$client = new JsonSeo\Client('YOUR_KEY', [
    'base_url' => 'https://jsonseo.ru/api', // адрес API
    'timeout' => 300.0,                     // сколько ждать ответа на попытку, секунд
    'connect_timeout' => 10.0,              // сколько ждать соединения, секунд
    'attempts' => 3,                        // всего попыток, вместе с первой
    'retry_delay' => 1.0,                   // стартовая пауза между попытками
    'max_retry_delay' => 30.0,              // потолок паузы
    'auth' => JsonSeo\Client::AUTH_HEADER,  // или AUTH_QUERY — ключ в параметре key
    'user_agent' => 'мой-проект/1.0',
    'transport' => $transport,              // свой JsonSeo\Transport\TransportInterface
]);

use JsonSeo\Transport\Response;
use JsonSeo\Transport\TransportInterface;

class GuzzleTransport implements TransportInterface
{
    public function send($method, $url, array $headers, $body, array $options)
    {
        $response = $this->guzzle->request($method, $url, [
            'headers' => $headers,
            'body' => $body,
            'timeout' => $options['timeout'],
            'connect_timeout' => $options['connect_timeout'],
            'http_errors' => false,
        ]);

        $headers = [];
        foreach ($response->getHeaders() as $name => $values) {
            $headers[strtolower($name)] = implode(', ', $values);
        }

        return new Response($response->getStatusCode(), $headers, (string) $response->getBody());
    }
}
bash
composer