#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib2 import sys from xml.dom import minidom class BovespaStockQuote(object): user_agent = "BovespaStockQuote/0.2.10" def __init__(self, symbol): self.symbol = symbol.upper() xmldoc = minidom.parseString(self._get_xml()) self.quotes = xmldoc.getElementsByTagName("Papel") self.change = self.quotes[0].attributes["Oscilacao"].value self.date, self.time = self.quotes[0].attributes["Data"].value.split(" ") self.last = self.quotes[0].attributes["Ultimo"].value def __str__(self): return "\nPapel :%12s\nData :%12s\nHora :%12s\nUltimo :%12s\nVariacao:%11s%%\n\nFonte: http://www.bovespa.com.br\n" % (self.symbol, self.date, self.time, self.last, self.change) def _get_xml(self): url = "http://www.bovespa.com.br/Mercado/RendaVariavel/InfoPregao/ExecutaAcaoAjax.asp?CodigoPapel=%s" % self.symbol request = urllib2.Request(url) request.add_header("User-Agent", BovespaStockQuote.user_agent) opener = urllib2.build_opener() return opener.open(request).read() class PetrobrasPNQuote(BovespaStockQuote): def __init__(self): BovespaStockQuote.__init__(self, "PETR4") class PetrobrasONQuote(BovespaStockQuote): def __init__(self): BovespaStockQuote.__init__(self, "PETR3") class ValePNQuote(BovespaStockQuote): def __init__(self): BovespaStockQuote.__init__(self, "VALE5") if __name__ == '__main__': if len(sys.argv) > 1: try: print BovespaStockQuote(sys.argv[1]) except: print "\nI'm sorry, quote not found. Please verify the correct stock symbol or try again later (market may be closed).\n" else: print "Usage: bsq stock_symbol"