我遇到了谷歌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实际获得结果吗?
由于
答案 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');