SHARE
TWEET

Untitled

a guest Oct 23rd, 2019 83 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. //Ссылка для получения oauth_token    https://oauth.yandex.ru/authorize?response_type=token&client_id=a7701c4236d14b268c2cee2a583464bc
  3.  
  4.  
  5.  
  6.  
  7. /**
  8. * Получает данные из Яндекс Метрики
  9. *
  10. * @param {Range} Укажите диаппазон с параметрами - 1й столбец - параметр, 2й-значение
  11. * @return {Array} Полученные данные
  12. * @customfunction
  13. **/
  14. function metrika(params) {
  15.   var metrikaParams = JSON.parse (arrToJSON (params)) ;
  16.  
  17.   var answer = GetMetrika( metrikaParams );
  18.   var headLine = dataHeadline(answer);
  19.   return dataToArray(headLine,answer);
  20.   //return objectToGet(JSON.parse(arrToJSON (params)));
  21. }
  22.  
  23.  
  24.  
  25. function arrToJSON(Params) {
  26.   //собираем параметры из входного массива
  27.   var arrToObj = "";
  28.   for (i=0;i<Params.length;i++){
  29.     if ( Params[i][0] && Params[i][1]){
  30.       arrToObj +='"'+ Params[i][0]+'":'+'"'+Params[i][1]+'",';
  31.      
  32.     }
  33.   }
  34.   arrToObj = "{"+arrToObj+"}";
  35.   return arrToObj;
  36. }
  37.  
  38.  
  39.  
  40.  
  41.  
  42. //Получает из Метрики объект в виде JSON
  43. function GetMetrika(MetrikaParams) {
  44.   var token =  MetrikaParams.oauth_token;
  45.  
  46.   var headers = {
  47.     'Authorization' : 'OAuth ' + token,
  48.   };
  49.   var options =
  50.       {
  51.         "headers": headers,
  52.       };
  53.  
  54.  
  55.  
  56.   delete MetrikaParams.oauth_token;
  57.   var metrika_api_base_url = "https://api-metrika.yandex.ru/stat/v1/data?";
  58.  
  59.   metrika_api_base_url = metrika_api_base_url + objectToGet(MetrikaParams);
  60.   Logger.log(metrika_api_base_url);
  61.  
  62.   var responseJson=UrlFetchApp.fetch(metrika_api_base_url, options).getContentText();
  63.   var response = JSON.parse(responseJson);
  64.   Logger.log (responseJson);
  65.   return response;
  66. }
  67.  
  68.  
  69. //Формирование GET параметров для запроса из Object
  70. function objectToGet(obj){
  71. var str = "";
  72. for (var key in obj) {
  73.   if (obj[key] !="") {
  74.   if (str != "" ) {
  75.         str += "&";
  76.     }
  77.     str += key + "=" + encodeURIComponent(obj[key]);
  78.   }
  79. }
  80.   return str;
  81. }
  82.  
  83.  
  84. function dataHeadline(answer){
  85.  //Формирует заголовки столбцов таблицы
  86.   var rowdata =[];
  87.    for (dName in answer.query.dimensions) {
  88.     rowdata.push(answer.query.dimensions[dName]);
  89.      };
  90.    for (dMetr in answer.query.metrics) {
  91.     rowdata.push(answer.query.metrics[dMetr]);
  92.      };
  93.   return rowdata;
  94. }
  95.  
  96.  
  97.  
  98. // Ответ в масив
  99. function dataToArray(headline,answer){
  100.   var ss = SpreadsheetApp.getActiveSpreadsheet();
  101.   var sheet = ss.getSheets()[0];
  102.  var array=[];
  103.    //формируем заголовок
  104.  array.push(headline);
  105.   //данные таблицы
  106.  
  107.  
  108.   for ( i=0; i<answer.data.length; i++ ) {
  109.    rowdata =[];
  110.      for (dName in answer.data[i].dimensions) {
  111.     rowdata.push(answer.data[i].dimensions[dName].name);
  112.      };
  113.     for (dMetr in answer.data[i].metrics) {
  114.     rowdata.push(answer.data[i].metrics[dMetr]);
  115.      };
  116.    array.push(rowdata);
  117.  
  118.   }
  119.   return array;
  120. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top