From b9b448411cee865d3a661d1379bea2e24a3f28b6 Mon Sep 17 00:00:00 2001 From: frankknoll Date: Tue, 8 Mar 2022 11:47:50 +0100 Subject: [PATCH] refactoring --- src/intensivstationen/Intensivstationen.ipynb | 101 +++++++++--------- 1 file changed, 49 insertions(+), 52 deletions(-) diff --git a/src/intensivstationen/Intensivstationen.ipynb b/src/intensivstationen/Intensivstationen.ipynb index c493b153f4a..c1c3680db33 100644 --- a/src/intensivstationen/Intensivstationen.ipynb +++ b/src/intensivstationen/Intensivstationen.ipynb @@ -40,65 +40,62 @@ "\n", "INTENSIVSTATIONEN_DATE_FORMAT = \"%d.%m.%Y, %H:%M Uhr\"\n", "\n", - "def needsUpdate():\n", - " lastUpdatedIntensivstationen = _getLastUpdatedIntensivstationen()\n", - " print('lastUpdatedIntensivstationen:', lastUpdatedIntensivstationen)\n", + "class DateProvider:\n", " \n", - " lastUpdatedOriginal = _getLastUpdatedOriginal()\n", - " print('lastUpdatedOriginal:', lastUpdatedOriginal)\n", - " \n", - " return lastUpdatedIntensivstationen < lastUpdatedOriginal\n", - " \n", - "def _getLastUpdatedIntensivstationen():\n", - " htmlContent = requests.get(\"https://knollfrank.github.io/HowBadIsMyBatch/intensivstationen.html\").text\n", - " soup = BeautifulSoup(htmlContent, \"lxml\")\n", - " dateStr = soup.find(id = \"Datenstand\").text\n", - " return datetime.strptime(dateStr, INTENSIVSTATIONEN_DATE_FORMAT)\n", + " def __init__(self):\n", + " self.lastUpdatedIntensivstationen = None\n", + " self.lastUpdatedOriginal = None\n", "\n", - "def _getLastUpdatedOriginal():\n", - " html = _getOriginalHtml()\n", - " lastUpdatedColumn = 'Letzte Änderung'\n", - " dataFrame = _asDataFrame(html, lastUpdatedColumn)\n", - " return dataFrame.loc['Landkreis-Daten', lastUpdatedColumn].to_pydatetime()\n", + " def needsUpdate(self):\n", + " return self.getLastUpdatedIntensivstationen() < self.getLastUpdatedOriginal()\n", + " \n", + " def getLastUpdatedIntensivstationen(self):\n", + " if self.lastUpdatedIntensivstationen is None:\n", + " htmlContent = requests.get(\"https://knollfrank.github.io/HowBadIsMyBatch/intensivstationen.html\").text\n", + " soup = BeautifulSoup(htmlContent, \"lxml\")\n", + " dateStr = soup.find(id = \"Datenstand\").text\n", + " self.lastUpdatedIntensivstationen = datetime.strptime(dateStr, INTENSIVSTATIONEN_DATE_FORMAT)\n", + " \n", + " return self.lastUpdatedIntensivstationen\n", "\n", - "def _getOriginalHtml():\n", - " driver = webdriver.Firefox()\n", - " driver.get('https://www.intensivregister.de/#/aktuelle-lage/downloads')\n", - " sleep(5)\n", - " innerHTML = driver.execute_script(\"return document.body.innerHTML\")\n", - " driver.quit()\n", - " return innerHTML\n", + " def getLastUpdatedOriginal(self):\n", + " if self.lastUpdatedOriginal is None:\n", + " html = self._getOriginalHtml()\n", + " lastUpdatedColumn = 'Letzte Änderung'\n", + " dataFrame = self._asDataFrame(html, lastUpdatedColumn)\n", + " self.lastUpdatedOriginal = dataFrame.loc['Landkreis-Daten', lastUpdatedColumn].to_pydatetime()\n", "\n", - "def _asDataFrame(html, lastUpdatedColumn):\n", - " dataFrame = pd.read_html(html, parse_dates = [lastUpdatedColumn])[0]\n", - " dataFrame[lastUpdatedColumn] = pd.to_datetime(dataFrame[lastUpdatedColumn], format = \"%d.%m.%Y %H:%M Uhr\")\n", - " dataFrame.set_index('Name', inplace = True)\n", - " return dataFrame\n", + " return self.lastUpdatedOriginal\n", "\n", - "needsUpdate = needsUpdate()\n", + " def _getOriginalHtml(self):\n", + " driver = webdriver.Firefox()\n", + " driver.get('https://www.intensivregister.de/#/aktuelle-lage/downloads')\n", + " sleep(10)\n", + " innerHTML = driver.execute_script(\"return document.body.innerHTML\")\n", + " driver.quit()\n", + " return innerHTML\n", + "\n", + " def _asDataFrame(self, html, lastUpdatedColumn):\n", + " dataFrame = pd.read_html(html, parse_dates = [lastUpdatedColumn])[0]\n", + " dataFrame[lastUpdatedColumn] = pd.to_datetime(dataFrame[lastUpdatedColumn], format = \"%d.%m.%Y %H:%M Uhr\")\n", + " dataFrame.set_index('Name', inplace = True)\n", + " return dataFrame\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "336f56e6", + "metadata": {}, + "outputs": [], + "source": [ + "dateProvider = DateProvider()\n", + "print('lastUpdatedIntensivstationen:', dateProvider.getLastUpdatedIntensivstationen())\n", + "print('lastUpdatedOriginal:', dateProvider.getLastUpdatedOriginal()) \n", + "needsUpdate = dateProvider.needsUpdate()\n", "print('needsUpdate: ', needsUpdate)" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "963f068b", - "metadata": {}, - "outputs": [], - "source": [ - "lastUpdatedOriginal = _getLastUpdatedOriginal()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bc48f4cf", - "metadata": {}, - "outputs": [], - "source": [ - "lastUpdatedOriginal" - ] - }, { "cell_type": "code", "execution_count": null, @@ -126,7 +123,7 @@ "metadata": {}, "outputs": [], "source": [ - "saveLastUpdatedIntensivstationen(lastUpdatedOriginal)" + "saveLastUpdatedIntensivstationen(dateProvider.getLastUpdatedOriginal())" ] }, {