Created
December 11, 2011 02:45
-
-
Save pklaus/1457885 to your computer and use it in GitHub Desktop.
Extrahieren der Transaktionen von der ING-DiBa Online-Banking Website mit __ALLEN__ Details (Kontonummern, BLZs). Dies ist ein Firefox-Makro geschrieben mit der Firefox-Erweiterung iMacros. Genaue Beschreibung unter http://goo.gl/nYdGO
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- encoding: UTF8 -*- | |
import sys | |
import re | |
def main(*args): | |
if len(args)<2: | |
usage_and_exit(args) | |
try: | |
text = open(args[1]).read() | |
except: | |
print "Sorry,", args[1], "is not a valid file." | |
usage_and_exit(args) | |
o = open(args[1]+"_processed.csv","w") | |
text = text.replace("\n","") | |
text = text.replace("\r","\n") # as we are on a Linux system and we just want a LF line feed (\n), no CR Carriage Return | |
text = re.sub(u"\u00C2\u00A0", "", text) # Search for "C2 A0" and replace with "". | |
text = re.sub(u"\"[ \t\r\f\v]+", "\"", text) # remove whitespace after a double quote char | |
text = re.sub(u"[ \t\r\f\v]+\"", "\"", text) # remove whitespace before a double quote char | |
text = re.sub(u"[ \t\r\f\v]+", " ", text) # replace multiple whitespace chars with a single space char | |
text = re.sub(u"([0-9]),([0-9]{2}[ \s]EUR)", "\\1.\\2", text) # replace decimal comma (German) by a decimal point (international) | |
text = '"Transaktionsart","Mein Name","Meine Kontonummer","Buchungstag","Valuta","Auftraggeber / Empfänger","Verwendungszweck","Betrag","Kontonummer / IBAN","Bankleitzahl / BIC","Kreditinstitut"'+"\n"+text | |
o.write( text ) | |
o.close() | |
def usage_and_exit(args): | |
print "usage: "+args[0]+" transactions.csv" | |
sys.exit(1) | |
if __name__ == "__main__": | |
main(*sys.argv) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Fragt die Umsaetze von einem ING-DiBa Konto detailliert ab */ | |
/* © 2008-2011 Philipp Klaus philipp.l.klaus@web.de */ | |
//// ********* Konfiguration ********* | |
/// Festlegung des Dateinamens, in den gespeichert wird: | |
const transactionFilename = "ING-DiBa_transactions.csv"; | |
/// Festlegung des Speicherortes für die Ausgabedatei | |
const transactionFoldername = "*"; // Alle Betriebssysteme (including Mac OS) | |
// ↑ speichert in iMacros Standard-Download Ordner (siehe iMacros Einstellungen) | |
//const transactionFoldername = "C:\\Documents and Settings\\PDiddy\\Desktop"; // Windows | |
//const transactionFoldername = "/home/pdiddy/Desktop"; // Linux | |
//// ********* Programmkonstanten ********* | |
const replaySpeed = 'FAST'; // FAST|MEDIUM|SLOW | |
const placeholderTransactionNumber = "PTN"; | |
var macroSpeed = ""; | |
//var macroSpeed = macroSpeed + "SET !REPLAYSPEED "+replaySpeed+"\n"; | |
// ↑ Brauchen wir normal nur zum Fehlersuchen (Standard-Geschwindigkeit sollte auf FAST gestellt sein) | |
var macroHeader = "CODE:" + macroSpeed + "TAB T=1\n"; | |
/// Gegebenenfalls Leerzeichen im Speicher-Ort und -Namen ersetzen: | |
const modTransactionFoldername = transactionFoldername.replace(/ /g,"<SP>"); | |
const modTransactionFilename = transactionFilename.replace(/ /g,"<SP>"); | |
/// Die eigentlichen iMacros Makros: | |
const macro_selectTransaction = macroHeader + "TAG POS=" + placeholderTransactionNumber + " TYPE=A ATTR=TXT:*&&CLASS:umsatzDetails EXTRACT=TXT"; | |
const macro_enterTransaction = macroHeader + "TAG POS=" + placeholderTransactionNumber + " TYPE=A ATTR=TXT:*&&CLASS:umsatzDetails"; | |
const macro_backToTransactions = macroHeader + "TAG POS=1 TYPE=BUTTON ATTR=TXT:Zurück"; | |
const macro_getSingleTransaction = macroHeader + | |
"TAG POS=2 TYPE=H3 ATTR=* EXTRACT=TXT\n" + | |
"TAG POS=1 TYPE=DIV ATTR=ID:kontoinhaber EXTRACT=TXT\n" + | |
"TAG POS=1 TYPE=DIV ATTR=ID:auftraggeberKontonummer EXTRACT=TXT\n" + | |
"TAG POS=1 TYPE=DIV ATTR=ID:buchungsDatum EXTRACT=TXT\n" + | |
"TAG POS=1 TYPE=DIV ATTR=ID:valutaDatum EXTRACT=TXT\n" + | |
"TAG POS=1 TYPE=DIV ATTR=ID:empfaenger EXTRACT=TXT\n" + | |
"TAG POS=1 TYPE=DIV ATTR=ID:verwendungszweck EXTRACT=TXT\n" + | |
"TAG POS=1 TYPE=DIV ATTR=ID:betrag EXTRACT=TXT\n" + | |
"TAG POS=1 TYPE=DIV ATTR=ID:kontonummer EXTRACT=TXT\n" + | |
"TAG POS=1 TYPE=DIV ATTR=ID:bankleitzahl EXTRACT=TXT\n" + | |
"TAG POS=1 TYPE=DIV ATTR=ID:institutName EXTRACT=TXT\n" + | |
"SAVEAS TYPE=EXTRACT FOLDER=" + modTransactionFoldername + " FILE=" + modTransactionFilename + "\n"; | |
//// ********* Die eigentliche Makro-Ablaufsteuerung ********* | |
iimDisplay("Starte Umsatzextraktion von ING-DiBa"); | |
var i = 1; | |
var retcode, s, message; | |
while (true) { // Endlosschleife | |
iimDisplay("Transaktion "+(i+1)+" abrufen\n"); | |
/// Nächsten Link auf eine Transaktions-Detail-Seite abtasten: | |
retcode = iimPlay(macro_selectTransaction.replace(placeholderTransactionNumber,i)); | |
s = iimGetLastExtract(1); | |
/// Prüfen, ob etwas besonderes passiert ist: | |
if (retcode < 0) { | |
/// Schleife verlassen, wenn ein Fehler auftrat: | |
message = "Auslesen der Umsätze beendet, weil ein Fehler auftrat."; | |
break; | |
} else if ( s.match("#EANF#") ) { | |
/// ↑ Kein Link mehr gefunden ("Extraction Anchor Not Found" siehe wiki.imacros.net/!EXTRACT#Value ) | |
/// Schleife verlassen, wenn alle Umsaetze abgefragt wurden: | |
message = "Auslesen der Umsätze beendet, weil das Ende der Liste erkannt wurde."; | |
break; | |
} | |
iimPlay(macro_enterTransaction.replace(placeholderTransactionNumber,i)); | |
//iimDisplay("starte getSingleTransaction."); | |
iimPlay(macro_getSingleTransaction); | |
//iimDisplay("getSingleTransaction beendet."); | |
iimPlay(macro_backToTransactions); | |
i++; | |
} | |
iimDisplay("Fertig mit der Datenextraktion der Transaktionen\n\nAbschlussnachricht:\n"+message); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment