Python und OpenOffice.org - Fragen zu Calc

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Kaura
User
Beiträge: 8
Registriert: Freitag 31. Dezember 2010, 13:55

Hey Leute, ich bins mal wieder!

Vielleicht habe ich diesmal mehr Glück mit einer Antwort ;)!

Ich habe das folgende 'Problem':
Ich führe mit Calc (dem OOo Excel) sowas wie ein Kassenbuch indem ich am Ende des Monats meine
Einnahmen und Ausgaben eintrage. Die lese ich von meinem Onlinebanking aus. Allerdings mache ich
das im Moment alles selber, was extrem Zeitraubend ist. Jetzt zu meiner Frage:

Ist es irgendwie möglich die Daten mit Python aus dem Onlinebankingportal zu holen und mir diese
Daten dann (nach meinen Vorstellungen geordnet) in mein Kassenbuch in OOo einzuspeisen?
Ich dachte an sowas wie:
1) Ich hole mir den Cookie manuell, indem ich mich ganz einfach einlogge.
2) Dann lege ich einen Zeitraum fest von dem aus ich bestimmen möchte von wann bis wann er mir die Daten
holen soll.
3) Das Pythonskript gibt diesen Zeitraum dann auf der Portalseite ein, bestätigt und läd sich dann den Quelltext herunter.
4) Das Skript schaut dann nach Schlagwörtern wie zum Beispiel REWE oder ALDI und trägt dann in Vorher festgelegte
Spalten einmal den Verwendungszweck (REWE oder ALDI) und den Preis ein.
5) Dann wird eine neue Spalte hinzugefügt, damit ich nicht in anders beschriebene Spalten schreibe.

Hat jemand eine Idee wie ich das anstellen soll bzw. ist das überhaupt möglich?

Liebe Grüße,
Kaura


EDIT:// Vielleicht noch ein Weg wie es was einfacher ist, nichtdestotrotz brauche ich immernoch Hilfe dabei
1) Ich gehe manuell auf die Seite und speicher mir den Quelltext in eine Datei ab (Bsp. input.txt)
2) Mein Pythonskript liest die Datei ein und schaut nach dem Quelltext, der so aussieht:
http://www.python-forum.de/pastebin.php?mode=view&s=119
3) Das Pythonskript geht hin und Filtert die Informationen heraus die ich benötige (Datum der Abbuchung, Höhe der Abbuchung, Art der Abbuchung)
4) Das Pythonskript erstellt eine Temporäre Datei in der die gefilterten Informationen mit vier ; getrennt sind
5) Das Pythonskript schreibt zuerst alle Daueraufträge in meinen Spreadsheet (Spalte für Spalte) und fügt nach jedem Eintrag eine neue Spalte hinzu. Dann geht das Skript hin und inkrementiert den Zähler um 2. Dann ist es quasi in einem anderen Bereich wie zum Beispiel Barverfügung und macht dort dann weiter wie zuvor mit den Daueraufträgen

Any Ideas :)?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Also ich kann bei meinen Onlinebankinganbietern meine Abfragen im CSV Format exportieren.

Mit den Dateien lässt sich einfach arbeiten, du kannst Überschneidungen einfach erkennen und raus schmeißen, musst also nicht auf das Datum achten lässt dir einfach die letzen 90Tage exportieren o.ä.

Wäre das den keine Option für dich?

Ansonsten das was du vor hattest lässt sich alles mit urllib realisieren. Nur wenn du die HTML Seite verarbeitest kannst du damit rechnen das Programm einmal im Jahr anpassen zu müssen.
Kaura
User
Beiträge: 8
Registriert: Freitag 31. Dezember 2010, 13:55

Hey Sr4l,

in der Theorie wäre das optimal für mich, da gibt es nur ein Problem:
Mein Geldinstitut gibt mir eine nicht Standardisierte Textdatei zurück.
Da stehen manchmal mehr Sachen drinnen als in einem vorherigen Eintrag,
was ziemlich schwer zu importieren ist. Ich hatte es praktisch schon als
csv.. Waren ja nur ein paar Bashzeilen an code (2)..

Am besten wäre es wenn ich wirklich den HTML Code übersetze und benutze.
Der ist einheitlich und recht übersichtlich. Vorallem möchte ich es ja alles recht
automatisch haben und daher mit Python übertragen und nicht per Hand.

Liebe Grüße,
Kaura
BlackJack

@Kaura: Ich kann mir irgendwie nicht vorstellen, dass eine Bank eine nutzlose oder schwer zu verarbeitende Textdatei zum Download anbietet. Das wäre doch irgendwie sinnlos!? Hast Du vielleicht einfach das CSV-Format noch nicht ganz erfasst und da sind zum Beispiel vielleicht Einträge mit Zeilenumbrüchen enthalten? Bei CSV ist nicht zwingend jede Zeile in einer Datei ein einzelner Datensatz!
Kaura
User
Beiträge: 8
Registriert: Freitag 31. Dezember 2010, 13:55

BlackJack@:
Nein wenn ich mit Logik gegenchecke macht es ja auch Sinn was da steht,
allerdings hilft das mir nicht wirklich weiter. Einmal schreiben sie den Empfänger
dazu, zum Beispiel Saturn, und einmal lassen sie es einfach weg. Wenn ich Geld
abhebe oder so. Dann sind zum Teil die Empfänger doppelt drinnen, also
Saturn<TAB>Saturn. Damit ist die Datei nicht standardisiert und somit für mich
völlig nutzlos. Ich mache es jetzt wie ich es zuvor schon vor hatte. Ich parse mir
einfach alles was ich benötige aus der HTML Datei heraus :).

Mein Problem ist ja eigentlich, dass ich keine Ahnung habe wie ich das in OOo
rein bekomme. Also wenn mir da jemand eine Library vorschlagen könnte, die
Beispiele enthält wäre ich euch sehr verbunden :D!

Liebe Grüße,
Kaura
BlackJack

@Kaura: Das überzeugt mich ehrlich gesagt nicht, denn wie schon gesagt, kann ich mir nicht vorstellen, dass eine Bank eine nutzlose CSV-Datei zum herunterladen anbietet. Da könnte dann ja niemand etwas mit anfangen und es hätten sich schon Kunden bei der Bank gemeldet was das soll.

OpenOffice kann CSV-Dateien einlesen und in der Python-Standardbibliothek gibt es das `csv`-Modul um solche Dateien zu lesen und schreiben.

Die Python-Anbindung an die UNO-API von OpenOffice um Python innerhalb von OpenOffice ausführen zu können, ist IMHO extrem gruselig. Da würde ich persönlich die Finger von lassen, aber darüber kann man sicher auch Werte in Tabellendokumente eintragen.

Ansonsten kann man noch die ODT-Dateien bearbeiten. Entweder "per Hand" -- es sind ja XML-Dateien in einem ZIP-Archiv und für beide Formate bietet die Standardbibliothek etwas. Für XML würde ich aber trotzdem `lxml` verwenden, weil das ein wenig mehr bietet als `ElementTree` in der Standardbibliothek. Oder man verwendet eine Bibliothek um die Datei zu berarbeiten. Zum Beispiel `ooolib`.

Was man vielleicht auch machen könnte, wäre eine Datenbank zu benutzen und da die Buchungen drin speichern. Zum Beispiel in einer SQLite-Datenbank. Die müsste man dann in OO-Calc als Datenquelle auswählen können. In der Richtung habe ich allerdings noch nichts gemacht, kann also nicht sagen wie gut das funktioniert.
Antworten