#!/usr/bin/python
import sys
import os, time
import urllib
from getopt import gnu_getopt, GetoptError
valid_cur = ["ARS","AUD","ALL","DZD","AWG","BSD","BHD","BDT","BBD","BYR","BZD","BMD","BTN","BOB","BRL","BND","GBP","BGN",
"BIF","KHR","CAD","KYD","CLP","CNY","COP","KMF","CRC","HRK","CUP","CYP","CZK","DKK","DJF","DOP","ECS","EGP",
"SVC","ERN","EEK","ETB","EUR","FKP","GMD","GHC","GIP","GTQ","GNF","HTG","HNL","HKD","HUF","ISK","INR","IDR",
"IRR","ILS","JMD","JPY","JOD","KZT","KES","KRW","KWD","LAK","LVL","LBP","LSL","LYD","LTL","MOP","MKD","MGF",
"MWK","MYR","MVR","MTL","MRO","MUR","MXN","MDL","MNT","MAD","MZM","NAD","NPR","ANG","TRY","NZD","NIO","NGN",
"NOK","OMR","PKR","PAB","PGK","PYG","PEN","PHP","PLN","QAR","ROL","RON","RUB","RWF","WST","STD","SAR","SCR",
"SLL","SGD","SKK","SIT","SOS","ZAR","LKR","SHP","SDD","SRG","SZL","SEK","CHF","SYP","TWD","TZS","THB","TOP",
"TTD","TND","USD","AED","UGX","UAH","UYU","VUV","VEB","VND","YER","ZMK","ZWD"]
def getOptions():
try:
opts, args = gnu_getopt(sys.argv[1:], "qti:c:h", ["quotes", "ticker", "interval=", "currency=", "help"])
except GetoptError:
print("Invalid option(s)")
showUsage()
sys.exit(2)
flags = []
ticker_interval = 60
amount = ""
for opt, arg in opts:
if opt in ("-h", "--help"):
showUsage()
sys.exit(0)
if opt in ("-q", "--quotes"):
flags.append("q")
if opt in ("-t", "--ticker"):
flags.append("t")
if opt in ("-i", "--interval"):
ticker_interval = int(arg)
if opt in ("-c", "--currency"):
flags.append("c")
amount = arg
if flags == []:
flags = ['q']
return flags, args, ticker_interval, amount
class Currency:
'''
'''
def __init__(self, from_cur , to_cur, amount):
self.amount = float(amount)
self.from_cur = from_cur.upper()
self.to_cur = to_cur.upper()
if not self.from_cur in valid_cur:
print "Invalid currency symbol: %s" % self.from_cur
sys.exit(1)
if not self.to_cur in valid_cur:
print "Invalid currency symbol: %s" % self.to_cur
sys.exit(1)
self.urlPre = "http://finance.yahoo.com/d/quotes.csv?s="
self.urlPost = "=X&f=sl1d1t1&e=.csv"
self.symUrl = self.from_cur + self.to_cur
self.url = self.urlPre + self.symUrl + self.urlPost
def grabQuote(self):
url = self.urlPre + self.symUrl + self.urlPost
line = urllib.urlopen(url).readline().split(',')
rate = float(line[1])
result = self.amount * rate
time = line[3][1:-3] # trim quotes and newline
date = line[2][1:-1] # trim quotes
print "%.2f %s at %f is %.2f %s as of %s %s" % (self.amount, self.from_cur, rate, result, self.to_cur, time, date)
class RetrieveQuotes:
'''
'''
def __init__(self, symbols):
self.symbols = symbols.sort()
self.urlPre = "http://finance.yahoo.com/d/quotes.csv?s="
self.urlPost = "&f=sl1cpoghrvt1&e=.csv"
self.symUrl = "+".join(["%s" % sym for sym in symbols])
self.url = self.urlPre + self.symUrl + self.urlPost
def trend(p):
pass
def grabQuote(self):
print "%-9s%9s%9s%9s%9s%9s%9s%9s%9s%10s%9s" % \
("Symbol","Last","Change","%","PrevC","Open","DayLo","DayHi","P/E","Volume","Time")
output = []
for line in urllib.urlopen(self.url).readlines():
line = line.split(",")
change = line[2][1:-1].split(" ")
if change[0][0] == "+":
os.system('echo -en $"\\033[0;32m"')
elif change[0][0] == "-":
os.system('echo -en $"\\033[1;31m"')
print "%-9s%9s%9s%9s%9s%9s%9s%9s%9s%10s%9s" % \
(line[0][1:-1], line[1], change[0], change[2], line[3], line[4], line[5], line[6], line[7], line[8], line[9][1:-3])
os.system('echo -en $"\\033[0;39m"')
def showUsage():
print '''Usage: %s -q [options]... symbol [symbol]...
%s -c amount from-currency to-currency
Options:
'-q' or '--quote' quote mode
'-c' or '--currency' currency mode
'-t' or '--ticker' ticker mode
'-i N' or '--interval=N' set ticker interval to 'N' seconds
''' % (sys.argv[0], sys.argv[0])
def main():
myopts = getOptions()
if "q" in myopts[0]:
x = RetrieveQuotes(myopts[1])
x.grabQuote()
sys.exit(0)
if "t" in myopts[0]:
x = RetrieveQuotes(myopts[1])
try:
while True:
x.grabQuote()
time.sleep(myopts[2])
os.system('clear')
except KeyboardInterrupt:
print "Exiting gracefully..."
sys.exit(0)
if "c" in myopts[0]:
x = Currency(myopts[1][0], myopts[1][1], myopts[3])
x.grabQuote()
sys.exit(0)
if __name__ == '__main__':
main()