Поиск через Google Custom Search API на PHP

Google Custom Search - это API поиска Google для встраивания на сторонние сайты или получения результатов поиска в скриптах через REST API. Мы рассмотрим как получить результаты поиска Google с помощью PHP скрипта.

Содержание:

  1. Поиск для сайта Google Custom Search
  2. Настройка доступа
    1. Регистрация пользовательского поиска
    2. Получение токена для доступа к API
  3. Пишем PHP скрипт
    1. Создание проекта и установка библиотек через Composer
    2. Пишем API клиента и получаем результаты поиска
  4. Запуск и тестирование

Поиск для сайта Google Custom Search 

Из документации Google для разработчиков следует, что Google Custom Search - это поисковая машина для вашего сайта, которая выводит результаты поиска страниц и картинок на вашем сайте. Вы можете сами настраивать ранжирование результатов, а также кастомизировать выводимую информацию(сниппеты). Также вы можете включить показ рекламы Google AdSense в результатах поиска по вашему сайту и зарабатывать на комиссии с кликов по объявлениям.

Помимо интерактивного поиска по сайту Custom Search можно использовать для получения результатов поисковой выдачи Google через JSON/Atom API, который мы и будем использовать в нашем скрипте. 

Использование Google Custom Search бесплатно, но имеет ограничение в 100 запросов в сутки. Если этого не достаточно, то придется платить по 5$ за каждые дополнительные 1000 запросов в сутки. Теоретически, это ограничение можно обойти используя несколько аккаунтов.

Настройка доступа

Для начала работы с REST API необходимо зарегистрировать пользовательский поиск и получить токен доступа в Google Cloud. Для этого нам надо будет создать проект в cloud.google.com и добавить в него библиотеку поиска.

Регистрация пользовательского поиска

Во время поиска через REST API используется идетификатор поиска - cx. Чтобы его получить необходимо зарегистрироваь систему пользовательского поиска на странице cse.google.com. Заходим и нажимаем кнопку Добавить или Add.

На странице регистрации поиска указываем сайты, на которых будет выполняться поиск. Можно указать фейковый адрес, так как при поиске через REST API домен не проверяется. При поиске на сайте возможно тоже. Затем выбираем язык и придумываем название для нашего поиска и нажимаем Создать

создание нового пользовательского поиска

После нажатия кнопки Создать появится страница с сообщением, что пользовательский поиск успешно зарегистрирован.

Сообщение об успешной регистрации пользовательского поиска

Теперь нам надо немного поднастроить наш поиск и узнать значение параметра cx. Для этого нажимаем кнопку Панель управления и в меню слева выбираем Настройка. На открывшейся странице выставляем нужный язык, включаем поиск картинок и включаем поиск по всему интернету, а не только на указанных сайтах. После изменения настроек нажимаем кнопку Обновить внизу страницы и кликаем по кнопке Идентификатор поисковой системы.

Настройка пользовательского поиска и получени идентификатора для API

После нажания на Идентификатор поисковой системы появится всплывающая подсказка с идентификатором, он то нам и нужен для получения токена доступа к Custom Search API.

всплывающая подсказка с идентификатором google custom search

Получение токена для доступа к API

После того, как регистрация пользовательского поиска завершена можно получить токен для доступа к API Custom Search. Это делается через панель управления cloud.google.com.

Первым делом нам надо создать проект в консоли Google Cloud, для этого заходим на console.cloud.google.com и создаем новый проект. После создания откроется панель управления проектом. Теперь в меню слева выбираем пункт API и сервисы.

пункт меню API и сервисы

В открывшейся панели управления API и сервисами нажимаем на кнопку Включить API и сервисы

кнопка включить API и сервисы

После нажатия откроется библиотека сервисов Гугла, здесь вы можете добавить в свой проект любой сервис, который вам нужен. В данном случае нам необходимо найти Custom Search и нажать на него.

поиск Google Custom Search в библиотеке сервисов панели Cloud Google Console

После нажатия на карточку вы попадете на страницу с описанием сервиса, где надо нажать на кнопку Включить, подождать пока сервис подключится к проекту и в левом меню выбрать Учетные данные. На странице учетных данных во всплывающем окне нажать Создать учетные данные.

включение Custom Search на странице с описанием сервиса
создание учетных данных

Выбираем Ключ API, после этого всплывающее окно с ключем для доступа к API. Но это еще не все. Рекомендую настроить дополнительно ограничение доступа для данного ключа по IP или по адресу сайта.

новый созданный ключ для доступа к Google Custom Search

Нажимаем на Применить ограничения для ключа и настраиваем ограничения для доступа по IP или по адресу сайта и нажимаем сохранить.

настройка ограничений по IP для вновь созданного ключа

Настройка Custom Search и ключа доступа к API завершена, теперь можно использовать вновь созданный ключ в наших скриптах.

Пишем PHP скрипт

После регистрации поиска и полученя откенов мы можем получать результаты поиска Google в формате JSON или XML. Мне удобнее работать с JSON поэтому я буду использовать JSON API.  

Для отправки HTTP запросов к Custom Search API я буду использовать библиотеку Guzzle и документация по работе с сервисом через REST. Полное описание параметров и инструмент для создания и тестирования запросов можной найти на этой странице.

Создание проекта и установка библиотек через Composer

Для установки библиотек и инициализации проекта я буду использовать менеджер пакетов для PHP - Composer. Что это и как им пользоваться писать не буду, так как раз уж вы ищете как использовать Google Custom Search в PHP скриптах, то надеюсь вы умеете им пользоваться.

Тестовый проект будет иметь простейщую структуру:

cse-project/
  composer.json
  vendor/
  src/
  index.php

Устанавливаем Guzzle HTTP client:

composer require guzzlehttp/guzzle

Composer установит Guzzle и создаст папку vendor со скриптом автозагрузки, который остается подключить в index.php

Пишем API клиента и получаем результаты поиска

Для работы с REST API нам потребуется токен и cx, которые мы зарегистрировали и настроили в первой части. Теперь можно подключить Guzzle в проект и отправить первый запрос в Google Custom Search. Все отправляемые запросы должны содержать как минимум три параметра:

  1. cx - идентификатор пользовательского поиска
  2. key - токен для доступа к REST API
  3. q - ключевое слово для поиска

Полный список параметров и инструмент для тестирования запросов с разными параметрами можно найти здесь.

Осталось написать обработчик для отправки запроса. Добавляем в index.php следующий код:

<?php

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

use GuzzleHttp\Client;

// Токен и cx идентификатор
$key = 'AIzaSyDBKiIQeGlZjSwKdMT1PaV11H5_TkM_Q8Q';
$cx = '003461939422394181413:xbbx33yuozi';

// Формируем запрос
$q = http_build_query(array(
    'key' => $key,
    'cx'  => $cx,
    'q'   => 'лучшие автомобили 2017 года' // запрос для поиска
));

// Инициализация клиента
$client = new Client(array(
    'base_uri' => 'https://www.googleapis.com/customsearch/v1',
    'query'    => $q,
    'timeout'  => 3.0,
    'debug'    => false,
    'headers'  => array(
      'Accept' => 'application/json'
    ),
));

// отправка запроса и получение результатов поиска
$response = $client->request('GET');
$results = json_decode($response->getBody()->getContents(), true);
var_dump($results);

Запуск и тестирование

php index.php

После выполнения вы увидите дамп массива с результатми поиска, которые уже можно обработать и использовать дальше. Если результаты не появились, то лучше установить параметр debug в true и посмотреть вывод кода ответа сервера. Скорее всего вы накосячили при копировании ключа/cx или указали неправильный ip или домен в ограничениях доступа к токену в console.google.com.

Чтобы искать картинки ставьте параметр 'searchType' => 'image' и используйте дополнительные параметры для фильтрации изображений, которые описаны в документации гугла