1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
function main(){ var accountSelector = MccApp.accounts().withIds(['123-456-7890']).executeInParallel('zmena_ceny', null); } function zmena_ceny(){ /*************************************>>>NASTAVENÏ<<<*************************************************/ /**/ var zdroj_url = 'https://docs.google.com/spreadsheets/d/2MGJypguJv0d9nOS559Db5UWDw6I75Hh2N0dzZie6lKA/edit'; // Do apostrofů zadej celou url tabulky s nastavením /**/ var nastaveni = [ // Následující řádek zkopírujte tolikrát, kolik účtů chcete spravovat, odmažte // na začátku // vyplňte jej podle vzoru a každý řádek oddělte čárkou. //["ID účtu", "Název listu nastavení", "ID tabulky personalizátoru", merchant ID, "email"], ["123-456-7890", "Ucet1", "1AB5B7dUNuW-n5sCmDALrPtxWpW4CDgkXBVEigg9aGoY", 7536984, "tvuj@email.com"] ]; /*****************************************************************************************************/ // Skript pro načítání minimální ceny skupiny produktů do textu inzerátu // pro MCC účet a napojení na Merchant Centrum // Více na http://ondrasvarc.cz/adwords-skripty/automaticke-nacitani-nejnizsi-ceny-z-kategorie-do-inzeratu/ /*****************************************************************************************************/ for(var i = 0; i < nastaveni.length; i++){ if(nastaveni[i][0] == AdWordsApp.currentAccount().getCustomerId()){ var merchantId = nastaveni[i][3]; var data = getMerchantData(merchantId); var tabulka_nastaveni = SpreadsheetApp.openByUrl(zdroj_url); var list_nastaveni = tabulka_nastaveni.getSheetByName(nastaveni[i][1]); var list_personalizator = SpreadsheetApp.openById(nastaveni[i][2]).getActiveSheet(); var email = nastaveni[i][4]; var posliMejl = false; for(r = 1; r < list_nastaveni.getLastRow(); r++){ // načítání info z tabulky var radek = r + 1; var kampan = list_nastaveni.getRange('A' + radek).getValue(); var sestava = list_nastaveni.getRange('B' + radek).getValue(); var productType = list_nastaveni.getRange('C' + radek).getValue(); var vyloucit = list_nastaveni.getRange('D' + radek).getValue(); var ks_v_baleni = list_nastaveni.getRange('E' + radek).getValue(); var brand = list_nastaveni.getRange('F' + radek).getValue(); var minimalniPovolenaCena = Number(list_nastaveni.getRange('G' + radek).getValue()); if(ks_v_baleni < 1){ks_v_baleni = 1;} if(minimalniPovolenaCena < 1) {minimalniPovolenaCena = 1;} // vyhledání a formátovaní min ceny a počtu produktů var hodnoty = najdiProdukty(data, productType, vyloucit, brand); var min_cena_int = hodnoty[1]/ks_v_baleni; var pocet_produktu = hodnoty [0]; var min_cena = formatuj(min_cena_int); // zápis ceny var radek_pro_zapis = najdi_radek(list_personalizator, kampan, sestava); if(min_cena_int >= Number(minimalniPovolenaCena) && Number(pocet_produktu) > 1){ Logger.log("Minimální cena a počet kusů pro " + kampan + " -> " + sestava + " je " + min_cena + " Kč a " + pocet_produktu + " produktů"); list_personalizator.getRange('C' + radek_pro_zapis).setValue(min_cena); list_personalizator.getRange('D' + radek_pro_zapis).setValue(pocet_produktu); }else{ Logger.log("Minimální cena a počet kusů pro " + kampan + " -> " + sestava + " je " + min_cena + " Kč a " + pocet_produktu + " produktů"); if(min_cena_int <= Number(minimalniPovolenaCena)){ list_personalizator.getRange('C' + radek_pro_zapis).setValue("Nalezená minimální cena je: " + min_cena + ", to je méně, než nastavená minimální hladina, proto je zde text, který zastaví reklamu a byl odeslán informační email"); list_personalizator.getRange('D' + radek_pro_zapis).setValue(pocet_produktu); } if(pocet_produktu == 0){ list_personalizator.getRange('D' + radek_pro_zapis).setValue("Nebyl nalezen žádný produkt! Reklama je dočasně pozastavena a byl odeslán informační e-mail"); list_personalizator.getRange('C' + radek_pro_zapis).setValue("Nebyl nalezen žádný produkt! Reklama je dočasně pozastavena a byl odeslán informační e-mail"); } posliMejl = true; } } } if(posliMejl){ MailApp.sendEmail(email, 'Personalizátor minimálních cen ' + AdWordsApp.currentAccount().getName(), "Jedna nebo více minimálních cen je pod minimální hladinou, více na: " + list_personalizator.getParent().getUrl()); } } } function najdiProdukty(data, productType, vyloucit, brand){ var pocet = 0; var minCeny = []; for(i = 1; i < data.length; i++){ var breadcrumb = data[i][0]; var cena = data[i][1]; var prodBrand = data[i][2]; // Logger.log("obsahuje: " + productType + " neobsahuje: " + vyloucit + " brand: " + brand); if(obsahuje(breadcrumb, productType) && neobsahujeF(breadcrumb, vyloucit) && obsahuje(prodBrand, brand)){ pocet++; minCeny.push(Number(cena)); } } return [pocet, Math.min.apply(null, minCeny)]; } /* function secti_produkty(min_array, breadCrumb, neobsahuje){ //funkce pocitajici pocet druhu produktu var pocet = 0; for(i = 0; i < min_array.length; i++){ // Logger.log(min_array[i]); var productType = min_array[i][0].valueOf(); if(obsahuje(productType, breadCrumb) && neobsahujeF(productType, neobsahuje)){ pocet = pocet + min_array[i][2]; } } return pocet; } */ function formatuj(integer){ //Formátování ceny - odstranění desetinných míst, zaokrouhlení, oddělovač tisíců var integer = ((Math.round(integer * 100)) / 100); var mod = integer % 1; if(mod == 0){ var cena = Math.round(integer).toString(); var delka = cena.length; if(delka > 3){ var tisice = cena.substr(0, delka - 3); var stovky = cena.substr(delka - 3, delka); cena = tisice + " " + stovky; } }else{ var cena = integer.toString().replace(".",","); var delka = cena.length; if(delka > 6){ var tisice = cena.substr(0, delka - 6); var stovky = cena.substr(delka - 6, delka); cena = tisice + " " + stovky; } } return cena; } function najdi_radek(list, kampan, sestava){ // řádek pro zápis minimální ceny for(i = 0; i < list.getLastRow(); i++){ var radek = i + 1; var cil_kampan = list.getRange('A' + radek).getValue(); var cil_sestava = list.getRange('B' + radek).getValue(); if(cil_kampan == kampan && cil_sestava == sestava){ return radek; } } list.appendRow([kampan, sestava]); return list.getLastRow(); } /* function najdi_min(min_array, breadCrumb, neobsahuje){ // vyhledání minimální ceny z kategorie var min_price = []; for(i = 0; i < min_array.length; i++){ var productType = min_array[i][0].valueOf(); if(obsahuje(productType, breadCrumb) && neobsahujeF(productType, neobsahuje)){ min_price.push(Number(min_array[i][1])); } } return Math.min.apply(null, min_price); } */ /* function minima(data){ // uspořádání podle productType + minimální cena var minima = []; var pocet = 0; var cena = Number(data[0][1]); for(i = 1; i < data.length; i++){ if(data[i][0] == data[i-1][0]){ if(cena > Number(data[i][1])){ cena = Number(data[i][1]); } pocet++; }else{ minima.push([data[i-1][0], cena, pocet]); pocet = 1; cena = Number(data[i][1]); } } return minima; } */ function getMerchantData(merchantId) { //Načtení dat z merch centra var pageToken; var pageNum = 1; var maxResults = 250; var toReturn = []; do { var products = ShoppingContent.Products.list(merchantId, { pageToken: pageToken, maxResults: maxResults }); if (products.resources) { for (var i = 0; i < products.resources.length; i++) { var condition = products.resources[i].condition == undefined ? null : products.resources[i].condition.toLowerCase(); var productType = products.resources[i].productType == undefined ? null : products.resources[i].productType.toLowerCase(); var dostupnost = products.resources[i].availability == undefined ? null : products.resources[i].availability.toLowerCase(); var cena = products.resources[i].salePrice == undefined ? products.resources[i].price.value : products.resources[i].salePrice.value; var brand = products.resources[i].brand == undefined ? null : products.resources[i].brand.toLowerCase(); if(productType != null && condition == 'new' && dostupnost == 'in stock'){ toReturn.push([productType, cena, brand]); } } } pageToken = products.nextPageToken; pageNum++; } while (pageToken); return toReturn.sort(); } function neobsahujeF(productType, slova){ slova = slova.split(","); var neobsahuje = true; if(slova[0].length != 0){ for(b = 0; b < slova.length; b++){ if(productType.search(slova[b].toLowerCase()) != -1){ neobsahuje = false; } } } return neobsahuje; } function obsahuje(productType, slova){ slova = slova.split(","); var obsahujeVse = true; for(b = 0; b < slova.length; b++){ if(productType == undefined){ Logger.log("tady: " + productType + " tohle: " + slova[b]);} if(productType.search(slova[b].toLowerCase()) == -1){ obsahujeVse = false; } } return obsahujeVse; } |