ApiMonster
  • Документация
  • Документация
ApiMonster
ApiMonster
  • Документация
  • Документация

Инструмент “JavaScript/NodeJS”

Total
0
Shares
0
0
0

Структура вызываемой функции

function runJavascriptCode(a,b,c,d,e) {
            'use strict'; 
            let result = null;
            
            //------------------------start your code--------------------
            
            result = a + b + c + d + e;
            
            //--------------------------end your code---------------------
            
            return result; 
}
var a = '1';
var b = '2';
var c = '3';
var d = '4';
var e = '5';
console.log(runJavascriptCode(a,b,c,d,e));        

Проще всего написать код в удобном вам инструменте – https://www.jdoodle.com/execute-nodejs-online/ или вашей IDE и далее скопировать код в ApiMonster.

Нужен код для секции start your code/end your code.

Примеры кода

Отправка массива данных в качестве вебхука на заданный url.

const fetch = require("sync-fetch");       
const response = fetch("	https://webhook.site/4c1a1a1c-abeb-41b2-83e1-ae269fb39713", {
                            method: "POST",
                            body: JSON.stringify({
                                a: a,
                                b: b,
                                c: c,
                                d: d,
                                e: e
                            })
                       });
return response.statusText;
            

Узнать самый дорогой sku в заказе из озона с учетом количества заказанных товаров.

//check code here - https://www.jdoodle.com/execute-nodejs-online/
        function runJavascriptCode(a,b,c,d,e) {
            'use strict'; 
            let result = null;
            
            //------------------------start your code--------------------------

            //превращаем json в массив            
            let data = JSON.parse(a);
            
            let maxPrice = 0;
            
            //обходим массив
           for(var i in data){
               let item = data[i];
               
                //выводим в консоль что в текущем элементе массива чтобы понять какие там данные
                //console.log(item);
               
               let price = item.price * item.quantity;
               
               //если цена больше последней максимальной цены, обговляем самый дорогой sku
                if (price>maxPrice){
                    maxPrice = price;
                    result = item.offer_id;
                }
           }

            //--------------------------end your code--------------------------
            
            return result; 
        }
        var a = '[{    "price": "26890.0000",    "offer_id": "stwrOD35",    "name": "Оверлок Stoewer OD-35",    "sku": 1084950881,    "quantity": 1,    "mandatory_mark": [],    "dimensions": {      "height": "323.00",      "length": "447.00",      "weight": "7550",      "width": "365.00"    },    "currency_code": "RUB"  },  {    "price": "6101.0000",    "offer_id": "send4bio",    "name": "Проточный фильтр под раковину Sendo Aqua 4Bio",    "sku": 981820964,    "quantity": 1,    "mandatory_mark": [],    "dimensions": {      "height": "425.00",      "length": "195.00",      "weight": "4400",      "width": "410.00"    },    "currency_code": "RUB"  }]';
        var b = '';
        var c = '';
        var d = '';
        var e = '';
        console.log(runJavascriptCode(a,b,c,d,e));        

Подменить значение поля в массиве согласно маппинга.

function runJavascriptCode(a,b,c,d,e) {
            'use strict'; 
            let result = null;
            
            //------------------------start your code--------------------------
            
                        //маппинг: артикул wb > артикул rcrm
            let map = {
                'snd123':'rcrmArticle',
                'wbArticle1':'rcrmArticle1',
            }
            
            //превращаем json в массив
            let order = JSON.parse(a);
            
            //перебираем маппинг
            for (let wbArticle in map) {
                //если пришел артикул из маппинга, подставляем вариант для rcrm
                if (order.hasOwnProperty('article') && order['article'] === wbArticle){
                    order['article'] = map[wbArticle];
                    break;
                }
            }
            
            //возвращаем обновленный массив заказа
            result = JSON.stringify(order);
            
            //--------------------------end your code--------------------------
            
            return result; 
        }
        var a = '{"address":null,"deliveryType":"fbs","user":null,"orderUid":"5483976_11741988085208591","article":"snd4bio","rid":"11741988085208591.0.0","createdAt":"2023-11-20T06:33:05Z","offices":["Москва_Запад-Юг"],"skus":["4673744335316"],"id":1213910358,"warehouseId":143195,"nmId":123,"chrtId":264161474,"price":511300,"convertedPrice":511300,"currencyCode":643,"convertedCurrencyCode":643,"cargoType":1,"name":"test"}';
        var b = '';
        var c = '';
        var d = '';
        var e = '';
        console.log(runJavascriptCode(a,b,c,d,e));  

Выгрузка статистики из Яндекс Метрики по utm-меткам, формирование csv для загрузки в google sheets.

  //подключем библиотеки
    const fetch = require("sync-fetch");
 
//вспомогательные функции
    function createUrl(baseUrl, params) {
        let items = [];
        for (let key in params) {
            items.push(key + "=" + params[key]);
        }
        return baseUrl + "?" + items.join('&');
    }
 
    function createCsv(csvRows) {
        return csvRows.join("\r\n");
    }
 
//токены
 
    let token = "AQAAAAAm6eb9AAc4_123456";
 
 
//формируем ссылку в api
 
    let dateFrom = "2024-03-01";
    let dateTo = "2024-03-31";
 
    let params = {
        "id": 82227529,
        "metrics": "ym:s:visits,ym:s:users",
        "dimensions": "ym:s:UTMSource,ym:s:UTMMedium,ym:s:UTMCampaign,ym:s:UTMContent,ym:s:UTMTerm",
        "date1": dateFrom,
        "date2": dateTo
    };
 
    let baseUrl = "https://api-metrika.yandex.net/stat/v1/data";
 
    let url = createUrl(baseUrl, params);
 
//делаем запрос в api
 
    let headers = {
        'Content-Type': 'application/json;charset=utf-8',
        'Authorization': "OAuth " + token
    };
 
    let response = fetch(url, {method: "get", "headers": headers});
 
//если вернулся корректный ответ
    if (response.status === 200) {
 
        let data = response.json(); //ответ api
        let csvRows = []; //массив строк для будущего csv
 
        //смотрим что вернуло api
        // console.log(data);
 
        //рисуем заголовок дашборда
 
        csvRows.push("Отчет по UTM-меткам, период: " + dateFrom + " - " + dateTo);
        csvRows.push("");
        csvRows.push(data.query.dimensions.join(";") + ';' + data.query.metrics.join(";"))
 
        //рисуем строки дашборда
 
        data.data.forEach(function (item, i, arr) {
            let rowData = [];
            rowData.push(item.dimensions[0].name);
            rowData.push(item.dimensions[1].name);
            rowData.push(item.dimensions[2].name);
            rowData.push(item.dimensions[3].name);
            rowData.push(item.dimensions[4].name);
            rowData.push(item.metrics[0]);
            rowData.push(item.metrics[1]);
            csvRows.push(rowData.join(";"));
        });
 
        //делаем csv
        let result = createCsv(csvRows);
        // смотрим что получилось в csv
        // console.log(result);
 
        //возвращаем результат для дальнейших шагов связки
        return result;
    } else {
        //ошибка запроса
    }

Парсинг JSON с кавычками в значениях, например “item”:”Соус \”Васаби\””:

function jsonParse(raw){
    raw = raw.replace(/\s\"/g,' ');
    raw = raw.replace(/\"\s/g,' ');
    raw = raw.replace('""','"');
    return  JSON.parse(raw);
}

Коррекция значения по списку значений из массива с тестированием

function fixName(value){
    let chars = ["с.","г."];
    let result = value;
    if (value.indexOf('с.')==-1){
        chars.forEach((char) => {
            result = result.replace(char,'');
        })
        result = result.trim();
        result = 'г. ' + result;
    }
    
    return result;    
}

let cases = ['Актау','с.Актау','г.Актау','г. Актау', 'с. Актау', 'с. Лос Сантос', 'г. Лос Сантос','Лос Сантос'];

cases.forEach((value) => {
  console.log(value + " > " + fixName(value));
})

Шаблон разработки функции с тестированием


//требуемая функция
function parseIds(str){
    const regex = /\d{4}/gm;
    let m;
    let matches = [];
    while ((m = regex.exec(str)) !== null) {
        if (m.index === regex.lastIndex) {
            regex.lastIndex++;
        }
        m.forEach((match, groupIndex) => {
            matches.push(match);
        });
    }
    return matches.join(',');
}


//тестовые кейсы - что на входе и что ожидается на выходе
let cases = [
    {
        'value':'Счета на оплату №1233,3243,3443,3434 за выполненные работы',
        'result':'1233,3243,3443,3434'
    },
        {
        'value':'Счета на оплату №1233 за выполненные работы',
        'result':'1233'
    }
];

//тестирование 

cases.forEach((c) => {
    let result = parseIds(c['value']);
    
    //результат ожидаемый
    if (result === c['result']){
        console.log(c['value'] + ' - OK')
    }
    //результат не ожидаемый
    else{
        console.log(c['value'] + ' - ERROR, result = ' + result + ', ожидалось = ' + c['result'])
    }
});
Total
0
Shares
Share 0
Tweet 0
Pin it 0
Previous Article
  • Документация

Инструмент “Найти текст через регулярное выражение”

Читать далее
Next Article
  • Документация

Подключение PlanFix к ApiMonster

Читать далее
You May Also Like
Читать далее
  • Документация

Подключение Новофон к ApiMonster

  • admin
  • 14.05.2025
Читать далее
  • Документация

СДЕК/OZON – Настройка метода доставки

  • admin
  • 25.02.2025
Читать далее
  • Документация

Настройка передачи заказов из OZON в DPD через ApiMonster

  • admin
  • 14.02.2025
Читать далее
  • Документация

ApiMonster и OpenAI/ChatGPT. Нюансы работы

  • admin
  • 30.09.2024
Читать далее
  • Документация

Подключение Email-парсер к ApiMonster

  • admin
  • 12.06.2024
Читать далее
  • Документация

Подключение ApiMonster к IIKO

  • admin
  • 02.05.2024
Читать далее
  • Документация

Подключение Мегафон ВАТС к ApiMonster

  • admin
  • 23.04.2024
Читать далее
  • Документация

Подключение YClients к ApiMonster

  • admin
  • 28.02.2024
Свежие записи
  • Подключение Новофон к ApiMonster
  • СДЕК/OZON – Настройка метода доставки
  • Настройка передачи заказов из OZON в DPD через ApiMonster
  • ApiMonster и OpenAI/ChatGPT. Нюансы работы
  • Подключение Email-парсер к ApiMonster
ApiMonster
Документация и статьи

Input your search keywords and press Enter.