Dubrowsky
Хроники одного дупла
Блогово  →  WebDev  → 

Как я отлаживал сборщик поисковых запросов из REFERER

08 Апреля 2012 года

Я уже писал, что работаю над некоторой приблудой по распознаванию ключевиков в реферерах. Писал -  когда жаловался на гугль, который собственно лишил нас возможности получать поисковые фразы из реферера для части случаев. Приблуда плавно тестируется, при этом в моем воображении обрастает все новыми фичами - а это верный знак, что до паблика она вряд ли когда-либо доберется :) Но речь пока не об этом. Расскажу, как я ее, ловилку ключевиков, отлаживал.

Если вдруг кому-то придется это повторить, мой опыт может пригодиться. Код публиковать не буду, а опишу логику в целом. Код писать любой дурак может, что уж там :)

Я - старый пыхарь, делал все на пыхе и через браузер. Труъ-кодер делал бы на перле и через консоль, но куда уж нам - извиняйте 6)

1. Получаем данные

Раз мы учимся доставать ключевики из HTTP_REFERER, нам надо заиметь как можно больше этих самых рефереров. А где их взять? Правильно - в логах! У меня по счастью оказались архивы логов довольно посещаемого сайта, в общей сложности более 3 гигов.

2. Готовим данные

Поскольку в процессе отладки конечной ф-ции нам придется гулять по массиву данных много-много раз, надо бы сперва откинуть все явно лишнее и получить данные в виде, пригодном для "прогулок".

Логи, ясное дело, имеются в виде пачки .gz-файлов. Я накидал функцию, которая:

  1. открывает каждый файл
  2. начинает читать оттуда строки
  3. каждую сверяет с регуляркой, проверяющей, есть ли в строке название какого-нибудь поисковика
  4. если есть - проверяет, находится ли вхождение в поле, соответствующем рефереру (ибо "yandex" может быть и в юзер-агенте, и даже в урле страницы, которую хитнули)
  5. если это реферер - получает URL и кладет его в новый файлик для "чистых" данных
  6. незадолго до таймаута запоминает, где остановилась, и дохнет по своей воле, чтоб при следующем запуске начать с нужного места (так можно делать все тупо по http, не заморачиваясь с консолью).

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

3. Отлавливаем пустые ключевики

Реализуем нашу функцию в черновом виде и начинаем гонять по данным. Клиент функции при этом проверяет, вернулось ли значение, или найти ключевик не удалось. Если не удалось - пишет "плохой" реферер в новый файлик. Получив набор "плохих" рефереров, переключаем клиент на этот набор и правим функцию: во-первых, учимся отбрасывать непоисковые рефереры (типа переходов с яндекс.почты), во-вторых, улучшаем регулярки, добывающие кивурд из поисковых рефереров.

На этом этапе я за каждый прогон выплевывал на экран 50 рандомных случаев (чтоб можно было охватить глазами) и общее число неудач.

Повторяем процедуру, пока наша функция не будет для 100% данных либо определять какой-либо кивурд, либо говорить, что это "не поиск".

4. Разбираемся с кодировками

Наша задача - сделать, чтоб все данные возвращались в юникоде. Для этого тупо проходим по массиву данных, для которых успешно возвращяется ключевик, и смотрим, отдается он в UTF-8 или еще в какой неведомой кодировке. Правим функцию, пока все найденное не станет отдаваться юникодом.

5. Отсматриваем вручную результаты

Чтобы наступило счастье, я сделал еще одну функцию-клиент, которая выводит 50 случайных кивурдов, запоминая в сессию номера строк, откуда эти кивурды взялись. И две ссылки - "показать еще раз" и "показать другие". Смотрим глазами, если видим лажу - вносим правки и жмем "еще раз", пока лажа не исчезнет. Когда все ок - смотрим другие 50. И так - до тех пор, пока лажа перестанет появляться :)

На всю возню у меня ушло часов 10, если интересно. Теперь гоняю на живых сайтах, фиксируя "неудачи" в логах. И что бы вы думали? Ага, фейлов полно - еще ковырять и ковырять :) Ну ничего, прорвемся.

Напоследок как всегда про хипстеров. Хипстеры часто трудятся дизайнерами, а иногда даже архитекторами. Есть ненулевая вероятность, что где-то сидит такой хипстер и рисует проекты бань http://www.bani-stroy.ru/ в автокаде. Если конечно на макбуке можно запустить автокад, не знаю :)

Камменты

Lisa09.04.2012, 22:44#
Эк у тебя приbлуда странно выглядит в тексте
Николай Дубровскийон самый09.04.2012, 23:59#
Ага, я уже заметил. Это резалке нецензурщины слово не по вкусу пришлось :)

Написать коммент: памятка постеру

 

Крутые посты wtf??? →

02.10.2012 · 90 камментов · рейтинг 19.11
28.04.2008 · 44 каммента · рейтинг 9.67
06.03.2008 · 29 камментов · рейтинг 7.79
28.03.2008 · 23 каммента · рейтинг 6.96
19.01.2008 · 20 камментов · рейтинг 6.43

Последне камменты

22.07.2017  СергейПочему не работает form.submit(): Также столкнулся с неработающим .submit() при отпр...
20.07.2017  СергейСвязь: Здравствуйте. Хочу предложить Вам тройной обмен п...
17.07.2017  Илья АрхипкинСколько журналистов в России?: Мне рассказывали как журналисты освещали акцию в К...
21.05.2017  Vadim GukОбработка кликов и цели в Яндекс.Метрике, улучшенный вариант: Большое спасибо за решение задачи.
20.05.2017  ДмитрийТестовое задание для PHP-программиста (Junior): А джуны ещё нужны у вас в компании?

Статсы