hacks/scrapers/scraper.py

45 lines
1.5 KiB
Python
Executable File

#!/Users/sneak/dev/venv-2.7/bin/python
# shouts to @AskAmex for being a replicant and
# David Bartle for making a very difficult-to-use ofxclient library
# 2013 jeffrey paul <sneak@datavibe.net>
# 5539 AD00 DE4C 42F3 AFE1 1575 0524 43F4 DF2A 55C2
from pprint import pformat
import os
import re
from ofxclient.request import Builder as OFXClientBuilder
class MockInstitution(object):
def __init__(self,user=None,password=None,url=None,org=None,fid=None):
self.username = user
self.password = password
self.dsn = {
'url': url,
'org': org,
'fid': fid,
}
class FinancialScraper(object):
def __init__(self,*args,**kwargs):
self.user = kwargs.pop('user')
self.password = kwargs.pop('password')
def scrape(self):
b = OFXClientBuilder(self.getInstitution())
r = b.doQuery(b.acctQuery())
# i could parse the sgml. or i could do this.
c = re.compile(r'<ACCTID>(\d+)', re.MULTILINE)
out = {}
for acctnum in re.findall(c,r):
out[acctnum] = {}
print(pformat(out))
c = re.compile(r'<BALAMT>([\d\.\-]+)', re.MULTILINE)
for acctnum in out.keys():
if self.isCC():
r = b.doQuery(b.ccQuery(acctnum,'19700101000000'))
if self.isBank():
r = b.doQuery(b.baQuery(acctnum,'19700101000000','',''))
out[acctnum]['balance'] = re.findall(c,r)[0]
return out