Google Custom Search — база данных запросов / API?

Мы заинтересованы в использовании пользовательского поиска Google / Google в нашем проекте, главным образом из-за того, что он удивителен при спряжении & исправление слов с ошибками.

Мы знаем, что он может возвращать данные в формате JSON или XML, и мы в порядке. Но, найдя ответ на вопрос:

Можем ли мы использовать это сопряжение и исправление ошибок и искать нашу собственную базу данных / API?

Если бы вы набрали drnks with no alcohol это автоматически исправит drinks with no alcoholи затем выполните поиск в нашей базе данных следующим образом:

http://example.com?search=drinks&спирт = 0, и он может ответить так:

{
"coke": {
"alcohol": 0,
"calories": 300,
"taste": "awesome"},
"pepsi": {
"alcohol": 0,
"calories": 300,
"taste": "meh"}
}

И тогда он вернет эти два результата в некоторой форме.

Решения с использованием платной версии в порядке.

Если это возможно, не могли бы вы привести простой пример?

1

Решение

Google предоставляет REST API для их пользовательского поиска вы можете запросить его с вашего сервера, чтобы определить, есть ли лучшее написание для условий поиска или нет, а затем использовать его для запроса вашей внутренней базы данных.

В моем коде я использую пропивать, клиентская библиотека 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, и пользовательский идентификатор поисковой системы можно получить из панель управления.

Если вы посмотрите внимательно, вы увидите, что я указал fields параметр запроса для запроса частичный ответ только с возможными предложениями по орфографии, чтобы (надеюсь) получить лучшую производительность, поскольку нам не нужно ничего больше из ответа (но не стесняйтесь изменять / удалять его, если вам нужен полный ответ).

Обратите внимание, что Google не имеет ни малейшего представления о том, что находится в вашей базе данных, поэтому исправления орфографии будут основываться только на общедоступных данных Google о вашем веб-сайте, я не думаю, что есть способ сообщить Google о вашей внутренней БД, а не то, что хорошая идея в любом случае.

Наконец, убедитесь, что корректно обрабатывает ограничения скорости и сбои API, по-прежнему предоставляя пользователю возможность поиска с использованием своего исходного запроса (просто действуйте так, как будто ничего не случилось, и регистрируйте ошибку только для последующего просмотра).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]