A Looker Studio használatára buzdító Tippek és trükkök cikksorozatunk második részében bemutatjuk, hogy az MNB oldaláról miként tudjuk lekérni az egyes devizákhoz tartozó árfolyamot. Így a kimutatásokban, ha forint alapú megjelenést választunk, akkor mindig az aktuális árfolyamnak megfelelő konverziót tudjuk elvégezni. Jól jöhet mindez a webshop-mindennapokban!

Akkor kezdjünk is neki azzal, hogy: Mire lesz szükségünk?

  • MNB napi árfolyamok végpontra
  • Google Drive / Google Sheet / Google Apps Script
  • Looker Studió

MNB deviza árfolyam

Első lépésben az árfolyamok forrását nézzük meg. Az alábbi oldalon találjuk az MNB napi deviza árfolyamait, a részletes lekérdezési adatokat pedig itt. Szerencsére az MNB a fejlesztőkre is gondolt, és elérhető egy publikus SOAP végpont is, amit itt találunk. “Részletes” leírást pedig itt találunk hozzá.

Google Drive / Google Sheet / Gooogle Apps Script

  • Táblázat létrehozása

Google Drive mappánkban hozzunk létre egy üres táblázatot és nevezzük át “Deviza árfolyamokra” majd kattintsunk a Kiegészítő (Extensions) menüben található Apps Script menüpontra.

1.Ábra – Üres táblázatban Apps Script menüpont

  • Forráskód létrehozása

Kattintás után az alábbi felület fog fogadni:

2. Ábra üres projekt az Apps Script felületén

Másoljuk ki az alábbi kódot és illesszük be a szerkesztő részbe (minden adatot felülírva):

function getCurrency( currency ) {
 // ha nincs currency megadva, akkor USD legyen a default
currency = currency || „USD”;
  // SOAP kérés törzsének összeállítása
 var payload = ‘<?xml version=”1.0″ encoding=”utf-8″?>’;
payload += ‘<soap:Envelope xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/”>’;
payload += ‘<soap:Body>’;
payload += ‘<GetCurrentExchangeRates xmlns=”http://www.mnb.hu/webservices/” />’;
     payload += ‘</soap:Body>’;
     payload += ‘</soap:Envelope>’;

  // kérés opciói: legyen POST, a post adat legyen a fenti szöveg és 2 header beállítása a SOAP kéréshez…

 var options = {
   „method”: „post”,
   „payload”: payload,
   „headers”: {

     ‘SOAPAction’: „http://www.mnb.hu/webservices/GetCurrentExchangeRates”,

     ‘Content-Type’: ‘text/xml; charset=utf-8’
  }
 };

  // SOAP kérés elküldése…

 var result = UrlFetchApp.fetch(‘http://www.mnb.hu/arfolyamok.asmx’, options).getContentText();

 // Ha megjött a válasz, akkor kiszedjük belőle az eredményt.

 var str = result.match(/<GetCurrentExchangeRatesResult>(.+)<\/GetCurrentExchangeRatesResult>/)[1];

 // Mivel htmlentity-vel kódolva van, így azt visszaalakítjuk (&lt; helyett < legyen)

 var decode = XmlService.parse(‘<d>’ + str + ‘</d>’);
 var strDecoded = decode.getRootElement().getText();

  // ezután a dekódolt xml-ből kinyerjük a szükséges sort ami egyébként pl. így néz ki: <Rate unit=”1″ curr=”GBP”>364,04</Rate>

 var regexp = new RegExp(‘<Rate unit=”\\d+” curr=”‘+ currency +‘”>([^<]+)</Rate>’);
 var rate = strDecoded.match(regexp);

  // ha nincs találat, akkor error

 if(!rate) {
   throw new Error(„Ismeretlen currency: „ + currency);
 }
 var eredmeny = rate[1];

 // egyébként visszaadjuk az értéket

 return rate[1];
}

  • Átalakítás

Az eredeti forráskód a prog.hu oldalról származik.  Annyi átalakítás történt, hogy időközben az Xml osztály át lett nevezve XmlService-re.

Az állományt nevezzük át a Files fül alatt getCurrency.gs-re. Projektünket pedig a bal felső sarokban getCurrencyre.

Services fül alatt adjuk hozzá a legmagasabb elérhető verziószámmal a Sheets szolgáltatást. Amennyiben mindennel végeztünk akkor hasonló végeredmény látható mindenkinél:

3. Ábra – beállítások után az Apps Scipt projekt felülete

  • Ütemezés

Bal oldalon található Triggers ikonra kattintva állíthatunk be ütemezéseket. Én két ütemezést állítottam be:

  1. Időszakos futást minden hajnalban (4. ábra)
  2. Táblázat megnyitásakor (5. ábra)

4.Ábra – Ütemezés beállítása, hajnali időszakra

5.Ábra Ütemezés beállítása táblázat megnyitásakor

  • Publikálás

Beállítások után kattintsunk a Deploy gombra és állítsuk be, hogy ki futtassa a web app-ot és ki érheti el.

6.Ábra – deloy képernyőn tudjuk beállítani az elkészült web app jogosultságait

  • Táblázatban függvény beillesztése

Üres táblázatunkhoz térjünk vissza és az egyik cellába írjuk be az alábbi függvény hívást:

=REGEXREPLACE(getCurrency(„EUR”), „,”, „.”)

Amennyiben mindent jól végeztünk, akkor rövid időn belül megjelenik az adott devizához tartozó forint árfolyam. Nálam a Looker Studio miatt szükség volt currency, value és region mezőkre is, így az én táblázatom így néz ki:

7.Ábra – Kész táblázat – korábbi  értékekkel.

  • Looker Studio

Looker Studio-ban új adatforrásként kell felvenni a táblázatot:

  • Resource
    • Manage added data sources
  • Add a data source
  • Connect to data fülön Google Sheets kiválasztása

8.Ábra – táblázat felvétele adatforrásként Looker Studio-ban

Ezután már a jól megszokott formában tudjuk használni a táblázatban található adatokat.

Összefoglaló

Ebből a kis példából jól látható, hogy mennyi mindenre fel tudjuk használni a Google ökoszisztémát egyes problémák megoldására. A feladatot persze tovább lehet bontani, eltárolni a napi árfolyamokat, hogy azok Looker Studioban is elérhetők legyenek stb. Arra figyeljünk, hogy mindenhol legyen jogosultsága a futtató felhasználónak olvasásra/írásra, különben vagy az adatok nem fognak frissülni vagy a Looker Studio-ban nem fogjuk látni a táblázatot.

Sok sikert mindenkinek!