• 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

  • 相关阅读:
    线程池参数详解
    线程池各个参数详解以及如何自定义线程池
    fastdfs 安装
    SQL 执行顺序
    《SQL 进阶教程》 查找局部不一致的数据
    redis 高性能的原因
    一致性hash
    环境部署数据库报错
    redis 常用命令
    redis 高级学习和应用场景
  • 原文地址:https://www.cnblogs.com/itech/p/1907067.html
Copyright © 2020-2023  润新知