Skip to content

Instantly share code, notes, and snippets.

@Slach
Last active August 29, 2015 14:08
Show Gist options
  • Save Slach/c5d4fd755a2158df5c76 to your computer and use it in GitHub Desktop.
Save Slach/c5d4fd755a2158df5c76 to your computer and use it in GitHub Desktop.
possible Lingualeo + Snowplow integration snippet
/*
примерный набросок того как должен быть реализован протокол snowplow внутри расширения
пример вызова
trackSnowplowEvent('Popup window','Show translation','is_phrase','translates_showed',3);
*/
function trackSnowplowEvent(event_category, event_action, event_label, event_property, event_value) {
image = new Image(1,1);
url = 'http://ac2.lingualeo.com/i?'
url += 'e=se'
url += '&se_ca='+event_category; // event_category = popup window
url += '&se_ac='+event_action; // event_action = show translate
url += '&se_la='+event_label; // event_label = is_phrase or is_word
url += '&se_pr='+event_property;
url += '&se_va='+event_value;
user_id = 23423434; //надо брать после регистрации обычно приходит от API в виде куки userid или заголовка X-Userid
url += '&uid='+user_id;
user_local_lang = 'ru'; // язык коорый учит пользователь (должен быть у приложении можно из api/login взять)
user_lang_target = 'en'; // целевой язык тоже из api/login вроде бы берется
user_premium_type = 'gold'; //или пустая строка
abtest = ''; //пока мы не умеем делать аб-тесты в расширениях
//event context - JSON sctring
context = {
"schema":"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-0",
"data":[
{
"schema":"iglu:com.lingualeo.contexts/global/jsonschema/1-0-0",
"data":{
"user_lang_local": user_local_lang,
"user_lang_target": user_lang_target,
"user_premium_type": user_premium_type,
"user_langlevel": user_langlevel, //определяется из профиля, должен отдаваться api/login
"user_xp_level": user_xp_level, //определяется из профиля, должен отдаваться api/login
"abtest":""
}
}
]
};
// тут чтото что закодирует
url += '&cx='+base64urlencode(json2.strigify(context)); //реализацию base64 см. тут https://github.com/snowplow/snowplow-javascript-tracker/blob/master/src/js/payload.js#L49
url += '&dtm='+getTimestamp(); //см. https://github.com/snowplow/snowplow-javascript-tracker/blob/master/src/js/tracker.js#L453
url += '&tid='+String(Math.random()).slice(2, 8);
url += '&vp=1486x361'; //см. https://github.com/snowplow/snowplow-javascript-tracker/blob/master/src/js/lib/detectors.js#L157, как именно тебе определять сам решай
url += '&ds=1474x905'; //см. https://github.com/snowplow/snowplow-javascript-tracker/blob/master/src/js/tracker.js#L515
url += '&vid=7'; // номер визита, надо запоминать в LocalStorage, генерацию sessionIdx см. тут.
url += '&duid=c4e9238fe2c4cd90'; // генерацию duid см. тут https://github.com/snowplow/snowplow-javascript-tracker/blob/master/src/js/tracker.js#L492
url += '&p=plugin';
url += '&tv=ll_plugin_tracker';
url += '&fp=418103408'; // пример реализации см. https://github.com/snowplow/snowplow-javascript-tracker/blob/master/src/js/lib/detectors.js#L116
url += '&aid=plugin_chrome';
url += '&lang=ru'; // язык страницы
url += '&cs=UTF-8';
url += '&tz=Asia%2FYekaterinburg'; //см. https://github.com/snowplow/snowplow-javascript-tracker/blob/master/src/js/lib/detectors.js#L41
url += '&tna=ll';
// размер экрана, глубина цвета, поддержка кук см. https://github.com/snowplow/snowplow-javascript-tracker/blob/master/src/js/tracker.js#L173
url += '&res=1920x1080';
url += '&cd=24';
url += '&cookie=1';
image.src = url;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment