PHP-клиент Google API — получение сведений о результатах поиска

У меня проблемы с https://github.com/google/google-api-php-client. Все, что я хочу сделать, это получить некоторые подробности из результатов поиска с помощью системы пользовательского поиска (CSE). То же самое заняло у меня 30 минут с использованием API bing, но я не могу заставить это работать. Вызов API работает, я просто не могу получить результаты от возвращаемого объекта. Используя примеры из приведенного выше источника, simple-query.php отлично работает с API книг (такой полезный пример!), и я могу вернуть детали результатов поиска, используя, например,

    echo "<h3>Results Of Call:</h3>";
foreach ($results as $item) {
  echo $item['selfLink'],"<br /><br/> \n";
  echo $item['etag'],"<br /> \n";
  echo $item['volumeInfo']['title'],"<br /> \n";
  echo $item['volumeInfo']['authors']['0'],"<br /> \n";
}

Это использует мой ключ API и идентификатор CSE.

Однако, если я попытаюсь использовать CSE, я не смогу использовать возвращаемый объект результатов. Итак, изменив пример простого поиска:

<?php

include_once "templates/base.php";
echo pageHeader("Custom Image Search");

//API request
set_include_path("../src/" . PATH_SEPARATOR . get_include_path());
require_once 'Google/Client.php';
require_once 'Google/Service/Customsearch.php';

//Create the client
$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // Enter your API key
// Warn if the API key isn't changed.
if ($apiKey == '<YOUR_API_KEY>') {
  echo missingApiKeyWarning();
}
$client->setDeveloperKey($apiKey);

$service = new Google_Service_Customsearch($client);

//Do the query
$query = 'donkey';
$optParams = array(
        'imgSize' => 'large',
        'searchType' => 'image',
        'num' => '5',
        'safe' => 'medium',
        'cx' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', //Added your cx or search engine ID here, see https://cse.google.com/cse/
        );
$results = $service->cse->listCse($query, $optParams);



//Iterate over the results
echo "<h3>Results Of Call:</h3>";
foreach ($results as $item) {
  echo "Test <br/>";
  echo $item['link'], "<br /> \n";
}

Это просто ничего не возвращает.

Используя var_dump для $results, я вижу, что он возвращает результаты поиска (да, я ищу изображения ослов, просто в качестве примера!).

Но, используя пример с книгами, я вижу, что есть 6 результатов:

echo "Results count: " .count($results);

Но выполнение этого с примером cse возвращает 0. Поэтому неудивительно, что я ничего не повторяю.

Итак, может ли кто-нибудь сказать мне, как я могу получить результаты с помощью клиента php и CSE?

Спасибо


person cloudhal    schedule 29.03.2016    source источник


Ответы (2)


Вы должны использовать методы, включенные в API, для получения результатов и сведений об элементах:

    foreach($results->getItems() as $k=>$item){
        echo $item->getCacheId()."<br/>";
        echo $item->getDisplayLink()."<br/>";
        echo $item->getFileFormat()."<br/>";
        echo $item->getFormattedUrl()."<br/>";
        echo $item->getHtmlFormattedUrl()."<br/>";
        echo $item->getHtmlTitle()."<br/>";
        echo $item->getImage()."<br/>";
        echo $item->getKind()."<br/>";
        echo json_encode($item->getLabels())."<br/>";
        echo $item->getLink()."<br/>";
        echo $item->getMime()."<br/>";
        echo json_encode($item->getPagemap())."<br/>";
        echo $item->getSnippet()."<br/>";
        echo $item->getTitle()."<br/>";
    }
person phobia82    schedule 10.08.2016
comment
Было бы полезнее указать на документы API, чем говорить об использовании методов, включенных в API. Я только что просмотрел Google_Service_Customsearch_Result, Google_Collection и Google_Model не найдя getItems(). Я предполагаю, что это доступно, потому что Google_Collection реализует Iterator.. - person doub1ejack; 22.01.2017

ОК, вот как я это сделал в конце, просто превратил его в массив, а затем использовал array_walk_recursive:

//Making the returned object into an array
$array =  (array) $results;
function array_print($item, $key)
{
     if($key=='link'){
       echo $item ."<br>";
     }
}

array_walk_recursive($array, 'array_print');
person cloudhal    schedule 18.04.2016