Содержание:
Поиск для сайта 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
. Для этого нажимаем кнопку Панель управления и в меню слева выбираем Настройка. На открывшейся странице выставляем нужный язык, включаем поиск картинок и включаем поиск по всему интернету, а не только на указанных сайтах. После изменения настроек нажимаем кнопку Обновить внизу страницы и кликаем по кнопке Идентификатор поисковой системы.
После нажания на Идентификатор поисковой системы появится всплывающая подсказка с идентификатором, он то нам и нужен для получения токена доступа к Custom Search API.
Получение токена для доступа к API
После того, как регистрация пользовательского поиска завершена можно получить токен для доступа к API Custom Search. Это делается через панель управления cloud.google.com.
Первым делом нам надо создать проект в консоли Google Cloud, для этого заходим на console.cloud.google.com и создаем новый проект. После создания откроется панель управления проектом. Теперь в меню слева выбираем пункт API и сервисы.
В открывшейся панели управления API и сервисами нажимаем на кнопку Включить API и сервисы
После нажатия откроется библиотека сервисов Гугла, здесь вы можете добавить в свой проект любой сервис, который вам нужен. В данном случае нам необходимо найти Custom Search и нажать на него.
После нажатия на карточку вы попадете на страницу с описанием сервиса, где надо нажать на кнопку Включить, подождать пока сервис подключится к проекту и в левом меню выбрать Учетные данные. На странице учетных данных во всплывающем окне нажать Создать учетные данные.
Выбираем Ключ API, после этого всплывающее окно с ключем для доступа к API. Но это еще не все. Рекомендую настроить дополнительно ограничение доступа для данного ключа по 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. Все отправляемые запросы должны содержать как минимум три параметра:
-
cx
- идентификатор пользовательского поиска -
key
- токен для доступа к REST API -
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'
и используйте дополнительные параметры для фильтрации изображений, которые описаны в документации гугла.