Recipe3.16.Watching Foreign Exchange Rates


Recipe 3.16. Watching Foreign Exchange Rates

Credit: Victor Yongwei Yang

Problem

You want to monitor periodically (with a Python script to be run by crontab or as a Windows scheduled task) an exchange rate between two currencies, obtained from the Web, and receive email alerts when the rate crosses a certain threshold.

Solution

This task is similar to other monitoring tasks that you could perform on numbers easily obtained from the Web, be they exchange rates, stock quotes, wind-chill factors, or whatever. Let's see specifically how to monitor the exchange rate between U.S. and Canadian dollars, as reported by the Bank of Canada web site (as a simple CSV (comma-separated values) feed that is easy to parse):

import httplib import smtplib # configure script's parameters here thresholdRate = 1.30 smtpServer = 'smtp.freebie.com' fromaddr = 'foo@bar.com' toaddrs = 'your@corp.com' # end of configuration url = '/en/financial_markets/csv/exchange_eng.csv' conn = httplib.HTTPConnection('www.bankofcanada.ca') conn.request('GET', url) response = conn.getresponse( ) data = response.read( ) start = data.index('United States Dollar') line = data[start:data.index('\n', start)]    # get the relevant line rate = line.split(',')[-1]                   # last field on the line if float(rate) < thresholdRate:    # send email    msg = 'Subject: Bank of Canada exchange rate alert %s' % rate    server = smtplib.SMTP(smtpServer)    server.sendmail(fromaddr, toaddrs, msg)    server.quit( ) conn.close( )

Discussion

When working with foreign currencies, it is particularly useful to have an automated way of getting the conversions you need. This recipe provides this functionality in a quite simple, straightforward manner. When cron runs this script, the script goes to the site, and gets the CSV feed, which provides the daily noon exchange rates for the previous seven days:

Date (m/d/year),11/12/2004,11/15/2004, ... ,11/19/2004,11/22/2004 $Can/US closing rate,1.1927,1.2005,1.1956,1.1934,1.2058,1.1930,  United States Dollar,1.1925,1.2031,1.1934,1.1924,1.2074,1.1916,1.1844 ...

The script then continues to find the specific currency ('United States Dollar') and reads the last field to find today's rate. If you're having trouble understanding how that works, it may be helpful to break it down:

US = data.find('United States Dollar')  # find the index of the currency endofUSline = data.index('\n', US)      # find index for that line end USline = data[US:endofUSline]           # slice to make one string  rate = USline.split(',')[-1]            # split on ',' and return last field

The recipe provides an email alert when the rate falls below a particular threshold, which can be configured to whatever rate you prefer (e.g., you could change that statement to send you an alert whenever the rate changes outside a threshold range).

See Also

httplib, smtplib, and string function are documented in the Library Reference and Python in a Nutshell.



Python Cookbook
Python Cookbook
ISBN: 0596007973
EAN: 2147483647
Year: 2004
Pages: 420

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net