
Kiindulási állapot
Az UniCredit Banktól egy megadott szintaktikájú SMS-t kapok, ha kártyával vásárolok:
1 | “17.07.23 17:32 SPAR BUDAPEST HU Sikeres Vasarlas: 5380 Ft Egyenleg: 1 Ft Kartya: NAGY GÉZA -UniCredit” |
Ebben az üzenetben szerepel hogy mikor történt a vásárlás, hol történt a vásárlás és mekkora összeget költöttem.
Célállapot
A kapott üzenet szeretnénk egy Google Spreadsheetben rögzíteni az alábbi módon:
Megoldás
Elsőként meg kell oldanunk, hogy az SMS-ek felkerüljenek egy Google Spreadsheet-be, hogy azt utána fel tudjuk dolgozni. Ehhez az “SMS to Spreadsheet“ Android alkalmazást használtam, de több ilyen megoldás is létezik:
Letöltés: http://play.google.com/store/apps/details?id=com.adengappa.smstospreadsheet
A telepítés után beállíthatjuk a Google fiókunkat, és hogy kezdje el backup-olni az üzeneteket egy táblázatba.
A következő lépés, hogy a kapott üzenetet feldolgozzuk és szétszedjük oszlopokra majd bemásoljuk egy másik “Kiadások” táblázatba. Ehhez nyissuk meg azt a táblázatot ahol az SMS-ek backupja van, és válasszuk a Tools / Script editor menüpontot, a megjelenő ablakban az alábbi kódot illesszük be. Az openById() paraméterét az URL-ből tudjuk meg az egyes táblázatok megnyitásakor.
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 | function myFunction(e){ var numRows = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getMaxRows(); if(ScriptProperties.getProperty('numberOfRows')){ var nRows = Number(ScriptProperties.getProperty('numberOfRows')); if(nRows<numRows){ smsToWrite = getBankSMS(numRows) writeExpenses(smsToWrite) ScriptProperties.setProperty('numberOfRows',numRows); } } ScriptProperties.setProperty('numberOfRows',numRows); } function writeExpenses(smsToWrite) { if (smsToWrite!=null) { var sheet = SpreadsheetApp.openById('IDEJÖNAKIADÁSOKATTARTALMAZÓSHEETID'); var sheet = sheet.getSheetByName("2017. július"); sheet.activate(); smsDate = "20"+smsToWrite.toString().substring(0, 8); smsShop = smsToWrite.toString().substring(15, smsToWrite.toString().indexOf("Sikeres")-1); smsValue = smsToWrite.toString().substring( smsToWrite.toString().indexOf("Vasarlas: ")+10, smsToWrite.toString().indexOf(" Ft Egyenleg:")); sheet.appendRow([smsDate,smsShop,' ' ,smsValue]); } } function getBankSMS(row) { var sheet = SpreadsheetApp.openById('IDEJÖNAZSMSEKETTARTALMAZÓSHEETID'); var sms = sheet.getSheetByName("SMS Log"); sms.activate(); if ( (sms.getRange(row,2).getValues() == "36303*****6") && (sms.getRange(row,3).getValues() == "Received") && (sms.getRange(row,5).getValues().toString().indexOf("Sikeres Vasarlas" ) != -1)) { var sms = sms.getRange(row,5).getValues(); } else sms = null; return sms; } |
Három függvényt láthatunk:
- myFunction(): ez az a függvény, ami számolja és tárolja, hogy hányadik sornál járunk az SMS-eket tartalmazó Spreadsheetben, és ha beillesztésre kerül egy új sor, akkor meghívja a másik két függvényt:
- getBankSMS(row): a myFunction az újonnan beillesztett sor számával meghívja a függvényt, ami a visszaadja az 5. Cellában található üzenetszöveget. Feltételben ellenőrizzük, hogy csak a bank telefonszámáról egy bejövő (Received) SMS-t dolgozzunk fel, akkor ha tartalmazza az SMS a “Sikeres Vasarlas” szöveget. Utóbbira azért van szükség, mert erre a telefonszámra például “Készpénz felvét” üzenetek is jönnek amit nem szeretnénk megjeleníteni a táblázatban. Ha a feltétel nem teljesül null-t adok vissza.
- writeExpenses(smsToWrite): ez a függvény a kapott SMS szöveget egy másik spreadsheet “2017. Július” munkalapjának végére beilleszti. A dátumot (smsDate), a költés tárgyát (smsShop) és az összeget (smsValue) egyszerű string műveletekkel szedjük ki.
Ha a fenti megoldás elkészült, már csak azt kell beállítanunk, hogy minden új sor beillesztéskor fusson le a myFuntion metódus. Ehhez a script managerben válasszuk az Edit / Current project’s triggets menüpontot és adjuk hozzá onChange eseményre a myFunction függvényt:
A fentieken kívül amire még figyelni kell, hogy első indításkor jogosultságot kér a Google a Script számára a SpreadSheethez, ami természetesen megadható.
Jó szórakozást és testreszabást, sokat segít próbálgatásokhoz az Browser.msgBox(‘Kiírok valamit’); ami popupban jelenít meg üzeneteket.
2017. július 25.