Пользовательский поиск Google с выпуском Guzzle Query - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужно получить 10 самых популярных URL-адресов для каждого ключевого слова из API пользовательского поиска Google.Я использую PHP с библиотекой жрет.Когда я отправлял все ключевые слова в API, я получил все результаты.Но я столкнулся с критической проблемой.

Проблема: если я отправлю 100 ключевых слов в API, он вернет все результаты, но когда я вижу консоль API, я вижу, что 1000 запросов отправляются по 100 ключевым словам.

Изображение консоли API

Например:

Я отправляю 250 ключевых слов и показываю на консоли 1500 запросов.

Мой кодэто:

<pre>

require __DIR__ . '/vendor/autoload.php';

use GuzzleHttp\Pool;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;

if(isset($_POST['submit'])) {
    $script_start = microtime(true);
    $results = array();
    //Get all default CURL data for Search API.
    $filename = 'keywords.txt'; // File name;
    $api_key = !empty($_POST['api_key']) ? $_POST['api_key'] : '';
    $engine_id = !empty($_POST['engine_id']) ? $_POST['engine_id'] : ''; //Demo Engine ID
    $api_url = 'https://www.googleapis.com/customsearch/v1';
    $number = !empty($_POST['number_of_result']) ? $_POST['number_of_result'] :  10; // How many results are showing.
    $start = !empty($_POST['start']) ? $_POST['start'] :  0; // Start line from Text file.
    $end = !empty($_POST['end']) ? $_POST['end'] :  5; // End line from Text file.

    //get text file content line by line.
    $all_search_keywords = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    // echo '<pre>'; print_r($all_search_keywords); die;
    if(!empty($all_search_keywords)){
        //PHP pagination in array's like (0 - 10) no line.
        $limited_keywords = array_slice( $all_search_keywords , $start , $end );

        $client = new Client();

        $requests = function () use($limited_keywords, $api_url, $api_key, $engine_id, $number) {
            if (!empty($limited_keywords)) {
                //echo '<pre>'; print_r($limited_keywords); die;
                foreach ($limited_keywords as $search_keyword) {
                    $uri = $api_url . '?' . http_build_query([
                        'key' => $api_key,
                        'cx' => $engine_id,
                        'q' => $search_keyword,
                        'num'   => $number,
                    ]);
                    //echo '<pre>'; print_r($uri);
                    yield new Request('GET', $uri);
                }
            }
        };

        $pool = new Pool($client, $requests(), [
            'concurrency' => 5,
            'fulfilled' => function ($response, $index) use (&$results) {
                //echo "<span style='color: green; font-size: 18px;'> SUCCESS: $index</span><br>";
                $result = json_decode($response->getBody()->getContents(), true);
                $results[$index] = $result;

            },
            'rejected' => function ($reason, $index) use(&$results) {
                // this is delivered each failed request
                echo "<span style='color: red; font-size: 18px;'> ERROR: $index</span><br>";
                //echo '<pre>'; print_r($reason); exit;
                // if ($reason instanceof GuzzleHttp\Exception\ClientException) {
                //     $body = $reason->getResponse()->getBody();
                // }
                // echo $body.'<br>';
            },
        ]);

        // Initiate the transfers and create a promise
        $promise = $pool->promise();

        // Force the pool of requests to complete.
        $promise->wait();

    }
    //echo '<pre>'; print_r($get_urls); die;

    $time_elapsed_secs = microtime(true) - $script_start;

    //echo "<br><br><span style='color: blue; font-size: 24px;'> ". round($time_elapsed_secs, 2) . "</span>";
   // echo '<pre>';
   // print_r($results); exit;

}

Пожалуйста, предложите мне.

...