<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: wamu code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 07 Aug 2008 01:46:26 GMT</pubDate>
    <description>DZone Snippets: wamu code</description>
    <item>
      <title>Automatic Bank Balance Checking at WaMu</title>
      <link>http://snippets.dzone.com/posts/show/4548</link>
      <description>I bank at Washington Mutual, and I wanted to see when I was spending too much, or get automated updates of what I was spending money on each day and what my balance was.  However, it's really difficult to do and WaMu won't let you use an API or something helpful like that, so I wrote my own little screen-scraper to do it.&lt;br /&gt;&lt;br /&gt;This requires WWW::Mechanize, but it works quite well.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'mechanize'&lt;br /&gt;&lt;br /&gt;agent = WWW::Mechanize.new&lt;br /&gt;&lt;br /&gt;# login to the account&lt;br /&gt;puts "Login"&lt;br /&gt;page = agent.get('https://online.wamu.com/IdentityManagement/Logon.aspx')&lt;br /&gt;login_form = page.forms.with.name("frmLogin").first&lt;br /&gt;login_form.txtUserID = '&lt;UNAME&gt;'&lt;br /&gt;login_form.password = '&lt;PWD&gt;'&lt;br /&gt;page = agent.submit(login_form, login_form.buttons.first)&lt;br /&gt;&lt;br /&gt;# click on the download button&lt;br /&gt;puts "Download"&lt;br /&gt;dl_link = page.links.with.text(/WAMU FREE CHECKING/)&lt;br /&gt;page = agent.click(dl_link)&lt;br /&gt;&lt;br /&gt;line_items = []&lt;br /&gt;&lt;br /&gt;trs = (page/"table#_ctl0_depositTransactionsGrid/tr")&lt;br /&gt;trs.shift&lt;br /&gt;trs.each do |tr|&lt;br /&gt;  tds = (tr/:td)&lt;br /&gt;&lt;br /&gt;  dtd = tds[1].inner_html&lt;br /&gt;  js_call = dtd.match(/showDDATransactionDetails\('(.*)'\);/)[1]&lt;br /&gt;  js_fields = js_call.split("','")&lt;br /&gt;&lt;br /&gt;  item = {}&lt;br /&gt;  item['type'] = js_fields[1]&lt;br /&gt;  item['descr'] = js_fields[3]&lt;br /&gt;  item['amount'] = js_fields[4]&lt;br /&gt;  item['tranid'] = js_fields[6]&lt;br /&gt;  # if !tranid = ovedraft charge / bank fee&lt;br /&gt;&lt;br /&gt;  item['date'] = tds[0].inner_html&lt;br /&gt;  item['debit'] = tds[3].inner_html&lt;br /&gt;  item['credit'] = tds[4].inner_html&lt;br /&gt;  item['balance'] = tds[5].inner_html&lt;br /&gt;&lt;br /&gt;  line_items &lt;&lt; item&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;pp line_items.first&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Sun, 16 Sep 2007 21:18:32 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4548</guid>
      <author>schacon (Scott Chacon)</author>
    </item>
  </channel>
</rss>
