python实例31[My Stock Info]

 

本程序使用python3.1实现的一个运行于Windows的控制台小程序,用来显示你所关心的股票的实时价格。

1)每隔一分钟跟新一次,当然你可以改为更短的时间间隔;

2)控制台彩色显示的python模块为WConio,需要单独下载:http://newcenturycomputers.net/projects/wconio.html

3)webservice来源于sina,感谢sina,例如http://hq.sinajs.cn/list=sh600547, 返回的结果如下:

var hq_str_sh600547="山东黄金,51.02,51.00,52.71,52.86,50.68,52.70,52.72,16389139
,850524809,3000,52.70,52500,52.69,100,52.67,28849,52.66,7400,52.65,1200,52.72,43
77,52.75,11200,52.76,20000,52.77,4000,52.78,2010-12-31,15:02:06";

 

 

4) 也可以使用其他的股票web service (http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx/getStockInfoByCode?theStockCode=sh600547),返回的结果如下:

<?xml version="1.0" encoding="utf-8" ?> 
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">
  
<string>sh600547</string> 
  
<string>山东黄金</string> 
  
<string>2011-01-04 14:46:20</string> 
  
<string>53.15</string> 
  
<string>52.71</string> 
  
<string>53.18</string> 
  
<string>0.44</string> 
  
<string>52.77</string> 
  
<string>53.79</string> 
  
<string>0.83%</string> 
  
<string>138375.48</string> 
  
<string>73669.8408</string> 
  
<string>53.15</string> 
  
<string>53.16</string> 
  
<string>-48.30%</string> 
  
<string>53.15 / 94.00</string> 
  
<string>53.13 / 11.00</string> 
  
<string>53.12 / 11.00</string> 
  
<string>53.11 / 6.00</string> 
  
<string>53.10 / 304.00</string> 
  
<string>53.16 / 30.70</string> 
  
<string>53.17 / 265.65</string> 
  
<string>53.18 / 481.99</string> 
  
<string>53.19 / 194.00</string> 
  
<string>53.20 / 249.50</string> 
  
</ArrayOfString>

 

 

程序:(Mystockinfo.py) 

import urllib.request

class Utility:
    
def ToGB(str):
        
return str.decode('gb2312')
    
    
def ReadStocksToArray(file):
        file 
= open(file, 'r')
        stocks 
= []
        
if file:
            
for line in file:
                stocks.append(line.rstrip(
"\n"))
            file.close()
        
else:
            
print ("Error Opening File.")
        
return stocks
        
class ColorConsole:
    
def PrintStockInfoTitle():
        
import datetime
        
print(datetime.datetime.now())    
        
print("Name".ljust(10+ "ID".ljust(10+ "CurrentPrice".ljust(20+ "Percent".ljust(10))  
        
print('*****************************************************')
    
def PrintStockInfoTitleWithColor():
        
import WConio
        WConio.settitle(
"My Stock Info")
        WConio.clrscr()
        ColorConsole.PrintStockInfoTitle()
        
    
def PrintStockInfoItem(stockitem):
        
print(stockitem[0].ljust(10+ str(stockitem[1]).ljust(10+  str(stockitem[2]).ljust(20+ str(stockitem[3]).ljust(10))

    
def PrintStockInfoItemWithColor(stockitem):
        
import WConio
        WConio.textcolor(WConio.WHITE)
        
if(stockitem[3]> 0.0):
            WConio.textcolor(WConio.RED)
            ColorConsole.PrintStockInfoItem(stockitem)
        
else:
            WConio.textcolor(WConio.GREEN)
            ColorConsole.PrintStockInfoItem(stockitem)
        WConio.textcolor(WConio.WHITE)
            
class StockInfo:        
    
def GetStockStrByNum(num):
        f 
= urllib.request.urlopen('http://hq.sinajs.cn/list='+ str(num))
        stockstr 
= ""
        
if f:
            stockstr 
= f.readline()
            f.close() 
        
return  stockstr  
                
    
def ParseStockStr(stockstr):
        stockitem 
= []
        id 
= stockstr[13:19]
        slist
=stockstr.split(',')
        name
=slist[0][-4:]
        yesterdayendprice
=slist[2]
        nowprice
=slist[3]
        upgraderate
=(float(nowprice)-float(yesterdayendprice))/float(yesterdayendprice)
        upgraderate
= upgraderate * 100
        stockitem.append(name)
        stockitem.append(id)
        stockitem.append(nowprice)
        stockitem.append(upgraderate)
        
return stockitem
              
    
def GetStockInfo(num):
        str
=StockInfo.GetStockStrByNum(num)
        strGB
=Utility.ToGB(str)
        
return StockInfo.ParseStockStr(strGB)       

def RunWithOutColor():     
    stocks 
= Utility.ReadStocksToArray('Stocks.txt')
    ColorConsole.PrintStockInfoTitle()
    
for stock in stocks:
        s 
= StockInfo.GetStockInfo(stock)
        ColorConsole.PrintStockInfoItem(s)
        
def RunWithColor():
    stocks 
= Utility.ReadStocksToArray('Stocks.txt')
    ColorConsole.PrintStockInfoTitleWithColor()
    
for stock in stocks:
        s 
= StockInfo.GetStockInfo(stock)
        ColorConsole.PrintStockInfoItemWithColor(s)

def Main():
    
while(1):
        
#RunWithOutColor()
        RunWithColor()
        
import time
        time.sleep(
60)

Main()

  

数据输入: (stocks.txt 此文件需要跟Mystockinfo.py在统一目录下,你可以自由的增加自己关注的股票代码)

sh601601
sh600547
sz300027
sh600196
sz002299
sh601766

  

运行结果:

 

运行: (MyStockInfo.bat 双击此文件即可运行了,或者还可以对此文件创建桌面快捷方式,再桌面上直接运行)

c:\python31\python.exe mystock.py

  

如果希望在python2.6下运行,则需要

1)在所有的类的静态函数前加上   @staticmethod  ;

2) 修改urllib.request为urllib2;

 

希望大家能够继续改进和共享!

 

完!


作者:iTech
微信公众号: cicdops
出处:http://itech.cnblogs.com/
github:https://github.com/cicdops/cicdops

posted @ 2010-12-15 20:04  iTech  阅读(2845)  评论(0编辑  收藏  举报