Блог о продвижении сайтов. Заметки по SEO для личного использования и экспериментов в поиске.
23 февраля 2021 г.
How to use UULE to emulate a physical location of a searcher
Цель этой статьи - объяснить, как работает параметр UULE в поиске Google. Многие инструменты, включая Google Adwords Tool, используют его для имитации физического местоположения поисковика.
Для чего это нужно и как использовать
Параметр Google UULE используется для кодирования места или точного местоположения (с широтой и долготой) в значение, используемое в файле cookie, URL-адресе или заголовке http. Используя это, вы можете увидеть страницу результатов Google, как если бы кто-то находился в указанном месте.
Есть две известные версии параметра UULE: одна начинается с «w + CAIQICI…», а вторая - с «a + cm9…». Оба могут быть найдены как значение UULE для файла cookie для www.google.com, а также как параметр получения в URL-адресе. В дополнение к этому его также можно найти как http-заголовок «x-geo», используемый приложением Google. Хотя параметры cookie и url часто используются с версией «w + CAIQICI…», обе версии принимаются серверами Google во всех формах как допустимые средства для изменения местоположения.
Версия 1: w + CAIQICI…
Более распространенная версия из двух, вероятно, используется большинством инструментов в качестве параметра URL-адреса для размещения поиска в определенном месте. В этой версии используется «каноническое имя», которое обычно используется в Google AdWords для геотаргетинга объявлений. Вы можете найти регулярно обновляемый CSV-файл с геотаргетами в справочном разделе Google AdWords. Примером такого канонического названия является «Западный Нью-Йорк, Нью-Джерси, США», которое состоит из названия места, региона и страны, в которой это место расположено.
Я не могу точно сказать, что означает первый символ, но пока мы просто продолжим и попытаемся раскрыть его секреты. Что я могу вам сказать, так это то, что для его правильного декодирования вы должны обрабатывать всю строку как компонент URI и декодировать ее, разбивать строку на «плюс» и декодировать base64 вторую часть строки (ту, которая начинается с « CAIQICI »).
Именно здесь в большинстве статей нет точного объяснения. В типичном руководстве вам будет предложено разделить строку на «w + CAIQICI», «строковый ключ», который вы должны вычислить, и «каноническое имя» в кодировке base64. Хотя это работает, на самом деле это не так.
Если вы декодируете всю строку, вы получите двоичный файл, который на самом деле является файлом буфера протокола, который везде используется Google. Если вы декодируете этот буфер необработанного протокола, вы получите представление, которое выглядит следующим образом:
1: 2
2: 32
4: «Западный Нью-Йорк, Нью-Джерси, США»
Как видите, есть три поля (1, 2 и 4), значение которых мы не знаем, но можем догадываться. Поле 1, скорее всего, является версией (или ролью) данных, а поле 2 - перечислением производителей, поэтому 32 указывает, возможно, AdWords как источник канонического имени. Поле 4, наконец, является каноническим названием места.
Поскольку теперь мы реконструировали первую версию всего параметра uule, теперь мы можем написать небольшую программу, позволяющую кодировать и декодировать ее.
Сделать это можно здесь => decode UULE https://valentin.app/uule.html
Версия 2: a + cm9…
Эту версию можно найти в файле cookie, который Google записывает после получения местоположения через API геолокации на веб-сайте. Это также версия, которую я использовал в своем средстве смены местоположения gs для расширения Chrome, потому что эта версия не требует угадывания полей.
После просмотра вывода этой версии возникает небольшое предположение, что буква a, скорее всего, является сокращением от ascii, поскольку эта версия использует не буфер протокола, а текст. Если вы декодируете строку по URL-адресу, а затем декодируете ее с помощью base64, вы получите не двоичные данные, а текст ascii, который выглядит следующим образом:
роль: 1
продюсер: 12
происхождение: 6
отметка времени: 1591466554310000
latlng {
latitude_e7: 373860520
longitude_e7: -1220838510
}
радиус: 93000
Чтение этого текста, конечно, гораздо понятнее, чем облегченная версия, которую предоставляет буфер протокола, даже если у нас нет списка допустимых значений для роли, производителя и происхождения. Отметка времени, конечно же, представляет собой высокоточный вариант времени, прошедшего с 1 января 1970 г., 00:00:00 UTC (миллисекунды, умноженные на 1000).
Широта и долгота - это значения в кодировке 1e7 обычно используемой нотации с плавающей запятой. Скорее всего, чтобы получить целое число со знаком вместо значения с плавающей запятой. Итак, чтобы преобразовать эти значения, вам нужно разделить целое число на 10 000 000, чтобы получить число с плавающей запятой, или умножить число с плавающей запятой, чтобы получить целое число.
И последнее, но не менее важное: радиус, который, согласно справочной документации Google Maps API, - это «расстояние (в метрах), в пределах которого должны быть получены результаты поиска». но учитывая то, что я видел для UULE, значение радиуса умножено на 620 метров. Радиус, вероятно, необходим, потому что, хотя современные геолокации являются демонстрацией технической изобретательности, в этом всегда есть некоторая нечеткость.
Кстати: вы также можете указать -1 в качестве значения радиуса, что означает, что вы сами указали точные координаты. Значение для «роли» тогда должно быть «USER_SPECIFIED_FOR_REQUEST», а «производитель» - «LOGGED_IN_USER_SPECIFIED».
Теперь мы успешно реконструировали второй тип UULE, мы можем его кодировать и декодировать.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий