Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #BigConsumer.py
- """
- Enum
- OOP => dynamic + static
- data consumption => price + ticker
- """
- from enum import IntEnum
- from urllib.request import urlopen
- class Markets(IntEnum):
- PSI20 = 1
- IBEX35 = 2
- CAC40 = 3
- XETRA = 4
- #TODO
- @staticmethod
- def contains(pMarket):
- if (pMarket==1 or pMarket==2 or pMarket==3 or pMarket==4):
- return True
- return False
- #class Markets
- class BigConsumer:
- BASE_URL = \
- "https://big.pt/Reports/StockInfo/StockInfoDetails/"
- #<span class="stock-item-closePrice">5,21 EUR</span>
- #<h3 class="dark-grey show" id="H3">ALTRI SGPS (ALTR)</h3>
- MARK_CLOSE_PRICE = "<span class=\"stock-item-closePrice\">"
- MARK_TICKER = "<h3 class=\"dark-grey show\" id=\"H3\">"
- def __init__(self, pMarket):
- #if (Markets.contains(pMarket)): #TODO
- self.mMarket = pMarket
- self.mData = ""
- self.mProduct = ""
- #def __init__
- @staticmethod
- def getProducts():
- dictSupportedProducts = {}
- dictSupportedProducts["ALTRI"]="ALT%20AE"
- dictSupportedProducts["BCP"]="BCP%20AM"
- dictSupportedProducts["SONAE"]="SON%20AM"
- dictSupportedProducts["ZON"]="ZON%20AM"
- return dictSupportedProducts
- #def getProducts
- @staticmethod
- def getProductUrl (pStrProductName):
- dictProducts = BigConsumer.getProducts()
- keysProducts = dictProducts.keys()
- bValid = pStrProductName in list(keysProducts)
- if (bValid):
- strBigSpecificValue = dictProducts[pStrProductName]
- strUrl = "%s%s"%(
- BigConsumer.BASE_URL,
- strBigSpecificValue
- )
- return strUrl
- #if
- return False
- #def getProductUrl
- @staticmethod
- def urlReader(pStrUrl):
- requester = urlopen(pStrUrl)
- bytesData = requester.read() #bytes!
- strData = bytesData.decode("UTF-8")
- return strData
- #def urlReader
- def mustReloadFromWeb(self, pStrProductName):
- strProductUrl = BigConsumer.getProductUrl(pStrProductName)
- bMustReloadFromWeb = self.mData == "" or \
- (self.mData != "" and self.mProduct != pStrProductName)
- return bMustReloadFromWeb
- #def mustReloadFromWeb
- def getClosingPrice (self, pStrProductName):
- bMustReload = self.mustReloadFromWeb(pStrProductName)
- if (bMustReload):
- strProductUrl = BigConsumer.getProductUrl(pStrProductName)
- strProductData = BigConsumer.urlReader(strProductUrl)
- self.mData = strProductData
- self.mProduct = pStrProductName
- #if
- strResult = self.extractData(BigConsumer.MARK_CLOSE_PRICE)
- return strResult
- #def getClosingPrice
- def getTicker (self, pStrProductName):
- bMustReload = self.mustReloadFromWeb(pStrProductName)
- if (bMustReload):
- strProductUrl = BigConsumer.getProductUrl(pStrProductName)
- strProductData = BigConsumer.urlReader(strProductUrl)
- self.mData = strProductData
- self.mProduct = pStrProductName
- # if
- strResult = self.extractData(BigConsumer.MARK_TICKER)
- return strResult
- #def getTicker
- #"Linda".find("i") #1
- def extractData(self, pStrMark):
- if (self.mData!=""):
- indexRelevantStart = self.mData.find(pStrMark)
- if (indexRelevantStart!=-1):
- strRelevant = self.mData[
- indexRelevantStart + len(pStrMark) #to exclude the mark itself
- :
- ]
- #"Artur"[1:3] -> "rt"
- indexWhereRelevantEnds = strRelevant.find("</")
- if (indexWhereRelevantEnds!=-1):
- strWanted = strRelevant[
- 0
- :
- indexWhereRelevantEnds
- ]
- return strWanted
- #if there is an end
- #if there is a start
- #if there is self.mData
- return False
- #def extractData
- #class BigConsumer
- c1 = BigConsumer(Markets.PSI20)
- print(BigConsumer.getProducts())
- print(BigConsumer.getProductUrl("ALTRI"))
- print(BigConsumer.getProductUrl("BCP"))
- print(BigConsumer.getProductUrl("SONAE"))
- print(BigConsumer.getProductUrl("ZON"))
- print (c1.getClosingPrice("SONAE"))
- print (c1.getTicker("ZON"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement