Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement