Google в Key Collector: выдача в формате Яндекс XML

· Google XML · Key Collector

Key Collector отлично умеет работать с Яндекс XML и ничего не знает про выдачу Google. Прямой парсинг Google из десктопной программы — это затея, которая кончается капчей: прокси, разгадывание, снова прокси. Есть путь проще. Мы отдаём выдачу Google в формате Яндекс XML, и для Key Collector она выглядит как обычный XML-ответ. Тот же трюк работает в TopSite, SiteAnalyzer и KeyAssort.

Почему формат именно такой

Весь классический SEO-софт рунета вырос вокруг Яндекс XML и его структуры yandexsearch → response → results → grouping → group → doc. Программы разбирают ровно её, и переучивать их некому. Поэтому эндпоинт /api/google/xml кладёт результаты Google в ту же самую обёртку: позиции, URL, заголовки и сниппеты на привычных местах. Программа даже не догадывается, что внутри не Яндекс.

Собираем ссылку

Базовый вид такой:

https://jsonseo.ru/api/google/xml?key=ВАШ_КЛЮЧ&query=купить+ноутбук&region=1011969&groupby=100

Эту ссылку вставляете туда же, куда обычно вставляют адрес Яндекс XML. В Key Collector это Настройки → Yandex → Serp → Использовать Yandex.XML, поле для адреса запросов. Готовый вариант с подставленным ключом лежит в личном кабинете, копируете и вставляете. Ключ принимается и заголовком Authorization: Bearer, если софт такое умеет.

Единственное место, где можно споткнуться: полей для адреса в программе несколько, и Wordstat с поисковой выдачей настраиваются по отдельности. Ссылку для выдачи вставляйте именно в настройки Serp, а не в соседнее окно, иначе программа будет ходить не туда.

Параметры

Параметр Что делает
query Поисковый запрос
region Числовой ID региона Google. У Москвы это 1011969
loc, числовой lr Синонимы region для совместимости с XMLRiver и XMLStock
gl Страна поиска, если хочется задать её вручную
hl Язык интерфейса и результатов
groupby Сколько позиций вернуть: кратно 10, максимум 200
page Номер страницы, счёт с нуля

Обратите внимание на lr: он принимается как регион только в числовом виде. У сервисов-посредников с этим параметром исторический разнобой, подробности мы разбирали в статье про переезд с XMLRiver и XMLStock.

Проверяем, что всё работает

Прежде чем скармливать ссылку программе, откройте её в браузере или дёрните curl-ом:

curl "https://jsonseo.ru/api/google/xml?key=ВАШ_КЛЮЧ&query=test&region=1011969&groupby=10"

В ответе должен прийти XML с корнем yandexsearch и десятью блоками doc внутри grouping. Если пришёл именно он, дальше всё сделает программа. Если вместо результатов ошибка, почти всегда дело в одном из двух: опечатка в ключе или регион передан текстом вместо числового ID. Оба случая видно по тексту ошибки в том же XML.

Ещё одна мелочь, о которой спотыкаются при ручной проверке: запрос в URL должен быть закодирован. Пробелы передаются как + или %20, кириллица уходит в percent-encoding. Браузер и Key Collector делают это сами, а вот в самописном скрипте про кодирование легко забыть и потом полчаса гадать, почему выдача пришла не по тому запросу.

Регионы: откуда брать ID

У Google нет публичного справочника регионов в духе яндексовских lr, поэтому мы держим свой: 273 644 локаций, от стран до отдельных районов города. Ищите нужный город в каталоге регионов Google или дёргайте бесплатный /api/google/regions, он работает даже без авторизации.

Под капотом по ID региона сервер строит параметр UULE и сам подставляет корректный gl. Что такое UULE и почему без него региональная выдача Google превращается в лотерею, читайте в разборе про UULE. Здесь достаточно знать, что руками его собирать не придётся.

Не только Россия

База не ограничивается рунетом. Если вы продвигаете сайт под Алматы, Варшаву или Берлин, находите ID города в том же каталоге и подставляете его в region, а сервер построит UULE под эту локацию и сам выберет страну поиска. Язык результатов при необходимости фиксируется через hl. Схема одна и та же, что для Тулы, что для Торонто, и Key Collector разницы не заметит.

Глубина и цена

За один запрос можно забрать до 200 позиций: groupby=200 при page=0. Для съёма позиций этого хватает с запасом: ниже двухсотой строки жизни почти нет. Держите глубину одинаковой от замера к замеру, иначе сравнивать динамику будет не с чем.

Тариф общий для всех поисковиков: 0.01 ₽ за страницу выдачи, 10 ₽ за 1000. Google не дороже Яндекса, никаких «премиальных» коэффициентов. При регистрации на баланс начисляются 10 ₽, то есть тысяча страниц, чтобы скормить программе собственное ядро и посмотреть, как она переваривает наши ответы.

А Яндекс туда же

Раз уж программа настроена, логично снимать через неё оба поисковика. Для Яндекса есть зеркальный эндпоинт /api/yandex/xml с теми же groupby и page, только регион там классический яндексовский lr: у Москвы 213, у Питера 2. Ключ один, баланс общий. Получается одна программа, два поисковика и один счёт вместо зоопарка сервисов. Собственно, ради этого всё и затевалось. Если сейчас вы снимаете Google через XMLRiver или XMLStock, разница в параметрах описана в отдельной статье.

Если XML не нужен

Формат Яндекс XML — это про совместимость со старым софтом. Пишете свой скрипт? Берите /api/google: тот же поиск, но обычный JSON, плюс параметры вроде break_domain, который останавливает парсер на нужном домене и экономит деньги при съёме позиций. Как именно, написано в статье про break_domain.


Читайте дальше