Как экспортировать необработанные данные Mixpanel в Google Sheet с помощью API Mixpanel? - PullRequest
0 голосов
/ 14 ноября 2018

Вот решение для получения необработанных данных от Mixpanel для заполнения электронной таблицы Google. (Это не совсем вопрос :-))

  1. Получите ваш секретный ключ Mixpanel Api: https://help.mixpanel.com/hc/en-us/articles/115004490503-Project-Token-API-Key-API-Secret

  2. Создайте электронную таблицу Google или откройте существующую. 2.1 Откройте редактор скриптов [Инструменты] -> [Редактор скриптов]

2.2 Создать функцию, например: exportRawData () {}

2.3. Подготовьте заголовок HTTP следующим образом:

/**
 * Call Mixpanel raw export endpoint
 **/
exportRawData(){
 // Prepare header with the secret key
 var API_SECRET = "Replace by your Secret Key";

 var headers = {
   "Authorization" : "Basic " + Utilities.base64Encode(API_SECRET)
 };

 var params = {
   "method":"GET",
   "headers":headers
 };

  // prepare call args
  // WARNING: date are yyyy-mm-dd format
  // replace fixed date by dynamic range (now - 7 days or other)

  var url = "https://data.mixpanel.com/api/2.0/export/?from_date=2018-11-07&to_date=2018-11-14";
  Logger.log('Call Mixpanel:' + url);

  var response = UrlFetchApp.fetch(url, params);
  var rawData = response.getContentText();

  Logger.log('Response length:' + rawData.length);
  var items = rawData.split("\n"); 

  // prepare the array that it will be pushed into the google spreadsheet
  var structuredData; // the json decoded data
  var row;
  var outer = []; // array of rows

  for ( i in items ){
    structuredData = JSON.parse( items[i] );
    // In this example, we take Mobile usages only
    // with Event, Browser, User
    if ( structuredData.properties.$browser.indexOf('Mobile') >= 0 ){
      row = new Array(structuredData.event, structuredData.properties.$browser, structuredData.properties.distinct_id);
      // push the single row into the array of rowS
      outer.push(row);
    } //eo fi
  } //eo rof

   pushInSpreadsheet('Mobile Usage', outer);

} // end of exportRawData

/**
 * Push data to the Google Spreadsheet
 * sheetName: String
 * data: Array of rows
 * return: nothing
 **/
function pushInSpreadsheet(sheetName, data){
  Logger.log("push " + data.length + " item(s) into to sheet " + sheetName);
  // Prepare the sheet into the active spread sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  // select of exist or create new one
  var sheet = ss.getSheetByName(sheetName) ||
   ss.insertSheet(sheetName, 1);
   sheet.clear();

  // The expected structure for the horizontal range setting is:
  //  [ ["cell A1"],["cell B1"],["cell C1"] ] 
  var range = sheet.getRange(1, 1, data.length, data[0].length );
  range.setValues( data );
}

Я надеюсь, что это будет полезно. Любые комментарии приветствуются.

...