Kategorie: Scripty

Stahování dat z Heureka.cz

Možná řešíš stejný problém jako já - automatické stahování statistik z různých reklamních systémů: Google Ads, Sklik, Facebook atd. Většinou mají všichni nějaké API, takže je stačí trošku nastudovat, napojit a v oblíbeném jazyce napsat nějaký script. V mém listu je ale i Heuréka, která API nemá. Tedy nějaké ano, ale to řeší jen výkon samotného obchodu. Jestli chceš statistiky reklam, API nenajdeš.

Jak získat statistiky z Heuréky

Standardní cestou, jak se dostat k číslům, která potřebuji, je prostě ruční stažení. A to taky není úplně přímočará cesta:

  • Musím se přihlásit jako majitel e-shopu.
  • Kliknout na "Statistiky a reporty"
  • Vybrat "Statistiky"
  • Zvolit rozsah Od - Do a vyfiltrovat
  • A v tabulce s přehledem pak kopírovat hodnoty někam do Google sešitu

Takový přehled ukazuje jen souhrn za celé vybrané období. To taky není úplně nejlepší, jelikož třeba budu potřebovat data po dnech. To bych si ale musel vyfiltrovat vždy jen jeden den a 30x za sebou takhle vytáhnout data postupně za celý měsíc. Moc nepohodlné.

Naštěstí existuje možnost jít na stránku "Přehled o výkonu a nákladech". Tam se nic nefiltruje. Heuréka sama generuje data 90 dní zpětně. Data přitom obsahují vždy konkrétní záznamy, takže nejen po jednotlivých dnech, ale i několik záznamů za den, podle toho jak lidi navštěvovali, vyhledávali nebo nakupovali.

Stačí si prostě stáhnout soubor v CSV a pak už si s ním hrát, jak potřebuješ.

Je to o něco lepší než jen ty souhrnné statistiky. Taky to obsahuje více sloupců (dataři by řekli "polí").Takže třeba víš nejen že někdo nakoupil, ale i co nakoupil a odkud přišel a kolik tě to stálo za jeho proklik.

Jak to zautomatizovat

Ruční práce je prostě moc drahá. To je vidět na řemeslných trzích, kdy i za malou kravinku platíš těžký peníz. A navíc je tu riziko lidské chyby - něco vložíš do jiného souboru, omylem smažeš, přepíšeš a tím ztratíš data atd. Chce to zautomatizovat.

Celý důvod, proč ty data tahám, je report výkonu reklamních kampaní. Jak pro účely vnitropodnikové, tak pro naše zákazníky. Chceme prostě vědět, jestli se nám vůbec vyplácí si nějakou kampaň na Heuréce platit.

Reporty vyrábím v Looker Studiu, bývalém Data Studiu. Některé reklamní systémy mají dokonce svůj konektor, který jen napojím, autorizuju a pak využiju pro vizualizaci dat ve formě tabulek nebo grafů. Jiné systémy ale takový konektor nenabízí. A ano, Heuréka je jedním z nich. To se ale dá snadno řešit pomocí Google sešitu. Stačí jednoduchá tabulka s pojmenovanými sloupci, naplněná daty. Kdo chce, může si do takového sešitu vkládat data ručně a v Looker Studiu je využít jako zdroj pro tabulky a grafy.

Já nechci. Tedy chci, ale ne ručně. Vyrobíme si tedy automat.

Tvorba scriptu pro automatizaci

Google sešit je normální dokument, který má svou jedinečnou URL adresu a ID. A Google také umožňuje psát scripty, kterými se dají takové dokumenty číst a zapisovat do nich. Script si můžeš napsav jako projekt na stránce https://script.google.com/home. Každý Google sešit také umožňuje vyrobit script, který je přímo s tímto sešitem svázaný. Stačí kliknout na "Rozšíření / Apps Script".

Zjistil jsem ale, že s novými restrikcemi a zabezpečením se nepohodlně píší příkazy pro vkládání obsahu do buněk. Využil jsem tedy jinou cestu: v prostředí Google Ads je možné scripty také tvořit. Ty už mají nějakou možnost odsouhlasit při svém spuštění nějaké oprávnění a všechno krásně funguje.

První, co budeš potřebovat, je nějaký Google sešit, do kterého budeš importovat data. Tam tedy bude celá historie. Normálně prostě vyrob Google Tabulku na adrese https://docs.google.com/spreadsheets/u/0/. Název nechám na tobě, ale nespíš to bude něco s Heurékou. Výchozí název listu si změň třeba na "Heureka data". První řádek by měl mít stejné záhlaví, jako CSV soubor, který poskytuje Heuréka. Takže si to CSV ručně stáhni a první řádek zkopíruj do svého Google sešitu.

Dále v prostředí Google Ads jdi na "Nástroje a nastavení / Scripty". Vytvoř nový script a nazvi ho třeba "Heureka Data". Pokud Google Ads nemáš, můžeš si ho zdarma založit. Ani nemusíš provozovat žádnou kampaň a nic nebudeš platit.

A začneme psát script. Na začátku si definujeme nějaké konstanty:

const ssHeureka = SpreadsheetApp.openByUrl("https://docs.google.com/spre...");
const HEUREKA_DATA_URL = "https://api.heureka.cz/data-reports/v1/5713...";
const HEUREKA_NAME_SHEET = "Heureka data";
const sheetHeureka = ssHeureka.setActiveSheet(ssHeureka.getSheetByName(HEUREKA_NAME_SHEET), true);
const RUN_HEUREKA = 1;

Takže: na řádku 1 doplň URL tvého sešitu, do kterého budeš sbírat data

Na druhém řádku vyplň URL tvého reportu z Heuréky.

Třetí řádek definuje název listu, do kterého budeš data ukládat

Na čtvrtém řádku se otevře sešit a aktivní list bude "Heureka data"

Pátý řádek není nutný, ale já si ho dávám jako příznak, abych kdykoliv mohl sběr dat pozastavit

Každý script v Google Ads by měl mít funkci main(). Takže ji vyrobíme.

function main() {
  /** HEUREKA **/
  if (RUN_HEUREKA) {
    console.log('Heureka');
    heurekaData();
  }
}

Vlastně si tu jen testuju, jestli se má celé stahování spustit. Pokud ano, vypíšu si do konzole slovo "Heureka" a spustím samotnou funkci pro stažení dat. Ta vypadá takto:

function heurekaData() {
  var text = UrlFetchApp.fetch(HEUREKA_DATA_URL).getContentText();
  var csvData = Utilities.parseCsv(text, ',');
  csvData.shift();
  var row = sheetHeureka.getLastRow() + 1;
  sheetHeureka.getRange(row, 1, csvData.length, csvData[0].length).setValues(csvData);
  nahraditTeckyZaCarky();

  removeDuplicates();
}

Funguje opět velmi jednoduše - nejprve se do proměnné "text" uloží obsah toho CSV z Heuréky. Následně z něj vyrobíme pole pomocí funkce parseCsv. Heuréka používá jako oddělovač polí čárku.

Příkaz csvData.shift() udělá jen to, že odstraní první řádek ve stažených datech. Ten totiž obsahuje záhlaví sloupců.

Chceme data postupně přidávat a nepřepisovat si je, takže musíme najít první volný řádek na listu s daty. K tomu využijeme funkce getLastRow(), která vrátí číslo posledního použitého řádku. Stačí přičíst jedničku a máme ten první volný řádek.

Na šestém řádku v kódu výše je taková trošku už složitější struktura. Ale po malém vysvětlení je to srozumitelné: označí se oblast od prvního volného řádku a prvního sloupce až po tolik řádků a sloupců, kolik je ve stažených datech, a vloží se do ní celé to pole s daty z Heuréky.

Mně třeba vadí, že Heuréka má jako oddělovač desetinných míst tečky místo čárek, takže používám ještě funkci, která umí nahradit tečky za čárky v těch sloupcích, kterých se to týká. V mých datech jde o číselné sloupce M až U. Vsadil bych se, že v tvých datech to bude také tak. Samotná funkce vypadá takto:

function nahraditTeckyZaCarky() {
  var data = sheetHeureka.getRange("M:U").getValues();
  
  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[i].length; j++) {
      if (typeof data[i][j] === 'string') {
        data[i][j] = data[i][j].replace(/\./g, ',');
      }
    }
  }
  
  sheetHeureka.getRange("M:U").setValues(data);
}

Ve zkratce jde o to, že se vezmou data ze sloupců M:U, v cyklu se projdou a vymění se tečky za čárky. Nejde to bohužel dělat už v samotných CSV datech, jelikož tam se čárka používá jako oddělovač sloupců. Na konec se takto pozměněná data zase zpátky vloží do stejné oblasti.

Pokud si takto budeš data stahovat, dostaneš vždy balík záznamů z uplynulých 90 dnů. Jenže pokud například každý den data stáhneš, měl bys uloženo spoustu duplicit. To musíme taky ošetřit, aby se nám záznamy nemnožily.

Jako duplicitní budeme označovat záznamy, které se shodují ve všech sloupcích. Potřebná funkce vypadá takto:

function removeDuplicates() {
  sheetHeureka.getRange('A1:V').activate();
  sheetHeureka.getActiveRange().offset(1, 0, sheetHeureka.getActiveRange().getNumRows() - 1).activate();
  sheetHeureka.getActiveRange().removeDuplicates([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]).activate();
}

Vezmou se všechna data za sloupců A:V a vyčistí se od duplicit. A to je vlastě všechno. Celý script pak vypadá následovně:

const ssHeureka = SpreadsheetApp.openByUrl("https://docs.google.com/...");

const HEUREKA_DATA_URL = "https://api.heureka.cz/data-reports/v1/57...";
const HEUREKA_NAME_SHEET = "Heureka data";

const sheetHeureka = ssHeureka.setActiveSheet(ssHeureka.getSheetByName(HEUREKA_NAME_SHEET), true);
const RUN_HEUREKA = 1;

function main() {
  /** HEUREKA **/
  if (RUN_HEUREKA) {
    console.log('Heureka');
    heurekaData();
  }
}

function heurekaData() {
  var text = UrlFetchApp.fetch(HEUREKA_DATA_URL).getContentText();
  var csvData = Utilities.parseCsv(text, ',');
  csvData.shift();
  var row = sheetHeureka.getLastRow() + 1;
  sheetHeureka.getRange(row, 1, csvData.length, csvData[0].length).setValues(csvData);
  nahraditTeckyZaCarky();

  removeDuplicates();

}

/** UTILS **/
function removeDuplicates() {
  sheetHeureka.getRange('A1:V').activate();
  sheetHeureka.getActiveRange().offset(1, 0, sheetHeureka.getActiveRange().getNumRows() - 1).activate();
  sheetHeureka.getActiveRange().removeDuplicates([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]).activate();
}

function nahraditTeckyZaCarky() {
  var data = sheetHeureka.getRange("M:U").getValues();
  
  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[i].length; j++) {
      if (typeof data[i][j] === 'string') {
        data[i][j] = data[i][j].replace(/\./g, ',');
      }
    }
  }
  
  sheetHeureka.getRange("M:U").setValues(data);
}

Nakonec můžeš nastavit, že se má script spouštět automaticky jednou denně. Sešit s daty je možné využít jako zdroj dat pro Looker Studio nebo z něj uděláš kontingenční tabulku, prostě jak je libo.

Komentáře

Přidat komentář

O mně

Jmenuji se Rudolf Svátek - lektor výpočetní techniky, trochu PHP programátor a SEO konzultant na volné noze.

Adresa

Příčná 326/3
736 01 Havířov

Kontakty

Email: office@rudolfsvatek.cz
Telefon: +420 777 828 353
Skype: svatekr