diff --git a/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py b/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py
index 3433efc..84cf9fd 100644
--- a/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py
+++ b/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py
@@ -15,40 +15,49 @@ class WarningFeedUrl:
VALID_CONTENT_SELECTORS = [
"alle",
"lebensmittel",
- "kosmetische+mittel",
+ "kosmetischemittel",
"bedarfsgegenstaende",
- "mittel+zum+taetowieren",
+ "mittelzumtaetowieren",
+ "babyundkinderprodukte",
]
VALID_REGION_SELECTORS = [
"alle_bundeslaender",
- "baden_wuerttemberg",
+ "badenwuerttemberg",
"bayern",
"berlin",
"brandenburg",
"bremen",
"hamburg",
"hessen",
- "mecklenburg_vorpommern",
+ "mecklenburgvorpommern",
"niedersachsen",
- "nordrhein_westfalen",
- "rheinland_pfalz",
+ "nordrheinwestfalen",
+ "rheinlandpfalz",
"saarland",
"sachsen",
- "sachsen_anhalt",
- "schleswig_holstein",
+ "sachsenanhalt",
+ "schleswigholstein",
"thueringen",
]
- SOURCE_STRING = (
- "https://www.lebensmittelwarnung.de/bvl-lmw-de/opensaga/feed/{0}/{1}.rss"
- )
+ SOURCE_STRING = "https://www.lebensmittelwarnung.de/___LMW-Redaktion/RSSNewsfeed/Functions/RssFeeds/rssnewsfeed_Alle_DE.xml?nn=314268{0}{1}"
def __init__(self, content: str, region: str):
if (
content in self.VALID_CONTENT_SELECTORS
and region in self.VALID_REGION_SELECTORS
):
+ if content == "alle":
+ content = ""
+ else:
+ content = f"&type={content}"
+
+ if region == "alle_bundeslaender":
+ region = ""
+ else:
+ region = f"&state={region}"
+
self.url = self.SOURCE_STRING.format(content, region)
else:
raise ValueError(
@@ -117,33 +126,11 @@ def __init__(self, warning_raw: PageElement):
def __parse(self, warning_raw: PageElement) -> str:
guid = warning_raw.find("guid").text
- self.dict["id"] = int(guid.split("/")[-1])
self.dict["guid"] = guid
self.dict["pubDate"] = warning_raw.find("pubDate").text
-
- cdata_soup = BeautifulSoup(
- # use description instead of content:encoded, wierd parsing issue
- warning_raw.find("description").text,
- "html.parser",
- )
- image_elem = cdata_soup.find("img")
- if image_elem:
- self.dict["imgSrc"] = image_elem["src"]
- content_attrs = cdata_soup.find_all("b")
- for attr in content_attrs:
- attr_name = attr.text
- attr_value = str(attr.next_sibling).strip()
- if attr_name == "Produktbezeichnung:":
- self.dict["title"] = attr_value
- elif attr_name == "Typ:":
- self.dict["type"] = attr_value
- elif attr_name == "Hersteller (Inverkehrbringer):":
- self.dict["manufacturer"] = attr_value
- elif attr_name == "Grund der Warnung:":
- self.dict["warning"] = attr_value
- elif attr_name == "Betroffene Länder:":
- affected_arr = [x.strip() for x in attr_value.split(",")]
- self.dict["affectedStates"] = affected_arr
+ self.dict["description"] = warning_raw.find("description").text
+ self.dict["link"] = guid
+ self.dict["title"] = warning_raw.find("title").text
def get_warning(self) -> dict:
return self.dict
diff --git a/tests/lebensmittelwarnung_test.py b/tests/lebensmittelwarnung_test.py
index a9f1f42..9f32ced 100644
--- a/tests/lebensmittelwarnung_test.py
+++ b/tests/lebensmittelwarnung_test.py
@@ -46,9 +46,7 @@ def test_lebensmittelwarnung_warningfeedurl_create():
Checks if the WarningFeedUrl() works correctly.
"""
url = WarningFeedUrl("alle", "berlin").get_url()
- correct_url = (
- "https://www.lebensmittelwarnung.de/bvl-lmw-de/opensaga/feed/alle/berlin.rss"
- )
+ correct_url = "https://www.lebensmittelwarnung.de/___LMW-Redaktion/RSSNewsfeed/Functions/RssFeeds/rssnewsfeed_Alle_DE.xml?nn=314268&state=berlin"
assert url == correct_url, "WarningFeedUrl creation failed (result: " + url + ")"
@@ -56,17 +54,13 @@ def test_lebensmittelwarnung_warning_parsing():
"""
Checks if the Warning parsing works correctly.
"""
- warning_raw_string = '- TITLE https://www.lebensmittelwarnung.de/bvl-lmw-de/detail/lebensmittel/1
Produktbezeichnung: TITLE
Typ: TYPE
Hersteller (Inverkehrbringer): MANUFACTURER
Grund der Warnung: WARNING
Betroffene Länder: STATE A, STATE B
]]>
Produktbezeichnung: TITLE
Typ: TYPE
Hersteller (Inverkehrbringer): MANUFACTURER
Grund der Warnung: WARNING
Betroffene Länder: STATE A, STATE B
]]> Wed, 08 Sep 2021 10:00:00 +0000 https://www.lebensmittelwarnung.de/bvl-lmw-de/detail/lebensmittel/1 '
+ warning_raw_string = "- Spirit Motors Johnny Bglove Lederhandschuh Kurzhttps://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240614_10_NW_Handschuhe/240614_NW_Handschuhe_Meldung.htmlFri, 14 Jun 2024 14:12:17 +0200https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240614_10_NW_Handschuhe/240614_NW_Handschuhe_Meldung.html
"
warning_correct = {
- "id": 1,
- "guid": "https://www.lebensmittelwarnung.de/bvl-lmw-de/detail/lebensmittel/1",
- "pubDate": "Wed, 08 Sep 2021 10:00:00 +0000",
- "imgSrc": "IMG_URL",
- "title": "TITLE",
- "type": "TYPE",
- "manufacturer": "MANUFACTURER",
- "warning": "WARNING",
- "affectedStates": ["STATE A", "STATE B"],
+ "guid": "https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240614_10_NW_Handschuhe/240614_NW_Handschuhe_Meldung.html",
+ "pubDate": "Fri, 14 Jun 2024 14:12:17 +0200",
+ "title": "Spirit Motors Johnny Bglove Lederhandschuh Kurz",
+ "link": "https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240614_10_NW_Handschuhe/240614_NW_Handschuhe_Meldung.html",
+ "description": "",
}
warning_raw = BeautifulSoup(warning_raw_string, "xml").find("item")
warning = Warning(warning_raw).get_warning()
@@ -79,12 +73,61 @@ def test_lebensmittelwarnung_warningfeed_parsing():
"""
Checks if the WarningFeed parsing works correctly.
"""
- item_count = 5
- warning_raw_item = '- TITLE https://www.lebensmittelwarnung.de/bvl-lmw-de/detail/lebensmittel/1
Produktbezeichnung: TITLE
Typ: TYPE
Hersteller (Inverkehrbringer): MANUFACTURER
Grund der Warnung: WARNING
Betroffene Länder: STATE A, STATE B
]]>
Produktbezeichnung: TITLE
Typ: TYPE
Hersteller (Inverkehrbringer): MANUFACTURER
Grund der Warnung: WARNING
Betroffene Länder: STATE A, STATE B
]]> Wed, 08 Sep 2021 10:00:00 +0000 https://www.lebensmittelwarnung.de/bvl-lmw-de/detail/lebensmittel/1 '
+ item_count = 7
+ warning_raw_item = """
+ -
+ Spirit Motors Johnny Bglove Lederhandschuh Kurz
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240614_10_NW_Handschuhe/240614_NW_Handschuhe_Meldung.html
+ Fri, 14 Jun 2024 14:12:17 +0200
+
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240614_10_NW_Handschuhe/240614_NW_Handschuhe_Meldung.html
+
+ -
+ Hähnchengeschnetzeltes in Champignon – Rahmsauce mit Spiralnudeln 400 Gramm
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240614_12_BY_Haenchengeschnetzeltes/240614_11_BY_Haenchengeschnetzeltes.html
+ Fri, 14 Jun 2024 10:23:00 +0200
+ 27.07.24: K219193; 01.08.24: K219194, K219195; 30.07.24: K226282, K226281, K232681
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240614_12_BY_Haenchengeschnetzeltes/240614_11_BY_Haenchengeschnetzeltes.html
+
+ -
+ Alpina Nylon Küchenzubehör
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240610_08_NW_Kuechenzubehoer/240610_NW_Kuechenzubehoer_Meldung.html
+ Mon, 10 Jun 2024 16:00:00 +0200
+ alle
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240610_08_NW_Kuechenzubehoer/240610_NW_Kuechenzubehoer_Meldung.html
+
+ -
+ Diverse Salamiprodukte
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240607_07_SH_diverse_Salamiprodukte/240607_1_SH_diverse_Salamiprodukte.html
+ Mon, 10 Jun 2024 07:12:12 +0200
+
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240607_07_SH_diverse_Salamiprodukte/240607_1_SH_diverse_Salamiprodukte.html
+
+ -
+ Gel Mouse Pad
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240606_05_NW_Mousepad/240606_NW_Mousepad_Meldung.html
+ Thu, 6 Jun 2024 11:23:00 +0200
+
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240606_05_NW_Mousepad/240606_NW_Mousepad_Meldung.html
+
+ -
+ Thüringer Knacker 4x75g (300g)
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240605_03_TH_Thueringer_Knacker/240605_TH_Thueringer_Knacker.html
+ Wed, 5 Jun 2024 10:12:00 +0200
+ 982203
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/06_Juni/240605_03_TH_Thueringer_Knacker/240605_TH_Thueringer_Knacker.html
+
+ -
+ Honig Herbal Paste
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/05_Mai/240529_6_BW_Honig_Paste/240529_6_BW_Honig_Paste.html
+ Wed, 29 May 2024 19:00:00 +0200
+ Alle Chargen
+ https://www.lebensmittelwarnung.de/___lebensmittelwarnung.de/Meldungen/2024/05_Mai/240529_6_BW_Honig_Paste/240529_6_BW_Honig_Paste.html
+
+ """
warning_raw_pre = ""
warning_raw_post = ""
- warning_raw = warning_raw_pre + (warning_raw_item * item_count) + warning_raw_post
- print(warning_raw)
+ warning_raw = warning_raw_pre + (warning_raw_item) + warning_raw_post
feed = WarningFeed(warning_raw).get_output()
assert (
len(feed) == item_count