nosilence 发表于 2015-4-27 09:53:41

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),返回的结果如下:



-
sh600547
山东黄金
2011-01-04 14:46:20
53.15
52.71
53.18
0.44
52.77
53.79
0.83%
138375.48
73669.8408
53.15
53.16
-48.30%
53.15 / 94.00
53.13 / 11.00
53.12 / 11.00
53.11 / 6.00
53.10 / 304.00
53.16 / 30.70
53.17 / 265.65
53.18 / 481.99
53.19 / 194.00
53.20 / 249.50
  
  
  程序:(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.ljust(10) + str(stockitem).ljust(10) +str(stockitem).ljust(20) + str(stockitem).ljust(10))
    def PrintStockInfoItemWithColor(stockitem):
      import WConio
      WConio.textcolor(WConio.WHITE)
      if(stockitem> 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()
      returnstockstr
               
    def ParseStockStr(stockstr):
      stockitem = []
      id = stockstr
      slist=stockstr.split(',')
      name=slist[-4:]
      yesterdayendprice=slist
      nowprice=slist
      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;

  
  希望大家能够继续改进和共享!
  
  完!
页: [1]
查看完整版本: python实例31[My Stock Info]