我们对在我们的项目中使用Google自定义搜索/ Google感兴趣,主要是因为它在共轭和&amp ;;纠正拼写错误的单词。
我们知道它可以用JSON或XML返回数据,我们对此很好。但找到问题的答案:
我们可以使用这种结合和错误修正并搜索我们自己的数据库/ api吗?
如果您输入drnks with no alcohol
,它会自动更正为drinks with no alcohol
,然后像这样搜索我们的数据库:
http://example.com?search=drinks&alcohol=0,它可以这样回复:
{
"coke": {
"alcohol": 0,
"calories": 300,
"taste": "awesome"
},
"pepsi": {
"alcohol": 0,
"calories": 300,
"taste": "meh"
}
}
然后它会以某种形式返回这两个结果。
使用付费版本的解决方案很好。
如果可以这样做,你能给我一个简单的例子吗?
答案 0 :(得分:1)
Google为其自定义搜索提供REST API,您可以从服务器查询它以确定是否有更好的搜索字词拼写,然后使用它来查询您的内部数据库。
在我的代码中,我使用的是Guzzle,这是一个REST客户端库,可以避免使用cURL的丑陋和冗长的代码,但如果你真的需要,可以随意使用cURL。
// Composer's autoloader to load the REST client library
require "vendor/autoload.php";
$api_key = "..."; // Google API key, looks like random text
$search_engine = "..."; // search engine ID, looks like "<numbers>:<text>"
$query = "drnks with no alcohol"; // the original search query
// REST client object with some defaults
// avoids specifying them each time we make a request
$client = new GuzzleHttp\Client(["base_url" => "https://www.googleapis.com", "defaults" => ["query" => ["key" => $api_key, "cx" => $search_engine, "fields" => "spelling(correctedQuery)"]]]);
try {
// the actual request, with the search query
$resp = $client->get("/customsearch/v1", ["query" => ["q" => $query]])->json();
// whether Google suggests an alternative spelling
if (isset($resp["spelling"]["correctedQuery"])) {
$correctedQuery = $resp["spelling"]["correctedQuery"];
// now use that corrected spelling to query your internal DB
// or do anything else really, the query is yours now
echo $correctedQuery;
} else {
// Google doesn't have any corrections, use the original query then
echo "No corrections found";
}
} catch (GuzzleHttp\Exception\TransferException $e) {
// Something bad happened, log the exception but act as if
// nothing is wrong and process the user's original query
echo "Something bad happened";
}
以下是获取API密钥的instructions部分,可以从control panel获取自定义搜索引擎ID。
如果你仔细观察,你可以看到我已经指定fields
查询参数来请求partial response仅包含最终的拼写建议,以便(希望)获得更好的性能,因为我们不需要响应中的任何其他内容(但如果您确实需要完整的响应,请随时更改/删除它。)
请注意,Google对您数据库中的内容一无所知,因此拼写更正只会基于Google对您网站的公开数据,我认为没有办法让Google了解您的内部数据库,不管怎样,这不是一个好主意。
最后,确保优雅地处理速率限制和API失败,仍然让用户可以使用他们的原始查询进行搜索(只是表现得没有发生错误,只记录错误以供日后查看)。