alex35mil / sourcebuster-js

Track the sources of your traffic
https://alexfedoseev.github.io/sbjs
MIT License
412 stars 92 forks source link

Многоканальные последовательности и формат дат #1

Closed ReZet closed 9 years ago

ReZet commented 10 years ago

Сейчас занимаюсь написанием скрипта на пхп, точнее для битрикса модуль, отслеживания откуда пришли на сайт. Чтобы интегрировать можно было с заявками, заказами внутри битрикса и уменьшить погрешность данных, так как метрика и аналитикс врут. В основе лежит как раз ваша первая статья, где вы на раби написали этот скрипт, спасибо вам за нее! :) И сейчас еще увидел статью на хабре, что и на js написали. И у меня есть вопрос и ,наверно, пожелание: Как долго писали скрипт на раби и этот скрипт на js? И меня просят написать сохранение реферального хвоста, то есть хранить все источники для посетителя. Говорят очень полезная вещь для аналитики. Поэтому, наверно, и в вашем скрипте было бы полезным.

У меня, к сожалению, нет инвайта на хабре, поэтому свой отзыв и пожелание написал тут)

alex35mil commented 10 years ago

Как долго писали скрипт на раби и этот скрипт на js?

Сам процесс написания каждой из версий занял около 2-3 дней. Плюс столько же на тесты и доки.

И меня просят написать сохранение реферального хвоста, то есть хранить все источники для посетителя. Говорят очень полезная вещь для аналитики. Поэтому, наверно, и в вашем скрипте было бы полезным.

Речь, я так понимаю, о многоканальных последовательностях.

Когда я начинал писать модуль, я договорился с собой, что пользовательские данные я храню в куках. И, если они и попадают в БД, то не через Sourcebuster. Он только помогает их доставать для записи в базу. Если в рамках модуля для Rails можно переиграть архитектуру и замутить историю по каждому пользователю, то в случае JS просто нет базы, куда я буду сохранять последовательности источников. Делать это в куках не самая лучшая идея на мой взгляд.

imbolc commented 10 years ago

А почему не хранить её в local storage с деградацией до кук?

alex35mil commented 10 years ago

Честно: пока только знаю, что оно есть, но никогда с ним не взаимодействовал. Почитаю, подумаю. Спасибо за мысль.

DiegoWtf commented 10 years ago

А с чем связан такой формат хранения fd (дата) в куки sbjs_first_add? Её даже с помощью strtotime не переделать в нужный мне формат, т.к. нету знака плюс у GMT

alex35mil commented 10 years ago

Это просто джаваскриптовый Date(). Он мне отдает такой формат: "Tue Jul 01 2014 16:13:32 GMT+0800 (WITA)"

Ruby его парсит без вопросов:

require 'date'
js_time = 'Tue Jul 01 2014 16:13:32 GMT+0800 (WITA)'
ruby_time = DateTime.parse(js_time).zone
puts ruby_time
#=> +08:00
DiegoWtf commented 10 years ago

Хорошо тебе... Вот как получается у меня в php: $date = 'Thu Jun 26 2014 12:32:23 GMT 0400'; echo date('Y-m-d H:i:s', strtotime($date)); на выходе 0400-06-29 15:02:23

Может я что не так делаю?

DiegoWtf commented 10 years ago

Проблема в отсутствии плюсика у GMT, так дата храниться в куках sbjs1

alex35mil commented 10 years ago

Очень странно. У меня в Хроме и Лисе с +. Ось / браузер?

DiegoWtf commented 10 years ago

print_r($_COOKIE['sbjs_first_add']); выдает инфу без плюсика ОС на серве Ubuntu 14.04 Trusty

alex35mil commented 10 years ago

Я понял, unescape убивает плюс. Есть предложения по формату хранения, кроме как миллисекунды (UTC)?

DiegoWtf commented 10 years ago

Могу предложить только своё имхо: Y-m-d H:i:s

alex35mil commented 10 years ago

Звучит разумно. Можно по умолчанию нормировать по UTC. И в настройку вынести установку дефолтной зоны. Сделаю.

alex35mil commented 10 years ago

@DiegoWtf Скрипт обновил. Там несколько важных фиксов помимо даты. См. changelog, доки (eng / rus)

DiegoWtf commented 10 years ago

Благодарю. А что будет с теми, у кого уже есть куки sbjs? Просто я дату конвертю щас в нужный мне формат, вот обновлю твой скрипт и не знаю с чем столкнусь)

alex35mil commented 10 years ago

Вот это хороший вопрос. Сейчас дата по умолчанию в формате 2014-06-11 17:28:26 (в UTC, если не переопределено через _setTimeZoneOffset). Как вариант можно перед конвертацией убедиться, что она нужна, а если не нужна, то просто парсить новый формат.

DiegoWtf commented 10 years ago

Решил прегматчить на наличие GMT

alex35mil commented 10 years ago

Окей.

P.S. Я сейчас немного «вильнул» с плохим коммитом. Если скачивал новую версию в течение последнего часа, то лучше обнови. Сейчас рабочая в мастере.

DiegoWtf commented 10 years ago

Ок. Озвучишь планы по развитию? Я может закомитю че-нить тоже

alex35mil commented 10 years ago

Сейчас дотестирую и выложу текущий ап (ещё несколько косяков поправил со вчерашнего дня). После этого буду думать над скриптом подмены (телефонов, заголовков и т.п.) на основании данных, отдаваемых sourcebuster'ом. Возможно добавлю ещё пару параметров (полный первый реферер, текущую страницу). И оценю задачу по многоканальным последовательностям.

Пока так. Дльнейшие шаги структурирую, когда заставлю работать текущий функционал.

alex35mil commented 10 years ago

Да, и кастомную органику (bing, yahoo, mail.ru и т.д.) в ядро хочу добавить.

alex35mil commented 10 years ago

Новая версия скрипта: http://www.alexfedoseev.com/post/41/sourcebuster-js-v003

Обновитесь.

alex35mil commented 10 years ago

v0.0.4: http://www.alexfedoseev.com/post/43/sourcebuster-js-v004

alex35mil commented 10 years ago

Дополнение к скрипту: http://www.alexfedoseev.com/post/44/sb-placer

DiegoWtf commented 10 years ago

Что-то новенькое) Заценим

alex35mil commented 9 years ago

1.0.0: http://www.alexfedoseev.com/post/50/sourcebuster-js-v100

DiegoWtf commented 9 years ago

Я думал, что уже некуда развиваться - всё есть) Ан нет)

alex35mil commented 9 years ago

В мастере фикс для тех, кто использовал настройки lifetime, session_length and timezone_offset.