summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDmitri Morozov <snoopdesigns@gmail.com>2024-02-02 20:33:04 +0100
committerue86388 <dmitrii.morozov@sbb.ch>2024-02-02 20:33:04 +0100
commit30ab3ef9aeb30dbe11f4645be31fb439fd139531 (patch)
treecb640c33f12b699e3b0b57783da5fcd53ba9fbf7 /scripts
parente6e82e4fdff005872ca0793983334be4650a8cba (diff)
Fortnite status
Diffstat (limited to 'scripts')
-rw-r--r--scripts/fortnite-status.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/scripts/fortnite-status.py b/scripts/fortnite-status.py
new file mode 100644
index 0000000..3c0e33b
--- /dev/null
+++ b/scripts/fortnite-status.py
@@ -0,0 +1,72 @@
+# 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())
+
+# Example call
+fortniteStatus = FortniteStatus()
+print(fortniteStatus.getStatus().prettify()) \ No newline at end of file