summaryrefslogtreecommitdiff
path: root/fortnite-status.py
diff options
context:
space:
mode:
authorue86388 <dmitrii.morozov@sbb.ch>2024-03-21 17:00:27 +0100
committerue86388 <dmitrii.morozov@sbb.ch>2024-03-21 17:00:27 +0100
commit49ded4f6a3f6fd4dadb5a579e84147c7e6dd4c36 (patch)
tree956d42227251a4e65f187bd44fa3c5c4b4c6a6d4 /fortnite-status.py
Initial
Diffstat (limited to 'fortnite-status.py')
-rw-r--r--fortnite-status.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/fortnite-status.py b/fortnite-status.py
new file mode 100644
index 0000000..cd37fec
--- /dev/null
+++ b/fortnite-status.py
@@ -0,0 +1,68 @@
+# Simple utility class which provides an access to Fortnite service status report.
+# Usage: ForniteStatus().getStatus()
+
+import requests as req
+import html5lib
+from bs4 import BeautifulSoup
+
+class FortniteStatus:
+ """
+ Instantiate a FortniteStatus class.
+ """
+
+ class Status:
+ serviceStatuses = []
+
+ def prettify(self):
+ return 'Fortnite services status:\n' + '\n'.join([serviceStatus.prettify() for serviceStatus in self.serviceStatuses])
+
+ class ServiceStatus:
+ serviceName = ''
+ status = False
+
+ def __init__(self, serviceName, status):
+ self.serviceName = serviceName
+ self.status = status
+
+ def prettify(self):
+ return f'{self.serviceName}, {self.status}'
+
+ def __findFortniteStatusHtmlComponent(self, html):
+ for component in html.findAll('div', {'class': 'component-container'}):
+ innerContainers = component.findAll('div', {'class': 'component-inner-container'})
+ for innerContainer in innerContainers:
+ for names in innerContainer.findAll('span', {'class': 'name'}):
+ for name in names.findAll('span'):
+ if 'class' not in name.attrs and 'Fortnite' in name.text:
+ return component
+
+ def __parseFortniteStatus(self, html):
+ component = self.__findFortniteStatusHtmlComponent(html)
+ status = self.Status()
+ childContainer = component.find('div', {'class': 'child-components-container'})
+ for innerContainer in childContainer.findAll('div', {'class': 'component-inner-container'}):
+ name = innerContainer.find('span', {'class': 'name'}).text.strip()
+ statusString = innerContainer.find('span', {'class': 'component-status'}).text.strip()
+ if statusString == 'Operational':
+ statusCode = True
+ else:
+ statusCode = False
+ status.serviceStatuses.append(self.ServiceStatus(name, statusCode))
+
+ return status
+
+ def getStatus(self):
+ webContent = req.get("https://status.epicgames.com/")
+ parsedHtml = BeautifulSoup(webContent.text, 'html5lib')
+
+ return self.__parseFortniteStatus(parsedHtml)
+
+
+
+ def printStatus(self):
+ """
+ Prints a current Fortnite services status in stdout.
+ Example:
+
+ """
+ print(self.generateFortniteStatusReport()) \ No newline at end of file