API — Как использовать PHP-клиент для системы пользовательского поиска Google

Я чувствую, что это идиотская ошибка с моей стороны, но я не могу понять, как использовать Google-апи-PHP-клиент сделать простой поиск. Моя цель — выполнить простые запросы по ключевым словам в поисковой системе Google для моего сайта.

Я создал свой ключ API, поисковую систему Google и загрузил версию API-клиента, но сайт Google для клиента php Кажется, что нет никакой документации о том, как использовать клиента и только связанный пример Я нашел до сих пор специально ищет книжный сервис Google. Проблема в том, что этот пример подразумевает, что разные службы поиска имеют разные типы результатов поиска, и я не могу найти никакой документации о том, как получить результаты из Google_Service,

Я думаю, что могу настроить простой поиск, как этот, но я не знаю, как на самом деле получить результаты.

include_once __DIR__ . '/vendor/autoload.php';
...
public function __construct($searchTerm) {
$client = new Google_Client();
$client->setApplicationName("My_First_Search");
$client->setDeveloperKey(self::GCSE_API_KEY);
$service = new Google_Service($client);
$optParams = array('filter' => $searchTerm);
$results = $service->???

Документация должен быть там, но это не в любом из очевидных мест ….

Обновление (14.01.17):

(Обновление от 21.01.17: на самом деле, эти документы мне не сильно помогли, но я оставлю их только для справки)

Я использовал phpdoc для создания документации API для Google apiclient, Я сделал репо и положил phpdocs и библиотека на github. phpdocs доступны для просмотра здесь.

Надеюсь, это будет кому-то полезно. К сожалению, даже с документами у меня возникают проблемы с раскрытием правильного использования. Я еще не создал документы для пакета apiclient-services google, потому что они огромный, но я могу сделать это при необходимости (в зависимости от ограничений диска на страницах github).

12

Решение

Спасибо @gennadiy за то, что поставили меня на правильный путь. Без его предложения использовать ->cse->listCse() чтобы получить результаты, я бы, наверное, бросил бы и отправился на поиски другой библиотеки. К счастью, это почти все, что мне нужно, чтобы использовать эту библиотеку, так что я думаю, что все готово.

Выполнить поиск довольно просто; в основном это выглядит так:

include_once __DIR__ . '/vendor/autoload.php';

$GCSE_API_KEY = "nqwkoigrhe893utnih_gibberish_q2ihrgu9qjnr";
$GCSE_SEARCH_ENGINE_ID = "937592689593725455:msi299dkne4de";

$client = new Google_Client();
$client->setApplicationName("My_App");
$client->setDeveloperKey($GCSE_API_KEY);
$service = new Google_Service_Customsearch($client);
$optParams = array("cx"=>self::GCSE_SEARCH_ENGINE_ID);
$results = $service->cse->listCse("lol cats", $optParams);

Объект результатов реализует Iterator, поэтому мы можем зациклить их следующим образом:

foreach($results->getItems() as $k=>$item){
var_dump($item);
}

Однако, чтобы использовать эту библиотеку, сначала вам нужно настроить несколько вещей Google. Эти вещи в конечном итоге упоминаются на Клиентские библиотеки Google API PHP (бета) веб-сайт, но вам придется нажимать вокруг & искать их, и даже тогда вы пропустите последний из приведенных ниже:

  1. Вам понадобится система пользовательского поиска. Не смущайтесь тем фактом, что большинство ссылок в Интернете на системы пользовательского поиска предназначены для людей, которые не пытаясь сделать программные поиски. Вам нужен, и их легко настроить здесь: https://cse.google.com/cse/all
  2. Вам понадобится проект Google. Опять же, настроить легко, когда вы знаете, куда идти: https://console.developers.google.com/apis/dashboard
  3. Вам понадобится ключ API (также известный как ключ разработчика). Перейдите сюда и создайте новый ключ, если у вас его еще нет: https://console.developers.google.com/apis/credentials введите описание изображения здесь
  4. Вам нужно будет включить пользовательский поиск Google для вашего проекта. На этом этапе вы можете отправлять запросы в Google, но можете получить ответ об ошибке, если вы еще не включили пользовательский поиск Google для своего проекта. Перейдите на панель инструментов, нажмите синюю ссылку «Включить API», найдите Google Custom Search и включите ее. https://console.developers.google.com/apis/dashboard введите описание изображения здесь

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

<?php

include_once __DIR__ . '/vendor/autoload.php';

/**
* Retrieves a simple set of google results for a given plant id.
*/
class GoogleResults implements IteratorAggregate {

// Create one or more API keys at https://console.developers.google.com/apis/credentials
const GCSE_API_KEY = "nqwkoigrhe893utnih_gibberish_q2ihrgu9qjnr";

/* The search engine id is specific to each "custom search engine"* you have configured at https://cse.google.com/cse/all

* Remember that you must have enabled Custom Search API for the project that
* contains your API Key.  You can do this at the following url:
* https://console.developers.google.com/apis/api/customsearch.googleapis.com/overview?project=vegfetch-v01&duration=PT1H

* If you fail to enable the Custom Search API before you try to execute a search
* the exception that is thrown will indicate this.  */
const GCSE_SEARCH_ENGINE_ID = "937592689593725455:msi299dkne4de";

// Holds the GoogleService for reuse
private $service;

// Holds the optParam for our search engine id
private $optParamSEID;

/**
* Creates a service object for our Google Custom Search.  The API key is
* permiently set, but the search engine id may be changed when performing
* searches in case you want to search across multiple pre-prepared engines.
*
* @param string $appName       Optional name for this google search
*/
public function __construct($appName = "My_Search") {

$client = new Google_Client();

// application name is an arbitrary name
$client->setApplicationName($appName);

// the developer key is the API Key for a specific google project
$client->setDeveloperKey(self::GCSE_API_KEY);

// create new service
$this->service = new Google_Service_Customsearch($client);

// You must specify a custom search engine.  You can do this either by setting
// the element "cx" to the search engine id, or by setting the element "cref"// to the public url for that search engine.
//
// For a full list of possible params see https://github.com/google/google-api-php-client-services/blob/master/src/Google/Service/Customsearch/Resource/Cse.php
$this->optParamSEID = array("cx"=>self::GCSE_SEARCH_ENGINE_ID);

}

/**
* A simplistic function to take a search term & search options and return an
* array of results.  You may want to
*
* @param string    $searchTerm     The term you want to search for
* @param array     $optParams      See: For a full list of possible params see https://github.com/google/google-api-php-client-services/blob/master/src/Google/Service/Customsearch/Resource/Cse.php
* @return array                                An array of search result items
*/
public function getSearchResults($searchTerm, $optParams = array()){
// return array containing search result items
$items = array();

// Merge our search engine id into the $optParams
// If $optParams already specified a 'cx' element, it will replace our default
$optParams = array_merge($this->optParamSEID, $optParams);

// set search term & params and execute the query
$results = $this->service->cse->listCse($searchTerm, $optParams);

// Since cse inherits from Google_Collections (which implements Iterator)
// we can loop through the results by using `getItems()`
foreach($results->getItems() as $k=>$item){
var_dump($item);
$item[] = $item;
}

return $items;
}
}
11

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

Вы должны использовать не Google_Service, но Google_Service_Customsearch

$service = new Google_Service_Customsearch($client);

а потом:

$results = $service->cse->listCse($searchTerm, $optParams);
4

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