Как стать автором
Обновить

Custom Google Search View

Время на прочтение 5 мин
Количество просмотров 26K
Вы знаете, сколько данных вы качаете из сети каждый раз, чтобы увидеть вот эту страничку?



Если без браузерного кэша, то 600 килобайт (в gzip-e) и 38 запросов. Если с кэшем, то 70 килобайт и 7-8 запросов.



Вы знаете, что такое 600 килобайт? Это оба тома «Войны и мира» Льва Николаевича Толстого в том же gzip-e.

Конечно, отрадно, что Google Inc. пичкает нас таким количеством полезной информации. Про сами результаты поиска даже говорить не приходится — тут и картинки, и справочная информация из Википедии, и часы работы, и карта, и отзывы. Но иногда хочется чего-то простого и лаконичного. Без изнасилованных ссылок, без продаваемых товарищу майору сторонним маркетологам твоих веб кампейнов. Чтобы не тормозило на устаревших смартфонах и перегруженных мобильных сетях.

Можно, конечно, запроксировать запросы к поисковику через свой скрипт, с вивисекцией всего ненужного, но, к счастью, сам Google предлагает элегантное решение — доступ к своему Search API с выдачей чистых результатов в JSON или XML формате.

Вот часть JSON ответа для примера:

JSON
{
 "kind": "customsearch#search",
 "url": {
  "type": "application/json",
  "template": "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json"
 },
 "queries": {
  "request": [
   {
    "title": "Google Custom Search - habr",
    "totalResults": "327000",
    "searchTerms": "habr",
    "count": 10,
    "startIndex": 1,
    "inputEncoding": "utf8",
    "outputEncoding": "utf8",
    "safe": "off",
    "cx": "0019687164026253:oi9ssr7ci6e"
   }
  ],
  "nextPage": [
   {
    "title": "Google Custom Search - habr",
    "totalResults": "327000",
    "searchTerms": "habr",
    "count": 10,
    "startIndex": 11,
    "inputEncoding": "utf8",
    "outputEncoding": "utf8",
    "safe": "off",
    "cx": "00156687164026253:oi9ssr7ci6e"
   }
  ]
 },
 "context": {
  "title": "v-gornom.ru"
 },
 "searchInformation": {
  "searchTime": 0.531851,
  "formattedSearchTime": "0,53",
  "totalResults": "327000",
  "formattedTotalResults": "327 000"
 },
 "items": [
  {
   "kind": "customsearch#result",
   "title": "Лучшие публикации за сутки / Хабр",
   "htmlTitle": "Лучшие публикации за сутки / \u003cb\u003eХабр\u003c/b\u003e",
   "link": "https://habr.com/",
   "displayLink": "habr.com",
   "snippet": "Хабр – самое крупное в Рунете сообщество людей, занятых в индустрии \nвысоких технологий. Уникальная аудитория, свежая информация, ...",
   "htmlSnippet": "\u003cb\u003eХабр\u003c/b\u003e – самое крупное в Рунете сообщество людей, занятых в индустрии \u003cbr\u003e\nвысоких технологий. Уникальная аудитория, свежая информация, ...",
   "cacheId": "Wg3CgcvcAxUJ",
   "formattedUrl": "https://habr.com/",
   "htmlFormattedUrl": "https://\u003cb\u003ehabr\u003c/b\u003e.com/",
   "pagemap": {
    "cse_thumbnail": [
     {
      "width": "311",
      "height": "162",
      "src": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcT9MbmejtANdWSuXxH7pxKqWNFFRzPiTQuLmhWk5Tc5-Y-AgUgPrwEz0MV9"
     }
    ],
    "metatags": [
     {
      "viewport": "width=1024",
      "fb:app_id": "444736788986613",
      "og:type": "website",
      "fb:pages": "472597926099084",
      "og:site_name": "Хабр",
      "og:image": "https://habr.com/images/habr.png",
      "og:image:width": "1200",
      "og:image:height": "628",
      "og:title": "Лучшие публикации за сутки / Хабр",
      "og:description": "Хабр – самое крупное в Рунете сообщество людей, занятых в индустрии высоких технологий. Уникальная аудитория, свежая информация, конструктивное общение и коллективное творчество – всё это делает Хабр самым оригинальным IT-проектом в России.",
      "yandex-verification": "71593b225aeafc4e",
      "referrer": "unsafe-url",
      "pocket-site-verification": "ed24b2b9721edf0a282c5b4a3232c4",
      "application-name": "Хабр",
      "msapplication-tilecolor": "#77a2b6",
      "theme-color": "#77a2b6"
     }
    ],
    "cse_image": [
     {
      "src": "https://habr.com/images/habr.png"
     }
    ]
   }
  },
  {
   "kind": "customsearch#result",
   "title": "Хабр — Википедия",
   "htmlTitle": "\u003cb\u003eХабр\u003c/b\u003e — Википедия",
   "link": "https://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%B1%D1%80",
   "displayLink": "ru.wikipedia.org",
   "snippet": "Хабр (бывший Хабрахабр) — русскоязычный веб-сайт в формате \nколлективного блога с элементами новостного сайта, созданный для \nпубликации ...",
   "htmlSnippet": "\u003cb\u003eХабр\u003c/b\u003e (бывший \u003cb\u003eХабрахабр\u003c/b\u003e) — русскоязычный веб-сайт в формате \u003cbr\u003e\nколлективного блога с элементами новостного сайта, созданный для \u003cbr\u003e\nпубликации ...",
   "cacheId": "lB7MkUOxB7gJ",
   "formattedUrl": "https://ru.wikipedia.org/wiki/Хабр",
   "htmlFormattedUrl": "https://ru.wikipedia.org/wiki/\u003cb\u003eХабр\u003c/b\u003e",
   "pagemap": {
    "cse_thumbnail": [
     {
      "width": "220",
      "height": "130",
      "src": "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQqJU0itnwYGZAd6Z5aMJO0izPfF7cab6pc40vm0sujOP2dSgkP-UB0Je1T"
     }
    ],
    "metatags": [
     {
      "referrer": "origin",
      "og:image": "https://upload.wikimedia.org/wikipedia/ru/7/7f/Habrahabr_logo.png"
     }
    ],
    "cse_image": [
     {
      "src": "https://upload.wikimedia.org/wikipedia/ru/7/7f/Habrahabr_logo.png"
     }
    ]
   }
  },


В этой статье мы напишем View для Google Custom Search, которое будет обладать мощью Google и удовлетворять наши приземленные желания.

Чтобы получить доступ Google Custom Search API сперва нужно получить идентификатор своей поисковой системы. Для этого надо зарегистрировать систему пользовательского поиска на странице cse.google.com

Заходим на сайт, добавляем поисковую систему, указываем произвольный сайт, заходим в панель управления и получаем идентификатор поисковой системы.

Теперь надо получить токен для доступа к Custom Search API.

Заходим на console.cloud.google.com (предполагается, что аккаунты на обоих сайтах у вас уже есть), создаем проект, в левом боковом меню выбирает «API и сервисы» → «Панель управления» → «Включить API и сервисы», ищем там «Custom Search API», выбираем, включаем, затем создаем учетные данные — а именно, «Ключ API». Можно ограничить использование данного ключа только на своих IP, можно не делать этого.

Всё. Теперь мы можем отправлять запросы Google вот такой строкой:

https://www.googleapis.com/customsearch/v1?key={apikey}&cx={sid}&q=query

Где {apikey} — токен доступа, {sid} — идентификатор поиска.

В ответ мы получим чистенький JSON.

C помощью простого php скрипта мы получаем наше View, даже с некоторым приближением к оригиналу. Первая страница:

Результаты поиска:



Первая страничка — 2Кб, с результатами поиска — 6Кб.

Дело тут не только в минимализме. Google в JSON ответе выдает кучу интересной информации и позволяет задать запрос с не меньшей кучей параметров. Подробнее тут. Можно даже сделать то, что не позволяет основная страница поисковика.

Есть, конечно, и минусы — ограничение в 100 запросов в день. Остальное за доллары.

Кстати, захостить наш php скриптик можно тоже на Google и тоже абсолютно бесплатно — на https://appengine.google.com. Правда, тут уже придется изрядно помучиться — FTP, web file manager и корневые директории сайта для Google рудименты. Поэтому придется превратить php скрипт в аппликейшн, засунуть его в энджин и с помощью специальной консоли задеплоить в облака.

Задача, на самом деле, не тривиальная. Не зря Google собирается вводить новую сертификацию — Google Certified User.
Теги:
Хабы:
+23
Комментарии 10
Комментарии Комментарии 10

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн