From c7383877978c98d297fa3468a2633be781045b41 Mon Sep 17 00:00:00 2001 From: wirthual Date: Tue, 18 Jun 2024 04:09:37 +0200 Subject: [PATCH 1/2] add lebensmitteltest update --- .../lebensmittelwarnung.py | 59 ++++++-------- tests/lebensmittelwarnung_test.py | 77 +++++++++++++++---- 2 files changed, 84 insertions(+), 52 deletions(-) diff --git a/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py b/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py index 3433efc..43286dc 100644 --- a/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py +++ b/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py @@ -15,33 +15,34 @@ 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" + "https://www.lebensmittelwarnung.de/___LMW-Redaktion/RSSNewsfeed/Functions/RssFeeds/rssnewsfeed_Alle_DE.xml?nn=314268{0}{1}" ) def __init__(self, content: str, region: str): @@ -49,6 +50,17 @@ def __init__(self, content: str, region: str): 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,34 +129,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 From 58b32dea0db0bb5baf14962001f833c56bb4a462 Mon Sep 17 00:00:00 2001 From: wirthual Date: Tue, 18 Jun 2024 04:11:43 +0200 Subject: [PATCH 2/2] format --- .../lebensmittelwarnung.py | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py b/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py index 43286dc..84cf9fd 100644 --- a/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py +++ b/src/deutschland/lebensmittelwarnung/lebensmittelwarnung.py @@ -18,7 +18,7 @@ class WarningFeedUrl: "kosmetischemittel", "bedarfsgegenstaende", "mittelzumtaetowieren", - "babyundkinderprodukte" + "babyundkinderprodukte", ] VALID_REGION_SELECTORS = [ @@ -41,25 +41,22 @@ class WarningFeedUrl: "thueringen", ] - SOURCE_STRING = ( - "https://www.lebensmittelwarnung.de/___LMW-Redaktion/RSSNewsfeed/Functions/RssFeeds/rssnewsfeed_Alle_DE.xml?nn=314268{0}{1}" - ) + 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="" + if content == "alle": + content = "" else: - content=f"&type={content}" + content = f"&type={content}" - if region=="alle_bundeslaender": - region="" + if region == "alle_bundeslaender": + region = "" else: - region=f"&state={region}" - + region = f"&state={region}" self.url = self.SOURCE_STRING.format(content, region) else: @@ -132,8 +129,9 @@ def __parse(self, warning_raw: PageElement) -> str: self.dict["guid"] = guid self.dict["pubDate"] = warning_raw.find("pubDate").text self.dict["description"] = warning_raw.find("description").text - self.dict["link"]=guid + self.dict["link"] = guid self.dict["title"] = warning_raw.find("title").text + def get_warning(self) -> dict: return self.dict