Skip to content

Instantly share code, notes, and snippets.

@pklaus
Created December 11, 2011 02:45
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save pklaus/1457885 to your computer and use it in GitHub Desktop.
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
#!/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)
/* 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