8 Commits

Author SHA1 Message Date
Adrian Rumpold
fc5f6e7c93 Merge pull request #11 from AdrianoKF/10-negative-first-vaccination-doses
Fix for negative number of first vaccination doses
2021-11-11 19:56:00 +01:00
Adrian Rumpold
fa052cdfc9 chore: Bump version number for release 2021-11-11 19:51:26 +01:00
Adrian Rumpold
f6f799e85f fix(crawler): Fix invalid calculation of number of first vaccinations
Numbers for second shot are actually inclusive of booster
shots, so booster shots do not
have to be subtracted from the
total number of vaccinations.

Fixes #10.
2021-11-11 19:50:44 +01:00
Adrian Rumpold
a44308a4e1 Merge pull request #9 from AdrianoKF/8-new-vaccination-report-format
Support new vaccination report format
2021-10-09 14:02:52 +02:00
Adrian Rumpold
dd5bb2916b chore: Bump manifest version number 2021-10-09 14:00:12 +02:00
Adrian Rumpold
67bb1e49ef feat(parser): Support new vaccination report format
Closes #8
2021-10-09 13:59:09 +02:00
Adrian Rumpold
aaea39657e Merge pull request #7 from AdrianoKF/6-integer-incidence-parse-failure
Correctly handle incidence values without decimals
2021-09-20 07:54:05 +02:00
Adrian Rumpold
81c19b552d fix(parser): Correctly handle incidence values without decimals
Closes #6
2021-09-20 07:51:52 +02:00
3 changed files with 30 additions and 18 deletions

View File

@@ -59,10 +59,12 @@ class VaccinationData:
total_vaccinations: int = 0 total_vaccinations: int = 0
num_vaccinated_once: int = 0 num_vaccinated_once: int = 0
num_vaccinated_full: int = 0 num_vaccinated_full: int = 0
num_vaccinated_booster: int = 0
ratio_vaccinated_once: float = 0.0 ratio_vaccinated_once: float = 0.0
ratio_vaccinated_full: float = 0.0 ratio_vaccinated_full: float = 0.0
ratio_vaccinated_total: float = 0.0 ratio_vaccinated_total: float = 0.0
ratio_vaccinated_booster: float = 0.0
class CovidCrawlerBase(ABC): class CovidCrawlerBase(ABC):
@@ -111,7 +113,7 @@ class CovidCrawler(CovidCrawlerBase):
text = match.text.strip() text = match.text.strip()
_log.debug(f"Infection data text: {text}") _log.debug(f"Infection data text: {text}")
matches = re.search(r"(\d+,\d+)\sNeuinfektion", text) matches = re.search(r"(\d+(,\d+)?)\sNeuinfektion", text)
if not matches: if not matches:
raise ValueError( raise ValueError(
f"Could not extract incidence from scraped web page, {text=}" f"Could not extract incidence from scraped web page, {text=}"
@@ -165,9 +167,9 @@ class CovidCrawler(CovidCrawlerBase):
result = soup.find(id=container_id) result = soup.find(id=container_id)
text = re.sub(r"\s+", " ", result.text) text = re.sub(r"\s+", " ", result.text)
regexes = [ regexes = [
r"(?P<total_vaccinations>\d+[.]\d+) Impfdosen", r"(?P<total_vaccinations>\d+([.]\d+)?) Personen in Augsburg mindestens",
r"Weitere (?P<num_vaccinated_once>\d+[.]\d+) Personen haben die Erstimpfung erhalten", r"(?P<num_vaccinated_full>\d+([.]\d+)?) Personen sind mindestens zweimal geimpft",
r"(?P<num_vaccinated_full>\d+[.]\d+) Personen sind bereits vollständig geimpft", r"(?P<num_vaccinated_booster>\d+([.]\d+)?) Personen haben eine Auffrischungsimpfung",
] ]
values = {} values = {}
for r in regexes: for r in regexes:
@@ -185,18 +187,24 @@ class CovidCrawler(CovidCrawlerBase):
if not matches: if not matches:
raise ValueError(f"Could not extract date from scraped web page, {text=}") raise ValueError(f"Could not extract date from scraped web page, {text=}")
values["num_vaccinated_once"] = (
values["total_vaccinations"] - values["num_vaccinated_full"]
)
values["date"] = parse_date(**matches.groupdict()).strftime("%Y-%m-%d") values["date"] = parse_date(**matches.groupdict()).strftime("%Y-%m-%d")
result = VaccinationData(**values) result = VaccinationData(**values)
# Total population in Augsburg as of 2020 # Total population in Augsburg as listed on the crawled page
# https://www.augsburg.de/fileadmin/user_upload/buergerservice_rathaus/rathaus/statisiken_und_geodaten/statistiken/Monitoring/Demografiemonitoring_der_Stadt_Augsburg_2021.pdf population = 298014
population = 299021
result.ratio_vaccinated_full = result.num_vaccinated_full / population * 100 result.ratio_vaccinated_full = result.num_vaccinated_full / population * 100
result.ratio_vaccinated_once = result.num_vaccinated_once / population * 100 result.ratio_vaccinated_once = result.num_vaccinated_once / population * 100
result.ratio_vaccinated_total = ( result.ratio_vaccinated_total = (
result.ratio_vaccinated_once + result.ratio_vaccinated_full result.ratio_vaccinated_once + result.ratio_vaccinated_full
) )
result.ratio_vaccinated_booster = (
result.num_vaccinated_booster / population * 100
)
_log.debug(f"Result data: {result}") _log.debug(f"Result data: {result}")
return result return result

View File

@@ -1,11 +1,15 @@
{ {
"domain": "covid19_augsburg", "domain": "covid19_augsburg",
"name": "COVID-19 Augsburg", "name": "COVID-19 Augsburg",
"version": "1.1.2", "version": "1.2.1",
"config_flow": true, "config_flow": true,
"documentation": "https://github.com/AdrianoKF/home-assistant-covid19-augsburg", "documentation": "https://github.com/AdrianoKF/home-assistant-covid19-augsburg",
"issue_tracker": "https://github.com/AdrianoKF/home-assistant-covid19-augsburg/issues", "issue_tracker": "https://github.com/AdrianoKF/home-assistant-covid19-augsburg/issues",
"requirements": ["beautifulsoup4==4.8.2"], "requirements": [
"dependencies": [], "beautifulsoup4==4.8.2"
"codeowners": ["@AdrianoKF"] ],
} "dependencies": [],
"codeowners": [
"@AdrianoKF"
]
}

View File

@@ -1,6 +1,6 @@
[tool.poetry] [tool.poetry]
name = "home_assistant_covid19_augsburg" name = "home_assistant_covid19_augsburg"
version = "0.1.0" version = "1.2.1"
description = "" description = ""
authors = ["Adrian Rumpold <a.rumpold@gmail.com>"] authors = ["Adrian Rumpold <a.rumpold@gmail.com>"]
packages = [ packages = [