Google API php客户端 - 检索搜索结果详细信息

时间:2016-03-29 10:21:48

标签: php google-api-php-client

我遇到了谷歌https://github.com/google/google-api-php-client的问题。 我想要做的就是使用自定义搜索引擎(CSE)从搜索结果中获取一些细节。同样的事情花了我30分钟使用bing API,但我不能让它工作。 API调用正在运行,我无法从返回的对象中获取结果。 使用上面的源代码中的示例,simple-query.php可以正常使用books 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 ID。

但是,如果我尝试使用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";
}

这只会返回任何内容。

在$ results上使用var_dump我可以看到它正在返回搜索结果(是的,我正在搜索驴的图像,仅作为示例!)。

但是使用书籍示例,我可以看到有6个结果:

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

但是使用cse示例执行此操作会返回0.所以不出所料,我正在迭代任何事情。

那么,有人能告诉我如何使用php客户端和CSE实际获得结果吗?

由于

2 个答案:

答案 0 :(得分:1)

您应该使用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/>";
    }

答案 1 :(得分:0)

好的,这就是我最终如何做到这一点,只是把它变成了一个数组,然后使用了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');