module.add bank
module.add bank:refresh
mainmenu.add "Kontoumsatz" "/bank"
::http::register https 443 ::tls::socket
::http::config -useragent "Mozilla/5.0 (X11; U; Linux i686; rv:1.7.8) Gecko/20050927 Debian/1.7.8-1sarge3"
proc bank {} {
global db
upvar cgi cgi
mysql::ping $db
htmlout.header "Banktransaktionen"
htmlout "
Banktransaktionen
"
htmlout "
"
htmlout [mysql:htmltable bank transactions bankaccount "date sender comment amount" "Datum Absender Verwendungszweck Betrag" {{} {} {} {text-align:right;}} {{set field [clock format [mysql:sqldate2timestamp $field] -format "%d.%m.%Y"]} {} {} {set field "[format "%.2f" $field] Eur"}} 10 "001000"]
htmlout.footer
}
proc bank:refresh {} {
global db
mysql::ping $db
set bank(baseurl) "https://banking.postbank.de"
proc tagfilter {p t n} {
if [string match $p [$t get $n type]] {return 1} {return 0}
}
proc tagkeyvalue {d k} {
return [lindex [string range [lindex [split $d " "] [lsearch [split $d " "] ${k}=*]] [expr [string length $k]+1] end] 0]
}
set token [::http::geturl $bank(baseurl)/app/welcome.do]
upvar #0 $token state
catch "htmldata destroy"
::struct::tree htmldata
::htmlparse::2tree $state(body) htmldata
set node(form) [htmldata children -all root filter "tagfilter form"]
set sessionid [lindex [split [tagkeyvalue [htmldata get $node(form) data] action] \;] 1]
set query "accountNumber=628536207&pinNumber=73973"
htmldata destroy
set token [::http::geturl $bank(baseurl)/app/login.prep.do\;$sessionid -query $query]
set zeitraum tage
set tage "00"
set tag "01"
set monat "10"
set jahr "2005"
set headers [list "Referer:" $bank(baseurl)/app/kontoumsatz.umsatz.init.do]
set query "?action=download&cache=true&konto=628536207&zeitraum=$zeitraum&tage=$tage&tag=$tag&monat=$monat&jahr=$jahr&action=Umsatzauskunft+aktualisieren"
set token [::http::geturl $bank(baseurl)/app/kontoumsatz.umsatz.init.do\;$sessionid$query -headers $headers]
upvar #0 $token state
# set in [open ums.txt r]; set data [read $in]; close $in
foreach line [lrange [split $state(body) \n] 11 end] {
# foreach line [lrange [split $data \n] 11 end]
if [string match "Gutschrift" [lindex $line 2]] {
set date [mysql:date2sqldate [lindex $line 1]]
set comment [lrange $line 3 end-6]
set sender [lrange $line end-5 end-4]
set amount [lindex $line end-1]
regsub , $amount . amount
if [llength [mysql::sel $db "SELECT * from bankaccount where date=\"$date\" and sender=\"$sender\" and comment=\"$comment\"" -list]]==0 {
mysql::exec $db "INSERT into bankaccount (date , sender , comment , amount) values (\"$date\" , \"$sender\" , \"$comment\" , $amount);"
}
}
}
return 0
}