def write_csv(trans, file_name): print(file_name) with codecs.open(file_name, 'w', encoding='utf-8') as f: print('Date,Amount,Payer,Payee', file=f) for t in trans: print('"%s","%s","%s","%s"' % (format_tran_date_for_qif(t.date), t.amount, t.payer, t.payee), file=f)
def export(csv, slow): global WAIT_DELAY print('Use "export.py --help" to see all command line options') if slow: WAIT_DELAY = 25 if not os.path.exists(export_path): os.makedirs(export_path) t_db = db.init_db() if not t_db: print('Error initialising database') return creds = get_credentials() driver = login(creds) if not driver: print('Error logging in') return trans = [] i = 1 while True: page_trans = fetch_transactions(driver) trans += page_trans page_count = len(page_trans) if page_count == 0: break print('Got %s transactions, from %s to %s' % (page_count, format_tran_date_for_qif(page_trans[0].date), format_tran_date_for_qif(page_trans[-1].date))) print('Opening next page...') try: nextButton = get_next_btn(driver) if not nextButton.is_displayed(): break nextButton.click() time.sleep(WAIT_DELAY) except NoSuchElementException, err: break
def write_csv(trans, file_name): print(file_name) with codecs.open(file_name, 'w', encoding='utf-8') as f: print('Date,Amount,Payer,Payee', file=f) for t in trans: print( '"%s","%s","%s","%s"' % (format_tran_date_for_qif(t.date), t.amount, t.payer, t.payee), file=f)
def write_qif(trans, file_name): print(file_name) with codecs.open(file_name, 'w', encoding='utf-8') as f: # Write header print('!Account', file=f) print('NQIF Account', file=f) print('TCCard', file=f) print('^', file=f) print('!Type:CCard', file=f) for t in trans: print('C', file=f) # status - uncleared print('D' + format_tran_date_for_qif(t.date), file=f) # date print('T' + t.amount, file=f) # amount print('M' + t.payer, file=f) print('P' + t.payee + t.memo, file=f) print('^', file=f) # end of record
def write_qif(trans, file_name): print(file_name) with codecs.open(file_name, "w", encoding="utf-8") as f: # Write header print("!Account", file=f) print("NQIF Account", file=f) print("TCCard", file=f) print("^", file=f) print("!Type:CCard", file=f) for t in trans: print("C", file=f) # status - uncleared print("D" + format_tran_date_for_qif(t.date), file=f) # date print("T" + t.amount, file=f) # amount print("M" + t.payer, file=f) print("P" + t.payee + t.memo, file=f) print("^", file=f) # end of record
def export(csv, statements): if not os.path.exists(export_path): os.makedirs(export_path) t_db = db.init_db() if not t_db: print('Error initialising database') return creds = get_credentials() if not creds: return br = login(creds) if not br: return text = br.response().read() #log_file('login.html', text) br = open_transactions_page(br) if not br: return trans = [] i = 1 while True: text = br.response().read() #log_file('step%s.html' % i, text) #i += 1 q = PyQuery(text) page_trans = fetchTransactions(text) trans += page_trans nextButton = q('div[name="transactionsPagingLinks"] a[name="nextButton"]') isNextVisible = len(nextButton) != 0 if not isNextVisible: break page_count = len(page_trans) if page_count == 0: break; print('Got %s transactions, from %s to %s' % (page_count, format_tran_date_for_qif(page_trans[0].date), format_tran_date_for_qif(page_trans[-1].date))) print('Opening next page...') next_url = nextButton[0].attrib['href'] br.open(next_url) #if len(trans) > 60: # break new_trans = db.get_only_new_transactions(trans) print('Total of %s new transactions obtained' % len(new_trans)) if len(new_trans) != 0: print('Saving transactions...') db.save_transactions(new_trans) s_d = reduce(lambda t1, t2: t1 if t1.date < t2.date else t2, new_trans).date e_d = reduce(lambda t1, t2: t1 if t1.date > t2.date else t2, new_trans).date if csv: file_name = get_file_name(export_path, s_d, e_d, 'csv') write_csv(new_trans, file_name) else: file_name = get_file_name(export_path, s_d, e_d, 'qif') write_qif(new_trans, file_name) if statements: br = open_statements_page(br) if not br: return text = br.response().read() q = PyQuery(text) for row in q('a[class="s_downloads"]'): statement_date = datetime.strptime(row.text, '%d %b %Y').strftime('%Y-%m-%d') statement_name = '28 Degrees Statement ' + statement_date + '.pdf' statement_path = os.path.join(export_path, statement_name) if not os.path.exists(statement_path): print('Retrieving statement ' + row.text + ' and saving to ' + statement_path) br.retrieve(row.attrib['href'], statement_path)
def export(csv, statements): if not os.path.exists(export_path): os.makedirs(export_path) t_db = db.init_db() if not t_db: print('Error initialising database') return creds = get_credentials() if not creds: return br = login(creds) if not br: return text = br.response().read() qq = PyQuery(text) statLink = qq('li[id="cardsonline.statements"] a') #log_file('login.html', text) br = open_transactions_page(br) if not br: return trans = [] i = 1 while True: text = br.response().read() #log_file('step%s.html' % i, text) #i += 1 q = PyQuery(text) page_trans = fetchTransactions(text) trans += page_trans nextButton = q( 'div[name="transactionsPagingLinks"] a[name="nextButton"]') isNextVisible = len(nextButton) != 0 if not isNextVisible: break page_count = len(page_trans) if page_count == 0: break print('Got %s transactions, from %s to %s' % (page_count, format_tran_date_for_qif(page_trans[0].date), format_tran_date_for_qif(page_trans[-1].date))) print('Opening next page...') next_url = nextButton[0].attrib['href'] br.open(next_url) #if len(trans) > 60: # break new_trans = db.get_only_new_transactions(trans) print('Total of %s new transactions obtained' % len(new_trans)) if len(new_trans) != 0: print('Saving transactions...') db.save_transactions(new_trans) s_d = reduce(lambda t1, t2: t1 if t1.date < t2.date else t2, new_trans).date e_d = reduce(lambda t1, t2: t1 if t1.date > t2.date else t2, new_trans).date if csv: file_name = get_file_name(export_path, s_d, e_d, 'csv') write_csv(new_trans, file_name) else: file_name = get_file_name(export_path, s_d, e_d, 'qif') write_qif(new_trans, file_name) if statements: if len(statLink) == 0: print('Unable to find link to statements page') return br.open(statLink[0].attrib['href']) text = br.response().read() q = PyQuery(text) for row in q('a[class="s_downloads"]'): statement_date = datetime.strptime(row.text, '%d %b %Y').strftime('%Y-%m-%d') statement_name = '28 Degrees Statement ' + statement_date + '.pdf' statement_path = os.path.join(export_path, statement_name) if not os.path.exists(statement_path): print('Retrieving statement ' + row.text + ' and saving to ' + statement_path) br.retrieve(row.attrib['href'], statement_path)