CSE Google Custom Page API Показать 50 результатов PHP?

Я пытаюсь получить первые 50 результатов API Google CSE с помощью следующего кода PHP.

Проблема в том, что он объединяет две страницы, показывающие, что результаты портятся, как будто первая позиция совпадает с первой страницей, а вторая позиция является второй из второй страницы и так далее. Может кто-нибудь сказать мне, что я здесь делаю не так?

На самом деле я хочу получить первые 50 результатов в массиве, но приведенный ниже код дает мне смешанные результаты.

$apiKey = "theapikey";

$query = "news";

for ($i = 1; $i <= 5; $i++) {

$ch = curl_init();

$request = "https://www.googleapis.com/customsearch/v1?q=" . urlencode( "$query" ) . "&cx=013594553343653397533:q-qkkaltmay" ."&key=" . $apiKey . "&start=" . $i;

curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

$output = curl_exec($ch);
$output = json_decode($output);

foreach( $output->items as $result ) {

$url = $result->link;

${"items" . $i}[] = $url;

}

}

echo json_encode($items1);

0

Решение

Похоже, вы добавляете каждый набор из 10 результатов в отдельный массив, поэтому $ items1 имеет первые 10 результатов, $ items2 имеет следующие 10 и т. Д. Если вы хотите, чтобы все 50 результатов были в одном массиве, нет необходимости используйте индекс в имени массива.

Кроме того, параметр «start» — это номер требуемого результата, а не номер набора результатов — поэтому вы хотите, чтобы первый запрос начинался с 1, второй начинался с 11, третий — с 21 и т. Д.

Вы также можете проверить, есть ли что-то в результате, прежде чем добавлять его в ваш массив.

Я мог бы сделать что-то вроде этого:

$apiKey = "theapikey";
$query = "news";
$items = array();

for ($i = 1; $i <= 5; $i++) {

$ch = curl_init();

$request = "https://www.googleapis.com/customsearch/v1?" .
"q=" . urlencode( "$query" ) .
"&cx=013594553343653397533:q-qkkaltmay" .
"&key=" . $apiKey .
"&start=" . ( ($i - 1)*10 + 1 );

curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

$output = curl_exec($ch);
$output = json_decode($output);

foreach( $output->items as $result ) {

if ($url = $result->link && trim($url)) $items[] = $url;

}

}

echo json_encode($items);

Напоследок пара предостережений:

  • Есть существующий вопрос о том, является ли этот JSON API устарел и, возможно, уходит.
  • Каждый запрос для следующих 10 результатов засчитывается в вашу квоту. Если вы беспокоитесь о том, что запросы заканчиваются каждый месяц, или если вы платите за увеличение квоты, вы можете рассмотреть возможность получения только того, что вам нужно.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]