Php 谷歌自定义搜索-查询数据库/API?

Php 谷歌自定义搜索-查询数据库/API?,php,xml,json,rest,google-search-api,Php,Xml,Json,Rest,Google Search Api,我们对在我们的项目中使用Google Custom Search/Google很感兴趣,主要是因为它在拼字和纠正拼写错误方面非常出色 我们知道它可以返回JSON或XML格式的数据,我们对此没有意见。但要找到问题的答案: 我们可以使用这种共轭和错误纠正来搜索我们自己的数据库/api吗? 如果您键入不含酒精的drnks,它将自动更正为不含酒精的饮料,然后按如下方式搜索我们的数据库: { "coke": { "alcohol": 0, "calories": 3

我们对在我们的项目中使用Google Custom Search/Google很感兴趣,主要是因为它在拼字和纠正拼写错误方面非常出色

我们知道它可以返回JSON或XML格式的数据,我们对此没有意见。但要找到问题的答案:

我们可以使用这种共轭和错误纠正来搜索我们自己的数据库/api吗?

如果您键入不含酒精的
drnks
,它将自动更正为
不含酒精的饮料
,然后按如下方式搜索我们的数据库:

{
    "coke": {
        "alcohol": 0,
        "calories": 300,
        "taste": "awesome"
    },
    "pepsi": {
        "alcohol": 0,
        "calories": 300,
        "taste": "meh"
    }
}
,它可以这样回应:

{
    "coke": {
        "alcohol": 0,
        "calories": 300,
        "taste": "awesome"
    },
    "pepsi": {
        "alcohol": 0,
        "calories": 300,
        "taste": "meh"
    }
}
然后它会以某种形式返回这两个结果

使用付费版本的解决方案很好

如果可能的话,你能给我举个简单的例子吗

谷歌为他们的自定义搜索提供了一个新的方法,你可以从你的服务器上查询,以确定搜索词是否有更好的拼写,然后用它来查询你的内部数据库

在我的代码中,我使用了一个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";
}
//用于加载REST客户端库的Composer自动加载程序
需要“vendor/autoload.php”;
$api_key=“…”;//谷歌API键,看起来像随机文本
$search_engine=“…”;//搜索引擎ID,看起来像“:”
$query=“不含酒精的drnks”//原始搜索查询
//具有一些默认值的REST客户端对象
//避免在每次发出请求时指定它们
$client=new GuzzleHttp\client([“基本url=>”https://www.googleapis.com“,”默认值“=>”[“查询”=>[“键”=>$api\U键,“cx”=>$search\U引擎,“字段”=>“拼写(更正的查询)”]]);
试一试{
//实际请求,以及搜索查询
$resp=$client->get(“/customsearch/v1”,[“query”=>[“q”=>$query]])->json();
//谷歌是否建议另一种拼写方式
如果(isset($resp[“拼写”][“更正查询”])){
$correctedQuery=$resp[“拼写”][“correctedQuery”];
//现在使用更正后的拼写查询内部数据库
//或者做其他任何事情真的,现在是你的问题了
echo$correctedQuery;
}否则{
//谷歌没有任何更正,请使用原始查询
回显“未发现更正”;
}
}catch(GuzzleHttp\Exception\TransferException$e){
//发生了一些不好的情况,请记录异常,但要像
//没有错误,请处理用户的原始查询
呼应“发生了不好的事情”;
}
下面是一些获取API密钥的方法,可以从中获取自定义搜索引擎ID

如果您仔细观察,您会发现我已经指定了
字段
查询参数来请求一个只包含最终拼写建议的查询,以(希望)获得更好的性能,因为我们不需要响应中的任何其他内容(但如果您确实需要完整的响应,请随意更改/删除它)

请注意,谷歌没有关于你的数据库中有什么的线索,所以拼写更正将只基于谷歌关于你网站的公开数据,我不认为有办法让谷歌知道你的内部数据库,这不是一个好主意


最后,确保优雅地处理速率限制和API故障,仍然允许用户使用其原始查询进行搜索(就像没有发生错误一样,只记录错误以备以后查看)。

不,我实际上没有。问题是,我是一名前端开发人员,从未使用过REST或谷歌自定义搜索。我刚刚被派去侦察这件事@安德烈·丹尼尔会提供,但我也没有。直到我们知道这是否可能。是的,我尝试并创建了一个自定义搜索引擎,但我几乎不知道如何使用它。让我们来看看。谷歌关于英语/芬兰语作为语言的拼写更正可能是唯一需要的,你知道这是否使用了这些吗?只有当它在网站上爬行时也能抓住一些单词来使用时,这才是一件积极的事情。@Christian“答案被接受”我想它(终于)成功了。