Advertisement
am_dot_com

IA 2021-12-06

Dec 6th, 2021 (edited)
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.45 KB | None | 0 0
  1. #BigConsumer.py
  2. """
  3. Enum
  4. OOP => dynamic + static
  5. data consumption => price + ticker
  6. """
  7.  
  8. from enum import IntEnum
  9. from urllib.request import urlopen
  10.  
  11. class Markets(IntEnum):
  12. PSI20 = 1
  13. IBEX35 = 2
  14. CAC40 = 3
  15. XETRA = 4
  16. #TODO
  17.  
  18. @staticmethod
  19. def contains(pMarket):
  20. if (pMarket==1 or pMarket==2 or pMarket==3 or pMarket==4):
  21. return True
  22. return False
  23. #class Markets
  24.  
  25. class BigConsumer:
  26. BASE_URL = \
  27. "https://big.pt/Reports/StockInfo/StockInfoDetails/"
  28.  
  29. #<span class="stock-item-closePrice">5,21 EUR</span>
  30. #<h3 class="dark-grey show" id="H3">ALTRI SGPS (ALTR)</h3>
  31.  
  32. MARK_CLOSE_PRICE = "<span class=\"stock-item-closePrice\">"
  33. MARK_TICKER = "<h3 class=\"dark-grey show\" id=\"H3\">"
  34.  
  35. def __init__(self, pMarket):
  36. #if (Markets.contains(pMarket)): #TODO
  37. self.mMarket = pMarket
  38. self.mData = ""
  39. self.mProduct = ""
  40. #def __init__
  41.  
  42. @staticmethod
  43. def getProducts():
  44. dictSupportedProducts = {}
  45. dictSupportedProducts["ALTRI"]="ALT%20AE"
  46. dictSupportedProducts["BCP"]="BCP%20AM"
  47. dictSupportedProducts["SONAE"]="SON%20AM"
  48. dictSupportedProducts["ZON"]="ZON%20AM"
  49. return dictSupportedProducts
  50. #def getProducts
  51.  
  52. @staticmethod
  53. def getProductUrl (pStrProductName):
  54. dictProducts = BigConsumer.getProducts()
  55. keysProducts = dictProducts.keys()
  56. bValid = pStrProductName in list(keysProducts)
  57. if (bValid):
  58. strBigSpecificValue = dictProducts[pStrProductName]
  59. strUrl = "%s%s"%(
  60. BigConsumer.BASE_URL,
  61. strBigSpecificValue
  62. )
  63. return strUrl
  64. #if
  65. return False
  66. #def getProductUrl
  67.  
  68. @staticmethod
  69. def urlReader(pStrUrl):
  70. requester = urlopen(pStrUrl)
  71. bytesData = requester.read() #bytes!
  72. strData = bytesData.decode("UTF-8")
  73. return strData
  74. #def urlReader
  75.  
  76. def mustReloadFromWeb(self, pStrProductName):
  77. strProductUrl = BigConsumer.getProductUrl(pStrProductName)
  78. bMustReloadFromWeb = self.mData == "" or \
  79. (self.mData != "" and self.mProduct != pStrProductName)
  80. return bMustReloadFromWeb
  81. #def mustReloadFromWeb
  82.  
  83.  
  84. def getClosingPrice (self, pStrProductName):
  85. bMustReload = self.mustReloadFromWeb(pStrProductName)
  86. if (bMustReload):
  87. strProductUrl = BigConsumer.getProductUrl(pStrProductName)
  88. strProductData = BigConsumer.urlReader(strProductUrl)
  89. self.mData = strProductData
  90. self.mProduct = pStrProductName
  91. #if
  92. strResult = self.extractData(BigConsumer.MARK_CLOSE_PRICE)
  93. return strResult
  94. #def getClosingPrice
  95.  
  96. def getTicker (self, pStrProductName):
  97. bMustReload = self.mustReloadFromWeb(pStrProductName)
  98. if (bMustReload):
  99. strProductUrl = BigConsumer.getProductUrl(pStrProductName)
  100. strProductData = BigConsumer.urlReader(strProductUrl)
  101. self.mData = strProductData
  102. self.mProduct = pStrProductName
  103. # if
  104. strResult = self.extractData(BigConsumer.MARK_TICKER)
  105. return strResult
  106. #def getTicker
  107.  
  108. #"Linda".find("i") #1
  109. def extractData(self, pStrMark):
  110. if (self.mData!=""):
  111. indexRelevantStart = self.mData.find(pStrMark)
  112. if (indexRelevantStart!=-1):
  113. strRelevant = self.mData[
  114. indexRelevantStart + len(pStrMark) #to exclude the mark itself
  115. :
  116. ]
  117.  
  118. #"Artur"[1:3] -> "rt"
  119. indexWhereRelevantEnds = strRelevant.find("</")
  120. if (indexWhereRelevantEnds!=-1):
  121. strWanted = strRelevant[
  122. 0
  123. :
  124. indexWhereRelevantEnds
  125. ]
  126. return strWanted
  127. #if there is an end
  128. #if there is a start
  129. #if there is self.mData
  130. return False
  131. #def extractData
  132. #class BigConsumer
  133.  
  134. c1 = BigConsumer(Markets.PSI20)
  135. print(BigConsumer.getProducts())
  136. print(BigConsumer.getProductUrl("ALTRI"))
  137. print(BigConsumer.getProductUrl("BCP"))
  138. print(BigConsumer.getProductUrl("SONAE"))
  139. print(BigConsumer.getProductUrl("ZON"))
  140. print (c1.getClosingPrice("SONAE"))
  141. print (c1.getTicker("ZON"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement