SHARE
TWEET

Untitled

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