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