Python Cookbook 2Nd Edition Jun 1002005 [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Python Cookbook 2Nd Edition Jun 1002005 [Electronic resources] - نسخه متنی

David Ascher, Alex Martelli, Anna Ravenscroft

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید


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
.

/ 394