Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Ссылка для получения oauth_token https://oauth.yandex.ru/authorize?response_type=token&client_id=a7701c4236d14b268c2cee2a583464bc
- /**
- * Получает данные из Яндекс Метрики
- *
- * @param {Range} Укажите диаппазон с параметрами - 1й столбец - параметр, 2й-значение
- * @return {Array} Полученные данные
- * @customfunction
- **/
- function metrika(params) {
- var metrikaParams = JSON.parse (arrToJSON (params)) ;
- var answer = GetMetrika( metrikaParams );
- var headLine = dataHeadline(answer);
- return dataToArray(headLine,answer);
- //return objectToGet(JSON.parse(arrToJSON (params)));
- }
- function arrToJSON(Params) {
- //собираем параметры из входного массива
- var arrToObj = "";
- for (i=0;i<Params.length;i++){
- if ( Params[i][0] && Params[i][1]){
- arrToObj +='"'+ Params[i][0]+'":'+'"'+Params[i][1]+'",';
- }
- }
- arrToObj = "{"+arrToObj+"}";
- return arrToObj;
- }
- //Получает из Метрики объект в виде JSON
- function GetMetrika(MetrikaParams) {
- var token = MetrikaParams.oauth_token;
- var headers = {
- 'Authorization' : 'OAuth ' + token,
- };
- var options =
- {
- "headers": headers,
- };
- delete MetrikaParams.oauth_token;
- var metrika_api_base_url = "https://api-metrika.yandex.ru/stat/v1/data?";
- metrika_api_base_url = metrika_api_base_url + objectToGet(MetrikaParams);
- Logger.log(metrika_api_base_url);
- var responseJson=UrlFetchApp.fetch(metrika_api_base_url, options).getContentText();
- var response = JSON.parse(responseJson);
- Logger.log (responseJson);
- return response;
- }
- //Формирование GET параметров для запроса из Object
- function objectToGet(obj){
- var str = "";
- for (var key in obj) {
- if (obj[key] !="") {
- if (str != "" ) {
- str += "&";
- }
- str += key + "=" + encodeURIComponent(obj[key]);
- }
- }
- return str;
- }
- function dataHeadline(answer){
- //Формирует заголовки столбцов таблицы
- var rowdata =[];
- for (dName in answer.query.dimensions) {
- rowdata.push(answer.query.dimensions[dName]);
- };
- for (dMetr in answer.query.metrics) {
- rowdata.push(answer.query.metrics[dMetr]);
- };
- return rowdata;
- }
- // Ответ в масив
- function dataToArray(headline,answer){
- var ss = SpreadsheetApp.getActiveSpreadsheet();
- var sheet = ss.getSheets()[0];
- var array=[];
- //формируем заголовок
- array.push(headline);
- //данные таблицы
- for ( i=0; i<answer.data.length; i++ ) {
- rowdata =[];
- for (dName in answer.data[i].dimensions) {
- rowdata.push(answer.data[i].dimensions[dName].name);
- };
- for (dMetr in answer.data[i].metrics) {
- rowdata.push(answer.data[i].metrics[dMetr]);
- };
- array.push(rowdata);
- }
- return array;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement