diff options
author | ue86388 <dmitrii.morozov@sbb.ch> | 2024-03-21 17:00:27 +0100 |
---|---|---|
committer | ue86388 <dmitrii.morozov@sbb.ch> | 2024-03-21 17:00:27 +0100 |
commit | 49ded4f6a3f6fd4dadb5a579e84147c7e6dd4c36 (patch) | |
tree | 956d42227251a4e65f187bd44fa3c5c4b4c6a6d4 /fortnite-status.py |
Initial
Diffstat (limited to 'fortnite-status.py')
-rw-r--r-- | fortnite-status.py | 68 |
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 |