views:

246

answers:

6

Hi Guys,

as I can imagine, this is a quite big topic. Let me explain: I have used MS Money for several years now and due to my "coding interest" it would be great to know where to start learning the basics for programming such an application. Better to say: Its not about how to design and write an application, its about the "bank details". (Just displaying the amount of a certain bank account for the beginning would be a pleasent aim for me.).

I would like to do it in c++ or java, since I'm used to these languages.

Will it be "too big" for a hobby project? I do not know much about all the security issues, the bank server interfaces/technique, etc.

At the first place after a "no" I need a realiable source for learning.

Thanks in advance.

(Please correct the tags if they are not sufficiant. )

+7  A: 

Most of the apps I've worked with read in a file exported from the bank's website, which is relatively straight forward.

If that's the road you're looking to go down you'll need to write code to:

  • Login to the bank's website to download the file via HTTPS
  • Either get specs for the file format or reverse engineer it
  • Apply whatever business rules you choose to the resulting data
Angelo Genovese
@Angelo Genovese I thought about parsing files I can export from my banks online account. But I have written to much "parse something" stuff so I skipped that. Despite of that it could be a good start for learning somethin about the bank connection topic.
InsertNickHere
@insertnickhere I think you're not going to avoid some kind of parsing. Though i'd guess the bank will have at least one format that is XML, like OFX. And i do believe angelo-genovese's solution is the approach some financial applications use in some cases. At least it seems like that's what Quicken is going for a few of my accounts so i'd guess others would too.
nicerobot
@nicerobot Checked this, my bank uses CSV. D'oh. ;-)
InsertNickHere
@insertnickhere Well that's good news. CSV is some of the easiest text to process. There's even [JDBC drivers](http://csvjdbc.sourceforge.net/) for it if you feel like going overboard.
nicerobot
@nicerobot Thanks. The drivers I will use. (If I make it to the point where I need them. ;-)
InsertNickHere
+1  A: 

I think its quite a reasonable hobby project; start with a simple ledger and then you can add features.

A few things I would do to begin such a project:

  • Decide on an initial feature set. A good start might be just one of the ledgers/accounts - basically balancing a checkbook. Make this general enough that you can have several.
  • Design a data model. What fields will your ledger have? What restrictions on the values of each?
  • Choose technologies. What language do you want to program in? How will you persist the data? What GUI do you want - a fat client like MS money or a web app?

From there, write up some design notes if warranted and start coding!

Greg Harman
Note: I just noticed the discussion above about connecting to an online bank. I would start with the simple ledger I described before you attempt that. When you're ready, your bank will probably use an exchange/api standard - with luck you can just connect e.g. to a secure web service.
Greg Harman
@Greg Harman Yeah this is nothing I want to do in a few weeks. At first I wanted to check out if its possible at all. Thanks for your tips anyway.
InsertNickHere
A: 

I don't think many (if any) banks provides api's.

Online budget-apps in Sweden seem to rely either on exporting transactions in some excel format, or simply have you "mark all transacations in the banksystem, ctrl-c then ctrl-v in a textbox", which is then parses.

Viktor Sehr
mint.com boasts access to all major USA banks. You give them your online account credentials which they give immediately to the bank and get back a "read-only" account login. They then throw away the credentials you provided and use "read-only" credentials to update your metrics every 24 hours.
Adam
@Adam: cool, would be nice to have that here in sweden
Viktor Sehr
+1  A: 

You might look into OFX4J, an implementation of the Open Financial Exchange specification, mentioned here and in a comment by @nicerobot.

trashgod
@trashgod Thanks, looks quite near to what I need, but at this time I don't know about the details so I have to take a closer look later this day.
InsertNickHere
+1  A: 

Are you looking for something mint.com-ish? From my understanding of their security policy this is how they do it: You give them your online account credentials which they give immediately to the bank and get back a "read-only" account login. They then throw away the credentials you provided and use "read-only" credentials to update your metrics every 24 hours. I don't know how they do this or if they have a special relationship with the banks, but it is possible.

Adam
@Adam It looks quite interesting, I will have a detailed look later on.
InsertNickHere
+1  A: 

The first thing to remember when trying to programmatically interact with a banking website without express written permission from the bank will MOST LIKELY be a violation of the website use agreement, and may land you in more trouble than it's worth.

Second, you DON'T want to start 'learning' programming by trying to tackle something that massive and sensitive. Not that there is anything wrong with the eventual goal, but that's a journey of a thousand leagues and you need to take your first step.

I would say start with a simple programming environment, like python, or perl. Reason, you don't have to worry about linking, libraries, code generation etc. Get used to the basics of what you want to achieve functionally, them reimplementing that in C++ or Java would be the next step.

To begin with focus on learning client-server programming.

Write a client, write a server, learn all about sockets, learn all about TCP programming,

then learning about secure socket layers (SSL) and transport layer security (TLS).

Once you've done this, try switching to C++ or Java and see if you can repeat the effect.

There are TONS of tutorials on these topics.

Once you have become used to that, learn what tools and libraries are already available to do most common things. For example libcurl is great for creating common internet application protocol clients (HTTP, HTTPS, FTP and the like).

See if you can create an interactive program that you can "log in to" using your web browser which outputs stuff in XML and formats it using cascading style sheets.

This should lead you into javascript world, where there are powerful tools such as jquery. If you mix and match these correctly, you will find that development can be a LOT of fun and quite rapid.

:-)

Happy journeying.

Elf King
@Elf King Its not about learning how to program. I do this for 10 <ears now, but thanks anyway. :)
InsertNickHere