2012-12-11, 19:37
#697
Källkoden.
stock.py
Modulen ystockquote.py
stock.py
Kod:
import time
import datetime
import ystockquote
import os, sys
import tty
import ast
from select import select
#----------------------------------------------------------
class stock_name:
Google = 'GOOG'
Facebook = 'FB'
Ericsson = 'ERIC'
Apple = 'AAPL'
IBM = 'IBM'
Euro = 'EURUSD=X'
#----------------------------------------------------------
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[37m\033[42m'
#OKGREEN = '\033[92m'
WARNING = '\033[93m'
#FAIL = '\033[91m'
FAIL = '\033[37m\033[41m'
ENDC = '\033[0m'
#----------------------------------------------------------
class NotTTYException(Exception): pass
class TerminalFile:
def __init__(self,infile):
if not infile.isatty():
raise NotTTYException()
self.file=infile
#prepare for getch
self.save_attr=tty.tcgetattr(self.file)
newattr=self.save_attr[:]
newattr[3] &= ~tty.ECHO & ~tty.ICANON
tty.tcsetattr(self.file, tty.TCSANOW, newattr)
def __del__(self):
#restoring stdin
import tty #required this import here
tty.tcsetattr(self.file, tty.TCSADRAIN, self.save_attr)
def getch(self):
if select([self.file],[],[],0)[0]:
c=self.file.read(1)
else:
c=''
return c
#----------------------------------------------------------
def tid():
now = datetime.datetime.now()
return datetime.time(now.hour, now.minute, now.second)
#----------------------------------------------------------
def last_line(aktie):
if os.path.exists(aktie + '.data') == True:
if os.stat(aktie + '.data').st_size >= 1:
s = open(aktie + '.data', 'r')
return float((list(s)[-1]))
else:
return 0
else:
file(aktie + '.data', 'w').close()
return 0
#----------------------------------------------------------
def get_p_c(aktie):
price = round(float(ystockquote.get_price(aktie)), 1)
if price > last_line(aktie):
f = open(aktie + '.data', 'a')
f.writelines('\n' + str(tid()) + '\n' + str(price))
f.close()
return bcolors.OKGREEN + str(price) + bcolors.ENDC
if price < last_line(aktie):
f = open(aktie + '.data', 'a')
f.writelines('\n' + str(tid()) + '\n' + str(price))
f.close()
return bcolors.FAIL + str(price) + bcolors.ENDC
else:
return str(price)
#------------------------------------------------------------
def main():
#a = raw_input('Enter stock name: ')
a = 'Google'
b = 'Apple'
c = 'Facebook'
d = 'IBM'
s=TerminalFile(sys.stdin)
print "Press q to quit..."
while s.getch()!="q":
print tid(),
print '|' + a + ': ' + get_p_c(getattr(stock_name, a)),
print '|' + b + ': ' + get_p_c(getattr(stock_name, b)),
print '|' + c + ': ' + get_p_c(getattr(stock_name, c)),
print '|' + d + ': ' + get_p_c(getattr(stock_name, d))
print '---------+--------------+-------------+---------------+----------+'
#os.system('clear')
main()
Modulen ystockquote.py
Kod:
#!/usr/bin/env python
#
# Copyright (c) 2007-2008, Corey Goldberg (corey@goldb.org)
#
# license: GNU LGPL
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
import urllib
"""
This is the "ystockquote" module.
This module provides a Python API for retrieving stock data from Yahoo Finance.
sample usage:
>>> import ystockquote
>>> print ystockquote.get_price('GOOG')
529.46
"""
def __request(symbol, stat):
url = 'http://finance.yahoo.com/d/quotes.csv?s=%s&f=%s' % (symbol, stat)
return urllib.urlopen(url).read().strip().strip('"')
def get_all(symbol):
"""
Get all available quote data for the given ticker symbol.
Returns a dictionary.
"""
values = __request(symbol, 'l1c1va2xj1b4j4dyekjm3m4rr5p5p6s7').split(',')
data = {}
data['price'] = values[0]
data['change'] = values[1]
data['volume'] = values[2]
data['avg_daily_volume'] = values[3]
data['stock_exchange'] = values[4]
data['market_cap'] = values[5]
data['book_value'] = values[6]
data['ebitda'] = values[7]
data['dividend_per_share'] = values[8]
data['dividend_yield'] = values[9]
data['earnings_per_share'] = values[10]
data['52_week_high'] = values[11]
data['52_week_low'] = values[12]
data['50day_moving_avg'] = values[13]
data['200day_moving_avg'] = values[14]
data['price_earnings_ratio'] = values[15]
data['price_earnings_growth_ratio'] = values[16]
data['price_sales_ratio'] = values[17]
data['price_book_ratio'] = values[18]
data['short_ratio'] = values[19]
return data
def get_price(symbol):
return __request(symbol, 'l1')
def get_change(symbol):
return __request(symbol, 'c1')
def get_volume(symbol):
return __request(symbol, 'v')
def get_avg_daily_volume(symbol):
return __request(symbol, 'a2')
def get_stock_exchange(symbol):
return __request(symbol, 'x')
def get_market_cap(symbol):
return __request(symbol, 'j1')
def get_book_value(symbol):
return __request(symbol, 'b4')
def get_ebitda(symbol):
return __request(symbol, 'j4')
def get_dividend_per_share(symbol):
return __request(symbol, 'd')
def get_dividend_yield(symbol):
return __request(symbol, 'y')
def get_earnings_per_share(symbol):
return __request(symbol, 'e')
def get_52_week_high(symbol):
return __request(symbol, 'k')
def get_52_week_low(symbol):
return __request(symbol, 'j')
def get_50day_moving_avg(symbol):
return __request(symbol, 'm3')
def get_200day_moving_avg(symbol):
return __request(symbol, 'm4')
def get_price_earnings_ratio(symbol):
return __request(symbol, 'r')
def get_price_earnings_growth_ratio(symbol):
return __request(symbol, 'r5')
def get_price_sales_ratio(symbol):
return __request(symbol, 'p5')
def get_price_book_ratio(symbol):
return __request(symbol, 'p6')
def get_short_ratio(symbol):
return __request(symbol, 's7')
def get_historical_prices(symbol, start_date, end_date):
"""
Get historical prices for the given ticker symbol.
Date format is 'YYYYMMDD'
Returns a nested list.
"""
url = 'http://ichart.yahoo.com/table.csv?s=%s&' % symbol + \
'd=%s&' % str(int(end_date[4:6]) - 1) + \
'e=%s&' % str(int(end_date[6:8])) + \
'f=%s&' % str(int(end_date[0:4])) + \
'g=d&' + \
'a=%s&' % str(int(start_date[4:6]) - 1) + \
'b=%s&' % str(int(start_date[6:8])) + \
'c=%s&' % str(int(start_date[0:4])) + \
'ignore=.csv'
days = urllib.urlopen(url).readlines()
data = [day[:-2].split(',') for day in days]
return data