diff --git a/README.md b/README.md
index 1d64fbc42..086a8c377 100644
--- a/README.md
+++ b/README.md
@@ -694,24 +694,46 @@ If your service provider is not listed, feel free to open a [source request issu
France
+- [Ambarès-et-Lagrave](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Ambès](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
- [Ardenne Métropole](/doc/source/publidata_fr.md) / ardenne-metropole.fr
+- [Blanquefort](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Bordeaux](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Bordeaux Métropole](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Bruges](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Bègles](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
- [Châteauroux Métropole](/doc/source/publidata_fr.md) / chateauroux-metropole.fr
- [Communauté de Communes de Montesquieu](/doc/source/cc-montesquieu_fr.md) / cc-montesquieu.fr
- [Dreux Agglomération](/doc/source/publidata_fr.md) / dreux-agglomeration.fr
- [Dunkerque Grand Littoral](/doc/source/publidata_fr.md) / mesinfosdechets.cud.fr
+- [Eysines](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Gradignan](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
- [Grand Calais Terres et Mers](/doc/source/publidata_fr.md) / grandcalais.fr
- [Grand Paris Seine et Oise](/doc/source/publidata_fr.md) / infos-dechets.gpseo.fr
- [Grand Paris Seine Ouest](/doc/source/publidata_fr.md) / dechets.seineouest.fr
+- [Le Bouscat](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Le Haillan](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Le Taillan-Médoc](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
- [Mairie de Mamirolle](/doc/source/mamirolle_info.md) / mamirolle.info
+- [Martignas-sur-Jalle](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Mérignac](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
- [Orléans Métropole](/doc/source/publidata_fr.md) / triermondechet.orleans-metropole.fr
+- [Parempuyre](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Pessac](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
- [Publidata generic source](/doc/source/publidata_fr.md) / publidata.io/fr
- [Saint Quentin en Yvelines](/doc/source/publidata_fr.md) / saint-quentin-en-yvelines.fr
+- [Saint-Aubin-de-Médoc](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Saint-Louis-de-Montferrand](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Saint-Médard-en-Jalles](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
+- [Saint-Vincent-de-Paul](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
- [Saumur Val de Loire](/doc/source/publidata_fr.md) / saumurvaldeloire.fr
- [Sivom Rive Droite - Bassens](/doc/source/sivom_rivedroite_fr.md) / sivom-rivedroite.fr
+- [Talence](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
- [Tours Métropole](/doc/source/publidata_fr.md) / tours-metropole.fr
- [ValDem](/doc/source/publidata_fr.md) / valdem.fr
- [ValEco](/doc/source/publidata_fr.md) / valeco41.fr
- [Versailles Grand Parc](/doc/source/publidata_fr.md) / versaillesgrandparc.fr
+- [Villenave-d'Ornon](/doc/source/opendata_bordeauxmetropole_fr.md) / opendata.bordeaux-metropole.fr
diff --git a/custom_components/waste_collection_schedule/sources.json b/custom_components/waste_collection_schedule/sources.json
index 3d76e6209..12caa680d 100644
--- a/custom_components/waste_collection_schedule/sources.json
+++ b/custom_components/waste_collection_schedule/sources.json
@@ -3966,6 +3966,22 @@
}
],
"France": [
+ {
+ "title": "Ambar\u00e8s-et-Lagrave",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Ambar\u00e8s-et-Lagrave"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Amb\u00e8s",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Amb\u00e8s"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
{
"title": "Ardenne M\u00e9tropole",
"module": "publidata_fr",
@@ -3974,6 +3990,44 @@
},
"id": "publidata_fr"
},
+ {
+ "title": "Blanquefort",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Blanquefort"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Bordeaux",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Bordeaux"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Bordeaux M\u00e9tropole",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {},
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Bruges",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Bruges"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "B\u00e8gles",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "B\u00e8gles"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
{
"title": "Ch\u00e2teauroux M\u00e9tropole",
"module": "publidata_fr",
@@ -4004,6 +4058,22 @@
},
"id": "publidata_fr"
},
+ {
+ "title": "Eysines",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Eysines"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Gradignan",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Gradignan"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
{
"title": "Grand Calais Terres et Mers",
"module": "publidata_fr",
@@ -4028,12 +4098,52 @@
},
"id": "publidata_fr"
},
+ {
+ "title": "Le Bouscat",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Le Bouscat"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Le Haillan",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Le Haillan"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Le Taillan-M\u00e9doc",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Le Taillan-M\u00e9doc"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
{
"title": "Mairie de Mamirolle",
"module": "mamirolle_info",
"default_params": {},
"id": "mamirolle_info"
},
+ {
+ "title": "Martignas-sur-Jalle",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Martignas-sur-Jalle"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "M\u00e9rignac",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "M\u00e9rignac"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
{
"title": "Orl\u00e9ans M\u00e9tropole",
"module": "publidata_fr",
@@ -4042,6 +4152,22 @@
},
"id": "publidata_fr"
},
+ {
+ "title": "Parempuyre",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Parempuyre"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Pessac",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Pessac"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
{
"title": "Publidata generic source",
"module": "publidata_fr",
@@ -4056,6 +4182,38 @@
},
"id": "publidata_fr"
},
+ {
+ "title": "Saint-Aubin-de-M\u00e9doc",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Saint-Aubin-de-M\u00e9doc"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Saint-Louis-de-Montferrand",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Saint-Louis-de-Montferrand"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Saint-M\u00e9dard-en-Jalles",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Saint-M\u00e9dard-en-Jalles"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
+ {
+ "title": "Saint-Vincent-de-Paul",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Saint-Vincent-de-Paul"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
{
"title": "Saumur Val de Loire",
"module": "publidata_fr",
@@ -4070,6 +4228,14 @@
"default_params": {},
"id": "sivom_rivedroite_fr"
},
+ {
+ "title": "Talence",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Talence"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
+ },
{
"title": "Tours M\u00e9tropole",
"module": "publidata_fr",
@@ -4101,6 +4267,14 @@
"instance_id": 251
},
"id": "publidata_fr"
+ },
+ {
+ "title": "Villenave-d'Ornon",
+ "module": "opendata_bordeauxmetropole_fr",
+ "default_params": {
+ "city": "Villenave-d'Ornon"
+ },
+ "id": "opendata_bordeauxmetropole_fr"
}
],
"Generic": [
diff --git a/custom_components/waste_collection_schedule/translations/de.json b/custom_components/waste_collection_schedule/translations/de.json
index 5c138104a..7f7d3c890 100644
--- a/custom_components/waste_collection_schedule/translations/de.json
+++ b/custom_components/waste_collection_schedule/translations/de.json
@@ -2757,6 +2757,33 @@
},
"data_description": {}
},
+ "args_opendata_bordeauxmetropole_fr": {
+ "title": "Quelle konfigurieren",
+ "description": "Konfiguriere deinen Service Provider. Mehr details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/opendata_bordeauxmetropole_fr.md",
+ "data": {
+ "calendar_title": "Kalender Titel",
+ "address": "Addresse",
+ "city": "Stadt"
+ },
+ "data_description": {
+ "calendar_title": "Ein lesbarerer oder benutzerfreundlicherer Name für den Müllkalender. Wenn nichts angegeben wird, wird der Name der Quelle verwendet.",
+ "address": "Ihre vollständige Adresse",
+ "city": "Ihre Stadt"
+ }
+ },
+ "reconfigure_opendata_bordeauxmetropole_fr": {
+ "title": "Quelle Neu Konfigurieren",
+ "description": "Konfiguriere deinen Service Provider. Mehr details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/opendata_bordeauxmetropole_fr.md",
+ "data": {
+ "calendar_title": "Kalender Titel",
+ "address": "Addresse",
+ "city": "Stadt"
+ },
+ "data_description": {
+ "address": "Ihre vollständige Adresse",
+ "city": "Ihre Stadt"
+ }
+ },
"args_publidata_fr": {
"title": "Quelle konfigurieren",
"description": "Konfiguriere deinen Service Provider. \n\nDer INSEE-Code Ihrer Gemeinde kann leicht über Google gefunden werden. Die instance_id kann durch einen Netzwerk-Inspektor vom offiziellen Widget ermittelt werden\n\nMehr details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/publidata_fr.md",
diff --git a/custom_components/waste_collection_schedule/translations/en.json b/custom_components/waste_collection_schedule/translations/en.json
index dc54632f6..ac1a5b8a6 100644
--- a/custom_components/waste_collection_schedule/translations/en.json
+++ b/custom_components/waste_collection_schedule/translations/en.json
@@ -2763,6 +2763,33 @@
},
"data_description": {}
},
+ "args_opendata_bordeauxmetropole_fr": {
+ "title": "Configure Source",
+ "description": "Configure your service provider. More details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/opendata_bordeauxmetropole_fr.md.",
+ "data": {
+ "calendar_title": "Calendar Title",
+ "address": "Address",
+ "city": "City"
+ },
+ "data_description": {
+ "calendar_title": "A more readable, or user-friendly, name for the waste calendar. If nothing is provided, the name returned by the source will be used.",
+ "address": "Your full address",
+ "city": "Your city"
+ }
+ },
+ "reconfigure_opendata_bordeauxmetropole_fr": {
+ "title": "Reconfigure Source",
+ "description": "Configure your service provider. More details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/opendata_bordeauxmetropole_fr.md.",
+ "data": {
+ "calendar_title": "Calendar Title",
+ "address": "Address",
+ "city": "City"
+ },
+ "data_description": {
+ "address": "Your full address",
+ "city": "Your city"
+ }
+ },
"args_publidata_fr": {
"title": "Configure Source",
"description": "Configure your service provider. \n\nThe INSEE code of your commune is easily found on google. instance_id can be found through a network inspecter from the official widget\n\nMore details: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/publidata_fr.md.",
diff --git a/custom_components/waste_collection_schedule/translations/it.json b/custom_components/waste_collection_schedule/translations/it.json
index ab0243daf..b63ccdae4 100644
--- a/custom_components/waste_collection_schedule/translations/it.json
+++ b/custom_components/waste_collection_schedule/translations/it.json
@@ -2757,6 +2757,33 @@
},
"data_description": {}
},
+ "args_opendata_bordeauxmetropole_fr": {
+ "title": "Configurazione Sorgente",
+ "description": "Compila i campi per ottenere le informazioni sul tuo servizio di raccolta. Maggiori informazioni: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/opendata_bordeauxmetropole_fr.md.",
+ "data": {
+ "calendar_title": "Nome Calendario",
+ "address": "Indirizzo",
+ "city": "Città"
+ },
+ "data_description": {
+ "calendar_title": "Puoi cambiare il nome del calendario della raccolta dei rifiuti, altrimenti di default verra' utilizzato il nome del tuo fornitore di servizi.",
+ "address": "Il tuo indirizzo completo",
+ "city": "La tua città"
+ }
+ },
+ "reconfigure_opendata_bordeauxmetropole_fr": {
+ "title": "Riconfigurazione Sorgente",
+ "description": "Compila i campi per ottenere le informazioni sul tuo servizio di raccolta. Per maggiori informazioni: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/opendata_bordeauxmetropole_fr.md.",
+ "data": {
+ "calendar_title": "Nome Calendario",
+ "address": "Indirizzo",
+ "city": "Città"
+ },
+ "data_description": {
+ "address": "Il tuo indirizzo completo",
+ "city": "La tua città"
+ }
+ },
"args_publidata_fr": {
"title": "Configurazione Sorgente",
"description": "Compila i campi per ottenere le informazioni sul tuo servizio di raccolta. \n\nIl codice INSEE del tuo comune si trova facilmente su Google. L'instance_id può essere trovato attraverso un ispettore di rete dal widget ufficiale\n\nMaggiori informazioni: https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/publidata_fr.md.",
diff --git a/custom_components/waste_collection_schedule/waste_collection_schedule/source/opendata_bordeauxmetropole_fr.py b/custom_components/waste_collection_schedule/waste_collection_schedule/source/opendata_bordeauxmetropole_fr.py
new file mode 100644
index 000000000..94c589cb9
--- /dev/null
+++ b/custom_components/waste_collection_schedule/waste_collection_schedule/source/opendata_bordeauxmetropole_fr.py
@@ -0,0 +1,353 @@
+import json
+import urllib.parse
+from datetime import date, datetime, timedelta
+from enum import Enum
+
+import requests
+from waste_collection_schedule import Collection
+from waste_collection_schedule.exceptions import SourceArgumentException
+
+TITLE = "Bordeaux Métropole"
+DESCRIPTION = "Source script for opendata.bordeaux-metropole.fr"
+URL = "https://opendata.bordeaux-metropole.fr/"
+TEST_CASES = {
+ "Bordeaux": {"address": "20 Cr Pasteur", "city": "Bordeaux"},
+ "Mérignac": {"address": "456 Av. de Verdun", "city": "Mérignac"},
+ "Gradignan": {"address": "Avenue de la Libération", "city": "Gradignan"},
+ "Talence": {"address": "Place de l'Église", "city": "Talence"},
+ "Saint-Médard-en-Jalles": {
+ "address": "Rue François Mitterrand",
+ "city": "Saint-Médard-en-Jalles",
+ },
+ "Villenave-d'Ornon": {
+ "address": "Avenue du Maréchal Leclerc",
+ "city": "Villenave-d'Ornon",
+ },
+ "Bruges": {"address": "Rue de la République", "city": "Bruges"},
+ "Bègles": {"address": "Rue Pierre et Marie Curie", "city": "Bègles"},
+ "Le Bouscat": {"address": "Avenue de la Libération", "city": "Le Bouscat"},
+ "Pessac": {"address": "Avenue Jean Jaurès", "city": "Pessac"},
+ "Ambarès-et-Lagrave": {
+ "address": "Pl. du 19 Mars 1962",
+ "city": "Ambarès-et-Lagrave",
+ },
+ "Ambès": {"address": "Rue de la Mairie", "city": "Ambès"},
+ "Blanquefort": {"address": "Rue de la République", "city": "Blanquefort"},
+ "Eysines": {"address": "Avenue de la Libération", "city": "Eysines"},
+ "Le Haillan": {"address": "Rue de la République", "city": "Le Haillan"},
+ "Le Taillan-Médoc": {
+ "address": "Avenue de la Libération",
+ "city": "Le Taillan-Médoc",
+ },
+ "Martignas-sur-Jalle": {
+ "address": "Rue de la République",
+ "city": "Martignas-sur-Jalle",
+ },
+ "Parempuyre": {"address": "Rue de la République", "city": "Parempuyre"},
+ "Saint-Aubin-de-Médoc": {
+ "address": "Rue de la République",
+ "city": "Saint-Aubin-de-Médoc",
+ },
+ "Saint-Louis-de-Montferrand": {
+ "address": "Rue Roget Espagnet",
+ "city": "Saint-Louis-de-Montferrand",
+ },
+ "Saint-Vincent-de-Paul": {
+ "address": "Rue de la Résistance",
+ "city": "Saint-Vincent-de-Paul",
+ },
+}
+
+ICON_MAP = {
+ "omr": "mdi:trash-can",
+ "emb": "mdi:recycle",
+ "enc": "mdi:truck-remove",
+ "dv": "mdi:leaf",
+ "verre": "mdi:bottle-wine",
+}
+
+LABEL_MAP = {
+ "OM": "Ordures ménagères",
+ "TRI": "Tri sélectif",
+}
+
+PARAM_DESCRIPTIONS = {
+ # "fr": {
+ # "address": "Votre adresse complète",
+ # "city": "Votre ville"
+ # },
+ "en": {"address": "Your full address", "city": "Your city"},
+ "de": {"address": "Ihre vollständige Adresse", "city": "Ihre Stadt"},
+ "it": {"address": "Il tuo indirizzo completo", "city": "La tua città"},
+}
+
+PARAM_TRANSLATIONS = {
+ # "fr": {
+ # "address": "Adresse",
+ # "city": "Ville"
+ # },
+ "en": {"address": "Address", "city": "City"},
+ "de": {"address": "Adresse", "city": "Stadt"},
+ "it": {"address": "Indirizzo", "city": "Città"},
+}
+
+EXTRA_INFO = [
+ {
+ "title": "Bordeaux",
+ "default_params": {"city": "Bordeaux"},
+ },
+ {
+ "title": "M\u00e9rignac",
+ "default_params": {"city": "M\u00e9rignac"},
+ },
+ {
+ "title": "Gradignan",
+ "default_params": {"city": "Gradignan"},
+ },
+ {
+ "title": "Talence",
+ "default_params": {"city": "Talence"},
+ },
+ {
+ "title": "Saint-M\u00e9dard-en-Jalles",
+ "default_params": {"city": "Saint-M\u00e9dard-en-Jalles"},
+ },
+ {
+ "title": "Villenave-d'Ornon",
+ "default_params": {"city": "Villenave-d'Ornon"},
+ },
+ {
+ "title": "Bruges",
+ "default_params": {"city": "Bruges"},
+ },
+ {
+ "title": "B\u00e8gles",
+ "default_params": {"city": "B\u00e8gles"},
+ },
+ {
+ "title": "Le Bouscat",
+ "default_params": {"city": "Le Bouscat"},
+ },
+ {
+ "title": "Pessac",
+ "default_params": {"city": "Pessac"},
+ },
+ {
+ "title": "Ambar\u00e8s-et-Lagrave",
+ "default_params": {"city": "Ambar\u00e8s-et-Lagrave"},
+ },
+ {
+ "title": "Amb\u00e8s",
+ "default_params": {"city": "Amb\u00e8s"},
+ },
+ {
+ "title": "Blanquefort",
+ "default_params": {"city": "Blanquefort"},
+ },
+ {
+ "title": "Eysines",
+ "default_params": {"city": "Eysines"},
+ },
+ {
+ "title": "Le Haillan",
+ "default_params": {"city": "Le Haillan"},
+ },
+ {
+ "title": "Le Taillan-M\u00e9doc",
+ "default_params": {"city": "Le Taillan-M\u00e9doc"},
+ },
+ {
+ "title": "Martignas-sur-Jalle",
+ "default_params": {"city": "Martignas-sur-Jalle"},
+ },
+ {
+ "title": "Parempuyre",
+ "default_params": {"city": "Parempuyre"},
+ },
+ {
+ "title": "Saint-Aubin-de-M\u00e9doc",
+ "default_params": {"city": "Saint-Aubin-de-M\u00e9doc"},
+ },
+ {
+ "title": "Saint-Louis-de-Montferrand",
+ "default_params": {"city": "Saint-Louis-de-Montferrand"},
+ },
+ {
+ "title": "Saint-Vincent-de-Paul",
+ "default_params": {"city": "Saint-Vincent-de-Paul"},
+ },
+]
+
+
+class DayNames(Enum):
+ MONDAY = "LUNDI"
+ TUESDAY = "MARDI"
+ WEDNESDAY = "MERCREDI"
+ THURSDAY = "JEUDI"
+ FRIDAY = "VENDREDI"
+ SATURDAY = "SAMEDI"
+ SUNDAY = "DIMANCHE"
+
+
+DAY_NAME_MAP = {
+ DayNames.MONDAY: 0,
+ DayNames.TUESDAY: 1,
+ DayNames.WEDNESDAY: 2,
+ DayNames.THURSDAY: 3,
+ DayNames.FRIDAY: 4,
+ DayNames.SATURDAY: 5,
+ DayNames.SUNDAY: 6,
+}
+
+
+class Source:
+ geocoder_url = "https://api.publidata.io/v2/geocoder"
+ api_url = "https://opendata.bordeaux-metropole.fr/api/explore/v2.1/catalog/datasets/en_frcol_s/exports/json?lang=fr&refine=commune%3A%22{city}%22&timezone=Europe%2FBerlin&use_labels=true&delimiter=%3B"
+
+ INSEE_CODES = {
+ "Bordeaux": 33063,
+ "Mérignac": 33281,
+ "Gradignan": 33192,
+ "Talence": 33522,
+ "Saint-Médard-en-Jalles": 33449,
+ "Villenave-d'Ornon": 33550,
+ "Bruges": 33075,
+ "Bègles": 33039,
+ "Le Bouscat": 33069,
+ "Pessac": 33318,
+ "Ambarès-et-Lagrave": 33003,
+ "Ambès": 33004,
+ "Blanquefort": 33056,
+ "Eysines": 33162,
+ "Le Haillan": 33200,
+ "Le Taillan-Médoc": 33519,
+ "Martignas-sur-Jalle": 33273,
+ "Parempuyre": 33312,
+ "Saint-Aubin-de-Médoc": 33376,
+ "Saint-Louis-de-Montferrand": 33434,
+ "Saint-Vincent-de-Paul": 33487,
+ }
+
+ def __init__(self, address: str, city: str) -> None:
+ self.address = address
+ self.city = city
+
+ @staticmethod
+ def _get_next_weekday(source_date: date, target_day_name: DayNames) -> date:
+ # Get the current weekday number
+ source_date_weekday = source_date.weekday()
+
+ # Get the target weekday number
+ target_weekday = DAY_NAME_MAP[target_day_name]
+
+ # Calculate the number of days until the next target weekday
+ days_until_target = (target_weekday - source_date_weekday + 7) % 7
+ if days_until_target == 0: # It is source_date!
+ return source_date
+
+ # Calculate the date of the next target weekday
+ next_target_date = source_date + timedelta(days=days_until_target)
+
+ return next_target_date
+
+ def _get_address_params(self, address: str) -> dict:
+ params: dict[str, str | int] = {
+ "q": address,
+ "citycode": self.INSEE_CODES[self.city],
+ "limit": 10,
+ "lookup": "publidata",
+ }
+ response = requests.get(self.geocoder_url, params=params)
+
+ if response.status_code != 200:
+ raise SourceArgumentException("address", "Error response from geocoder")
+
+ data = response.json()[0]["data"]["features"]
+ if not data:
+ raise SourceArgumentException(
+ "address", "No results found for the given address and INSEE code"
+ )
+
+ lat, lon = data[0]["geometry"]["coordinates"]
+ return {
+ "lat": lat,
+ "lon": lon,
+ "address_id": data[0]["properties"]["id"],
+ }
+
+ def _is_within_geo_shape(self, geo_shape: dict, address_params: dict) -> bool:
+ point_lon, point_lat = address_params["lon"], address_params["lat"]
+ polygon = geo_shape["geometry"]["coordinates"][0]
+ _type = geo_shape["geometry"]["type"]
+
+ def is_point_in_polygon(point, polygon) -> bool:
+ x, y = point
+ n = len(polygon)
+ inside = False
+ p1y, p1x = polygon[0]
+ for i in range(n + 1):
+ p2y, p2x = polygon[i % n]
+ if y > min(p1y, p2y):
+ if y <= max(p1y, p2y):
+ if x <= max(p1x, p2x):
+ if p1y != p2y:
+ xinters = (y - p1y) * (p2x - p1x) / (p2y - p1y) + p1x
+ if p1x == p2x or x <= xinters:
+ inside = not inside
+ p1x, p1y = p2x, p2y
+
+ return inside
+
+ if _type == "Polygon":
+ return is_point_in_polygon((point_lon, point_lat), polygon)
+ elif _type == "MultiPolygon":
+ for poly in polygon:
+ if is_point_in_polygon((point_lon, point_lat), poly):
+ return True
+ return False
+
+ def fetch(self) -> list[Collection]:
+ # First we need to get the address parameters from the geocoder
+ address_params = self._get_address_params(self.address)
+
+ url = self.api_url.format(city=urllib.parse.quote(self.city))
+
+ response = requests.get(url)
+
+ if response.status_code != 200:
+ raise SourceArgumentException("city", "Error response from API")
+
+ # Now we need to filter the response to only include the relevant information
+ list_of_infos = [
+ i
+ for i in json.loads(response.text)
+ if i["geo_shape"]
+ and self._is_within_geo_shape(i["geo_shape"], address_params)
+ ]
+
+ filtered_responses: dict[str, list[str]] = {}
+ for response_item in list_of_infos:
+ waste_collection_per_type = filtered_responses.setdefault(
+ response_item["type"], []
+ )
+ for jour_col in response_item["jour_col"]:
+ waste_collection_per_type.append(jour_col)
+
+ entries = []
+ for _collection_type, _dates in filtered_responses.items():
+ for _day in _dates:
+ source_date = datetime.today().date()
+ for _ in range(4): # Let's generate a month of schedule
+ next_date = self._get_next_weekday(source_date, DayNames(_day))
+ entries.append(
+ Collection(
+ date=next_date, # Next collection date
+ t=LABEL_MAP.get(
+ _collection_type, _collection_type
+ ), # Collection type
+ icon=ICON_MAP.get(_collection_type), # Collection icon
+ )
+ )
+ source_date = next_date + timedelta(days=1)
+
+ return entries
diff --git a/doc/source/opendata_bordeauxmetropole_fr.md b/doc/source/opendata_bordeauxmetropole_fr.md
new file mode 100644
index 000000000..bccf56705
--- /dev/null
+++ b/doc/source/opendata_bordeauxmetropole_fr.md
@@ -0,0 +1,57 @@
+# OpenData Bordeaux Métropole — provider for waste management schedules
+
+Support for schedules provided by [Bordeaux Métropole](https://opendata.bordeaux-metropole.fr/).
+
+They operate the schedules of at least these cities:
+
+- Bordeaux
+- Mérignac
+- Gradignan
+- Talence
+- Saint-Médard-en-Jalles
+- Villenave-d'Ornon
+- Bruges
+- Bègles
+- Le Bouscat
+- Pessac
+- Ambarès-et-Lagrave
+- Ambès
+- Blanquefort
+- Eysines
+- Le Haillan
+- Le Taillan-Médoc
+- Martignas-sur-Jalle
+- Parempuyre
+- Saint-Aubin-de-Médoc
+- Saint-Louis-de-Montferrand
+- Saint-Vincent-de-Paul
+
+You only have to provide your address.
+
+## Configuration via configuration.yaml
+
+```yaml
+waste_collection_schedule:
+ sources:
+ - name: opendata_bordeauxmetropole_fr
+ args:
+ address: "ADDRESS"
+ city: "CITY_NAME"
+```
+
+### Configuration Variables
+
+## Examples
+
+```yaml
+waste_collection_schedule:
+ sources:
+ - name: opendata_bordeauxmetropole_fr
+ args:
+ address: "11 rue Jean Moulin"
+ city: "Bordeaux"
+```
+
+## How to ensure your address is valid
+
+Go on [OpenData BordeauxMetropole’s website](https://opendata.bordeaux-metropole.fr/explore/dataset/en_frcol_s/map/?disjunctive.jour_col&basemap=jawg.streets) and try to search your address.
diff --git a/info.md b/info.md
index 5dc51a3ff..3568c8dcd 100644
--- a/info.md
+++ b/info.md
@@ -23,7 +23,7 @@ Waste collection schedules from service provider web sites are updated daily, de
| Czech Republic | Praha, Rudna u Prahy |
| Denmark | Affaldonline, Assens Forsyning, Favrskov Forsyning, Kredsløb, Langeland Forsyning, Middelfart Kommune, Odense Renovation, Rebild Kommune, Reno Djurs, Renosyd, RenoWeb, Silkeborg Forsyning, Vejle Kommune, Vestforbrænding, Ærø Kommune |
| Finland | Kiertokapula Finland |
-| France | Ardenne Métropole, Châteauroux Métropole, Communauté de Communes de Montesquieu, Dreux Agglomération, Dunkerque Grand Littoral, Grand Calais Terres et Mers, Grand Paris Seine et Oise, Grand Paris Seine Ouest, Mairie de Mamirolle, Orléans Métropole, Publidata generic source, Saint Quentin en Yvelines, Saumur Val de Loire, Sivom Rive Droite - Bassens, Tours Métropole, ValDem, ValEco, Versailles Grand Parc |
+| France | Ambarès-et-Lagrave, Ambès, Ardenne Métropole, Blanquefort, Bordeaux, Bordeaux Métropole, Bruges, Bègles, Châteauroux Métropole, Communauté de Communes de Montesquieu, Dreux Agglomération, Dunkerque Grand Littoral, Eysines, Gradignan, Grand Calais Terres et Mers, Grand Paris Seine et Oise, Grand Paris Seine Ouest, Le Bouscat, Le Haillan, Le Taillan-Médoc, Mairie de Mamirolle, Martignas-sur-Jalle, Mérignac, Orléans Métropole, Parempuyre, Pessac, Publidata generic source, Saint Quentin en Yvelines, Saint-Aubin-de-Médoc, Saint-Louis-de-Montferrand, Saint-Médard-en-Jalles, Saint-Vincent-de-Paul, Saumur Val de Loire, Sivom Rive Droite - Bassens, Talence, Tours Métropole, ValDem, ValEco, Versailles Grand Parc, Villenave-d'Ornon |
| Germany | Aballwirtschaft Ludwigslust-Parchim AöR, Abfall App, Abfall IO ICS Version, Abfall Stuttgart, Abfall-Wirtschafts-Verband Nordschwaben, Abfall.IO / AbfallPlus, Abfallbehandlungsgesellschaft Havelland mbH (abh), Abfallbewirtschaftung Ostalbkreis, Abfallentsorgung Kreis Kassel, Abfallkalender Hattingen, Abfallkalender Herne, Abfallkalender Kassel, Abfallkalender Luebeck, Abfallkalender Mannheim, Abfallkalender Offenbach, Abfallkalender Offenbach am Main (deprecated), Abfallkalender Würzburg (deprecated), Abfallkalender Würzburg (ICS), AbfallNavi (RegioIT.de), Abfalltermine Forchheim, Abfallwirtschaft Alb-Donau-Kreis, Abfallwirtschaft Altkreis Göttingen, Abfallwirtschaft Altkreis Osterode am Harz, Abfallwirtschaft Dithmarschen (AWD), Abfallwirtschaft Enzkreis, Abfallwirtschaft Freiburg, Abfallwirtschaft Germersheim, Abfallwirtschaft Isar-Inn, Abfallwirtschaft Kreis Plön, Abfallwirtschaft Lahn-Dill-Kreises, Abfallwirtschaft Landkreis Böblingen, Abfallwirtschaft Landkreis Freudenstadt, Abfallwirtschaft Landkreis Göppingen, Abfallwirtschaft Landkreis Harburg, Abfallwirtschaft Landkreis Haßberge, Abfallwirtschaft Landkreis Kitzingen, Abfallwirtschaft Landkreis Landsberg am Lech, Abfallwirtschaft Landkreis Wolfenbüttel, Abfallwirtschaft Neckar-Odenwald-Kreis, Abfallwirtschaft Nürnberger Land, Abfallwirtschaft Ortenaukreis, Abfallwirtschaft Pforzheim, Abfallwirtschaft Potsdam-Mittelmark (APM), Abfallwirtschaft Rems-Murr (AWRM) - AWIDO Version, Abfallwirtschaft Rems-Murr (AWRM) - ICS Version, Abfallwirtschaft Rendsburg, Abfallwirtschaft Rheingau-Taunus-Kreis, Abfallwirtschaft Sonneberg, Abfallwirtschaft Stadt Fürth, Abfallwirtschaft Stadt Nürnberg, Abfallwirtschaft Stadt Schweinfurt, Abfallwirtschaft Südholstein, Abfallwirtschaft Werra-Meißner-Kreis, Abfallwirtschafts-Zweckverband des Landkreises Hersfeld-Rotenburg, Abfallwirtschaftsbetrieb Bergisch Gladbach, Abfallwirtschaftsbetrieb des Landkreises Pfaffenhofen a.d.Ilm (AWP), Abfallwirtschaftsbetrieb Emsland, Abfallwirtschaftsbetrieb Esslingen, Abfallwirtschaftsbetrieb Ilm-Kreis, Abfallwirtschaftsbetrieb Kiel (ABK), Abfallwirtschaftsbetrieb Landkreis Ahrweiler, Abfallwirtschaftsbetrieb Landkreis Altenkirchen, Abfallwirtschaftsbetrieb Landkreis Augsburg, Abfallwirtschaftsbetrieb Landkreis Aurich, Abfallwirtschaftsbetrieb Landkreis Karlsruhe, Abfallwirtschaftsbetrieb LK Mainz-Bingen, Abfallwirtschaftsbetrieb Unstrut-Hainich-Kreis, Abfallwirtschaftsbetriebe Münster, Abfallwirtschaftsgesellschaft Landkreis Schaumburg, Abfallwirtschaftsverband Kreis Groß-Gerau, Abfallwirtschaftsverbandes Lippe, Abfallwirtschaftszweckverband Wartburgkreis (AZV), Abfallzweckverband Rhein-Mosel-Eifel (Landkreis Mayen-Koblenz), Abfuhrtermine.info, AHE Ennepe-Ruhr-Kreis, AHK Heidekreis, ALBA Berlin, ALBA Braunschweig, ALF Lahn-Fulda, Allendorf, Altena, Altenbeken, Altmarkkreis Salzwedel, Altötting (LK), Alzey-Worms, Apps by Abfall+, Arnsberg, ART Trier, ART Trier (Depreciated), Aschaffenburg (MyMuell App), ASG Nordsachsen, ASG Wesel, ASO Abfall-Service Osterholz, ASR Stadt Chemnitz, ASTO (Abfall- Sammel- und Transportverband Oberberg), ATHOS GmbH, Attendorn, Augsburg, Aurich (MKW), AVL - Abfallverwertungsgesellschaft des Landkreises Ludwigsburg mbH, AVR Kommunal, Rhein-Neckar-Kreis, AWA Entsorgungs GmbH, AWB Abfallwirtschaft Vechta, AWB Bad Kreuznach, AWB Köln, AWB Landkreis Bad Dürkheim, AWB Landkreis Fürstenfeldbruck, AWB Oldenburg, AWB Westerwaldkreis, AWG Bassum, AWG Donau-Wald, AWG Kreis Warendorf, AWG Wuppertal, AWIDO Online, AWIGO Abfallwirtschaft Landkreis Osnabrück GmbH, AWISTA Düsseldorf, AWISTA LOGISTIK Stadt Remscheid, Awista Starnberg, AWL Neuss, AWM München, AWV: Abfall Wirtschaftszweckverband Ostthüringen, AZV Stadt und Landkreis Hof, Bad Arolsen, Bad Arolsen (MyMuell App), Bad Berleburg, Bad Driburg, Bad Homburg vdH, Bad Kissingen, Bad Wünnenberg, Bad-König, Baden Baden, Balve, Bamberg (City/Stadt), Bamberg (Landkreis), Barnim, Battenberg, Bau & Service Oberursel, Bau- und Entsorgungsbetrieb Emden, Bergischer Abfallwirtschaftverbund, Berlin, Berlin Recycling, Berliner Stadtreinigungsbetriebe, BEST - Bottrop, Bestwig, Beverungen (MyMuell App), Bielefeld, Blaue Tonne - Schlaue Tonne, Bogenschütz Entsorgung, Bonn, Borchen, Borgentreich, Brakel, Braunschweig, Breckerfeld, Bremer Stadtreinigung, Brensbach, Breuberg, Brilon, Brombachtal, Bromskirchen, Burgenland (Landkreis), Burgenlandkreis, Burgwald, Büren, Bürgerportal, Bürgerportal Bedburg, C-Trace, Cederbaum Braunschweig, Celle, Cham Landkreis, Chemnitz (ASR), Chiemgau Recycling - Landkreis Rosenheim, City of Karlsruhe, CM City Media - Müllkalender, Coburg Entsorgungs- und Baubetrieb CEB, Darmstadt (MyMuell App), Darmstadt-Dieburg (ZAW), Delbrück, Dessau-Rosslau, Diemelsee, Diemelstadt, Dillingen Saar, Dinslaken, Drekopf, Drolshagen, Duisburg, EAD Darmstadt, ebwo - Entsorgungs- und Baubetrieb Anstalt des öffentlichen Rechts der Stadt Worms, Edertal, EDG Entsorgung Dortmund, EGN Abfallkalender, EGST Steinfurt, EGW Westmünsterland, Eichsfeldwerke GmbH, Eigenbetrieb Abfallwirtschaft Landkreis Spree-Neiße, Eigenbetrieb Kommunalwirtschaftliche Dienstleistungen Suhl, EKM Mittelsachsen GmbH, Entsorgung Dortmund GmbH (EDG), Entsorgungs- und Wirtschaftsbetrieb Landau in der Pfalz, Entsorgungsbetrieb Märkisch-Oderland, Entsorgungsbetrieb Stadt Mainz, Entsorgungsbetriebe Essen, Entsorgungsgesellschaft Görlitz-Löbau-Zittau, Entsorgungstermine Jena, Erbach, Erfstadt (inoffical), Esens (MyMuell App), ESG Soest - Entsorgungswirtschaft Soest GmbH, Eslohe, Essen, EUV Stadtbetrieb Castrop-Rauxel, EVA Abfallentsorgung, EVS Entsorgungsverband Saar, FES Frankfurter Entsorgungs- und Service GmbH, Finnentrop, Flensburg (MyMuell App), Flörsheim Am Main, Frankenau, Frankfurt (Oder), Frankfurt (Oder), Freiburg im Breisgau, Fränkisch-Crumbach, Gelber Sack Stuttgart, Gelsendienste Gelsenkirchen, Gemeinde Blankenheim, Gemeinde Deggenhausertal, Gemeinde Kalletal, Gemeinde Roetgen, Gemeinde Schutterwald, Gemeinde Unterhaching, GFA Lüneburg, Gipsprojekt, Großkrotzenburg (MyMuell App), GSAK APP / Krefeld, GWA - Kreis Unna mbH, Göttinger Entsorgungsbetriebe, Gütersloh (Stadt), Hagen, Hainburg (MyMuell App), Hallenberg, Hallesche Wasser und Stadtwirtschaft GmbH, Halver, Halver, Hattersheim am Main, Hatzfeld, hausmüll.info, Havelland, Heidelberg, Heilbronn Entsorgungsbetriebe, Heinz-Entsorgung (Landkreis Freising), Hemer, Herten (durth-roos.de), Hohenlohekreis, Holtgast (MyMuell App), HubertSchmid Recycling und Umweltschutz GmbH, Höchst, Höxter, Ilm-Kreis, Ingolstadt, Insert IT Apps, Iserlohn, Jumomind, KAEV Niederlausitz, Kamp-Lintfort (MyMuell App), KECL Kommunalentsorgung Chemnitzer Land, Kierspe, Kirchdorf (MyMuell App), Kommunalservice Landkreis Börde AöR, Korbach, Kreis Ahrweiler, Kreis Augsburg, Kreis Bad Kissingen, Kreis Bautzen, Kreis Bayreuth, Kreis Bergstraße, Kreis Biberach, Kreis Breisgau-Hochschwarzwald, Kreis Calw, Kreis Cloppenburg, Kreis Coesfeld, Kreis Cuxhaven, Kreis Diepholz, Kreis Emmendingen, Kreis Emsland, Kreis Freudenstadt, Kreis Fürth, Kreis Garmisch-Partenkirchen, Kreis Göppingen, Kreis Gütersloh GEG, Kreis Heilbronn, Kreis Heinsberg, Kreis Karlsruhe, Kreis Kitzingen, Kreis Landsberg am Lech, Kreis Landshut, Kreis Limburg-Weilburg, Kreis Ludwigsburg, Kreis Lörrach, Kreis Mayen-Koblenz, Kreis Miesbach, Kreis Miltenberg, Kreis Märkisch-Oderland, Kreis Neustadt/Aisch-Bad Windsheim, Kreis Neuwied, Kreis Nienburg / Weser, Kreis Nordfriesland, Kreis Ostallgäu, Kreis Osterholz, Kreis Pinneberg, Kreis Rastatt, Kreis Ravensburg, Kreis Reutlingen, Kreis Rotenburg (Wümme), Kreis Schaumburg, Kreis Sigmaringen, Kreis Starnberg, Kreis Steinburg, Kreis Steinfurt, Kreis Südwestpfalz, Kreis Traunstein, Kreis Uelzen, Kreis Vechta, Kreis Viersen, Kreis Vorpommern-Rügen, Kreis Weißenburg-Gunzenhausen, Kreis Wesermarsch, Kreis Würzburg, Kreisstadt Dietzenbach, Kreisstadt Friedberg, Kreisstadt Groß-Gerau, Kreisstadt St. Wendel, Kreiswerke Schmalkalden-Meiningen GmbH, Kreiswirtschaftsbetriebe Goslar, Kreuztal, Kronberg im Taunus, KV Cochem-Zell, KWU Entsorgung Landkreis Oder-Spree, Landkreis Amberg-Sulzbach, Landkreis Anhalt-Bitterfeld, Landkreis Ansbach, Landkreis Aschaffenburg, Landkreis Aschaffenburg (MyMuell App), Landkreis Bayreuth, Landkreis Berchtesgadener Land, Landkreis Biberach (MyMuell App), Landkreis Böblingen, Landkreis Böblingen, Landkreis Börde AöR (KsB), Landkreis Calw, Landkreis Coburg, Landkreis Cuxhaven, Landkreis Eichstätt (MyMuell App), Landkreis Erding, Landkreis Erlangen-Höchstadt, Landkreis Esslingen, Landkreis Friesland (MyMuell App), Landkreis Fulda, Landkreis Gießen, Landkreis Gießen, Landkreis Gifhorn, Landkreis Gifhorn, Landkreis Gotha, Landkreis Grafschaft, Landkreis Görlitz, Landkreis Günzburg, Landkreis Hameln-Pyrmont, Landkreis Harz, Landkreis Heidenheim, Landkreis Heilbronn, Landkreis Hildburghausen, Landkreis Kelheim, Landkreis Kronach, Landkreis Kulmbach, Landkreis Kusel, Landkreis Leer (MyMuell App), Landkreis Leipzig, Landkreis Limburg-Weilburg, Landkreis Lüchow-Dannenberg, Landkreis Main-Spessart, Landkreis Mettmann (MyMuell App), Landkreis Mühldorf a. Inn, Landkreis Neumarkt, Landkreis Nordwestmecklenburg, Landkreis Northeim (unofficial), Landkreis Ostallgäu, Landkreis Paderborn (MyMuell App), Landkreis Peine, Landkreis Ravensburg, Landkreis Reutlingen, Landkreis Rhön Grabfeld, Landkreis Rosenheim, Landkreis Rostock, Landkreis Rotenburg (Wümme), Landkreis Roth, Landkreis Roth, Landkreis Rottweil, Landkreis Schweinfurt, Landkreis Schwäbisch Hall, Landkreis Sigmaringen, Landkreis soest, Landkreis Stade, Landkreis Stendal, Landkreis Sömmerda, Landkreis Südliche Weinstraße, Landkreis Tirschenreuth, Landkreis Tübingen, Landkreis Vogtland, Landkreis Weißenburg-Gunzenhausen, Landkreis Wittenberg, Landkreis Wittmund, Landkreis Wittmund (MyMuell App), Landkreis Wittmund (MyMuell App), Landkreis Wunsiedel im Fichtelgebirge, Landkreisbetriebe Neuburg-Schrobenhausen, Landratsamt Aichach-Friedberg, Landratsamt Bodenseekreis, Landratsamt Dachau, Landratsamt Main-Tauber-Kreis, Landratsamt Miltenberg, Landratsamt Regensburg, Landratsamt Traunstein, Landratsamt Unterallgäu, Landshut, Langen, Lebacher Abfallzweckverband (LAZ), Lennestadt, Leverkusen, Lichtenau, Lichtenfels, LK Schwandorf, Lobbe App, Ludwigshafen, Ludwigshafen am Rhein, Lübbecke (Jumomind), Lübeck Entsorgungsbetriebe, Lützelbach, mags Mönchengladbacher Abfall-, Grün- und Straßenbetriebe AöR, Main-Kinzig-Kreis, Main-Kinzig-Kreis (MyMuell App), Mannheim, Marienmünster, Marsberg, Mechernich und Kommunen, Medebach, Mein-Abfallkalender.online, Meinerzhagen, Menden, Meschede, Metzingen, MHEG Mülheim an der Ruhr, Michelstadt, Minden, Mossautal, MZV Biedenkopf, MZV Rotenburg, Mörfelden-Walldorf, Mühlheim am Main (MyMuell App), Müllabfuhr Deutschland, MüllALARM / Schönmackers, Müllmax, München Landkreis, Nachrodt-Wiblingwerde, Neckar-Odenwald-Kreis, Nenndorf (MyMuell App), Neu-Ulm, Neumünster (MyMuell App), Neunkirchen Siegerland, Neustadt a.d. Waldnaab, Neustadt an der Weinstraße, Nordsachsen, Oberhavel, Oberhavel AWU, Oberzent, Oldenburg, Olpe, Olsberg, Ortenaukreis, Ostholstein, Ostprignitz-Ruppin, Plettenberg, Potsdam, Prignitz, Prignitz, Prignitz, Pullach im Isartal, Recklinghausen, RegioEntsorgung AöR, RegioEntsorgung Städteregion Aachen, Reichelsheim, RESO, Rhein-Hunsrück (Jumomind), Rhein-Hunsrück Entsorgung (RHE), Rhein-Lahn Kreis, Rhein-Neckar-Kreis, Rhein-Neckar-Kreis, Rhein-Pfalz-Kreis, Rosbach Vor Der Höhe, Rosenthal, Rottweil, Rottweil, Rottweil, RSAG Rhein-Sieg-Kreis, Rüthen, Saalekreis, Salzgitter (MyMuell App), Salzlandkreis, Schalksmühle, Schleswig-Flensburg (ASF), Schmallenberg, Schmitten im Taunus (MyMuell App), Schwabach, Schwarze Elster, Schwarzwald-Baar-Kreis, Schöneck (MyMuell App), Schönmackers, sds Schwerin, Sector 27 - Datteln, Marl, Oer-Erkenschwick, Seligenstadt (MyMuell App), Siegen, Stadt Aachen, Stadt Arnsberg, Stadt Bayreuth, Stadt Cottbus, Stadt Cuxhaven, Stadt Darmstadt, Stadt Detmold, Stadt Dorsten, Stadt Emmendingen, Stadt Frankenberg (Eder), Stadt Frankenthal, Stadt Fulda, Stadt Haltern am See, Stadt Hamm, Stadt Hanau, Stadt Kaufbeuren, Stadt Koblenz, Stadt Landshut, Stadt Mainhausen, Stadt Maintal, Stadt Memmingen, Stadt Messstetten, Stadt Norderstedt, Stadt Osnabrück, Stadt Overath, Stadt Regensburg, Stadt Solingen, Stadt Spenge, Stadt Unterschleißheim, Stadt Wetzlar, Stadtbetrieb Frechen, Stadtbildpflege Kaiserslautern, Stadtentsorgung Rostock, Stadtreinigung Dresden, Stadtreinigung Hamburg, Stadtreinigung Leipzig, Stadtreinigung Leipzig, StadtService Brühl, Stadtwerke Erfurt, SWE, Stadtwerke Hürth, Steinheim, STL Lüdenscheid, Städteservice Raunheim Rüsselsheim, Sundern, SWK Herford, Südbrandenburgischer Abfallzweckverband, TBR Remscheid, TBV Velbert, Team Orange (Landkreis Würzburg), Technischer Betriebsdienst Reutlingen, tonnenleerung.de LK Aichach-Friedberg + Neuburg-Schrobenhausen, Tuttlingen, Tuttlingen, Tuttlingen, Twistetal, Tübingen, Uckermark, ULM (EBU), Ulm (MyMuell App), USB Bochum, Usingen (MyMuell App), VIVO Landkreis Miesbach, Volkmarsen (MyMuell App), Vöhl, Vöhringen (MyMuell App), Waldshut, Waldshut, Waldshut, Warburg, Warstein, WBO Wirtschaftsbetriebe Oberhausen, Wegberg (MyMuell App), Weimarer Land, Wenden, Werdohl, Wermelskirchen (Service Down), Westerholt (MyMuell App), Westerwaldkreis, WGV Recycling GmbH, Wilhelmshaven (MyMuell App), Willebadessen, Willingen, Winterberg, Wolfsburger Abfallwirtschaft und Straßenreinigung, WZV Kreis Segeberg, Würzburg, ZAH Hildesheim, ZAK Kempten, ZAW Donau-Wald, ZAW-SR, ZBG Gladbeck, ZEW Zweckverband Entsorgungsregion West, ZfA Iserlohn, ZKE Saarbrücken, Zollernalbkreis, Zollernalbkreis, Zweckverband Abfallwirtschaft Kreis Bergstraße, Zweckverband Abfallwirtschaft Oberes Elbtal, Zweckverband Abfallwirtschaft Region Hannover, Zweckverband Abfallwirtschaft Saale-Orla, Zweckverband Abfallwirtschaft Schwalm-Eder-Kreis, Zweckverband Abfallwirtschaft Südwestsachsen (ZAS), Zweckverband München-Südost |
| Hungary | FKF Budapest, FKF Budaörs, ÉTH (Érd, Diósd, Nagytarcsa, Sóskút, Tárnok) |
| Italy | A&T 2000 Spa, Aci Sant'Antonio, Acinque Spa, AET Ambiente Energia Territorio S.p.A., Agliana, Agno Chiampo Ambiente, Alia Servizi Ambientali S.p.A., Alife - CZETA Spa, Altavilla Irpina, Amag Ambiente, Amaie Energia e Servizi Srl, Amalfi, Ambiente Spa, AnconAmbiente, Andora, Anguillara Sabazia - Cosp Tecno Service, Aprilia - Progetto Ambiente Spa, Ardea - DM Technology Srl, ARO Figulinas - DLR Ambiente - Ciclat, Arosio - Service 24 Ambiente Srl, Artena, Aset S.p.A, ASIA Azienda Speciale per l'Igiene Ambientale, Asm Terni, Assago - San Germano - Gruppo Iren, Assisi - ECE Srl, Asti - ASP S.p.A., ATO2 - Ancona, Auer - Ora, Avellino - Grande Srl, Azienda Ambiente Srl, Bacino Ventimigliese - TeknoService, Bagheria - A.M.B. S.p.a, Bagno a Ripoli, Barberino di Mugello, Barberino Tavarnelle, Bari - Amiu Puglia, Bassano Romano, Belforte del Chienti, Bellunum Srl, Bientina, Bitti, Luna e Onanì - Formula Ambiente Spa, Blera, Borghetto di Borbera, Borgo San Lorenzo, Borgomaro, Borgosesia - Seso Srl, Brandizzo, Brembate, Brixen/Bressanone - Stadtwerke Brixen AG/ASM Bressanone SpA, Bubbiano, Budoni - Formula Ambiente Spa, Buggiano, Buonvicino, C.C.S. - Consorzio Campale Stabile, Cabras, Calatafimi Segesta, Calenzano, Calvi Risorta - Isola Verde Ecologia, Camerino, Campagnano di Roma - DM Technology Srl, Campi Bisenzio, Campobasso - S.E.A. Servizi e Ambiente SPA, Campolieto - Smaltimenti Sud, Cancello ed Arnone - WM Magenta Srl, Canicattini Bagni - Traina Srl, Cantagallo, Capraia e Limite, Capua - CZETA Spa - Ciclat, Carini - Senesi SpA, Carmignano, Caronno Pertusella - Econord, Carpignano Salentino, Carrara - Nausicaa S.p.a, Casale Marittimo, Casavatore - Ecology Srl, Castel Gandolfo - Coop 134, Castel Volturno - WM Magenta Srl, Castelbuono - Castelbuono Ambiente srl, Castelfiorentino, Castelforte, Castellammare del Golfo - Agesp Spa, Castelnuovo di Porto, Castelsardo, Castelvetrano, Castiglione in Teverina - Cosp Tecno Service, Cerreto Guidi, Cerro Maggiore - Agesp Spa, Certaldo, Cesa - DM Technology Srl, Cesano Boscone - San Germano - Gruppo Iren, Challand-Saint-Victor, Chiaramonte Gulfi - Mecogest, Chiesina Uzzanese, Chieti - Formula Ambiente Spa, Chiusavecchia, Cidiu, CIDIU S.p.A., Cinisello Balsamo - Nord Milano Ambiente S.P.A., CISA, Cisterna di Latina - Cisterna Ambiente, Cisternino, CLARA Ambiente, Co.S.R.A.B, Collinas, Cologno Monzese - CEM Ambiente, Comuni della Convenzione di Sesto Calende - Econord, Comunità della Vallagarina - Dolomiti Ambiente Srl, Comunità delle Giudicarie, Comunità Montana Sarcidano e Barbagia di Seulo - Formula Ambiente Spa, Comunità Valsugana e Tesino, Conca Casale e Venafro - Smaltimenti Sud, Consac, Consorzio Area Vasta Basso Novarese, Contarina S.p.A, Cooperativa Trasforma, Cosir Srl, Cosp Tecno Service, Cosvega, Covar14, Cupello - Pulchra Ambiente Srl, Curti - WM Magenta Srl, Decimoputzu - Formula Ambiente Spa, DLR Ambiente - Ciclat, Dolomiti Ambiente Srl, Ecoambiente Srl, EcoInnova Srl, Econova Srl, Empoli, Enna - Eco Enna Servizi, Entratico, Faleria, Fiemme Servizi, Fiesole, Figline e Incisa Valdarno, Firenze, Fiuggi, Floridia - IGM rifiuti industriali, Follonica, Fondi - De Vizia Transfer Spa, Fonni, Oliena e Orgosolo - San Germano - Gruppo Iren, Formula Ambiente Spa - Abruzzo, Frosinone - De Vizia Transfer Spa, Fucecchio, Gallo Matese, Gambassi Terme, GardaUno Spa, Garfagnana Ecologia Ambiente - GEA, Gavorrano, GEA Srl, GESENU Gestione Servizi Nettezza Urbana S.P.A, Gestione Ambiente Spa, Giarre - IGM rifiuti industriali, Ginosa, Gioiosa Ionica, Gioiosa Marea - Pizzo Pippo, Gonnesa - De Vizia Transfer Spa, Greve in Chianti, Guardistallo, Iglesias, Il Rifiutologo, Illasi, Imperia - De Vizia Transfer Spa, Impruneta, Inverno e Monteleone, Iren Ambiente, Isola del Liri - Cosp Tecno Service, Isole Tremiti - Smaltimenti Sud, Isontina Ambiente, isontina ambiente: Ronchi dei legionari, Ispica - Impregico Srl, Itri - De Vizia Transfer Spa, Jnker APP, Junker, Lacco Ameno - SuperEco SRL, Lamporecchio, Larciano, Lastra a Signa, Latina - ABC Azienda Beni Comuni di Latina, Laurenzana, Lavorgna Srl, Leinì, Lentate sul Seveso, Leporano - Impregico Srl, Letino, Levate, Limosano, Lodi, Lodè - Eco Flap - Ciclat, Loreto Aprutino - Diodoro Ecologia, Lucca - Sistema Ambiente Spa, Macerata Campania - DHI, Mandas - C.A.P.R.I., Maracalagonis - Formula Ambiente Spa, Marcallo con Casone, Marche Multiservizi Falconara, Marliana, Marsala, Trapani e Misiliscemi- Formula Ambiente Spa, Massa e Cozzile, Massalengo, Meda, Mentana - Paoletti Ecologia, Merano - ASM, Messina - Messinaservizi Bene Comune, Minerva Ambiente, Minturno, Miramare Service Srl, Mondolfo, Mondragone - DHI, Monserrato - Gesenu Spa, Monsummano Terme, Montaione, Montale, Montalto di Castro, Monte di Procida - DM Technology Srl, Monte Isola - Sea Srl, Monte Urano - Eco Elpidiense Srl, Montecassiano, Montecatini Terme, Montefiascone - Viterbo Ambiente, Monteflavio, Montorio Romano, Moricone - Diodoro Ecologia, Montelongo - Rotello - San Giuliano di Puglia - Impregico Srl, Montelupo Fiorentino, Montemurlo, Montepulciano, Monterotondo - APM, Monterotondo Marittimo, Montescudaio, Montespertoli, Monteverdi Marittimo, Monticiano, Monza - Impresa Sangalli, Mosciano Sant'Angelo - Diodoro Ecologia, Mottola e Laterza - Meridionale Servizi Ambientali Srl, Muraca Srl, Nicosia - Leukosia, Noventa di Piave, Nuoro - È-Comune srl, Orciano Pisano, Oristano - Formula Ambiente Spa, Orosei - Sceas - Ciclat, Osimo - Astea, Ossago Lodigiano, Palata, Palombara Sabina, Passerano Marmorito, Patti - Pizzo Pippo, Paullo, Perdasdefogu - Eco-Sistemi, Pescia, Pescina - Pulchra Ambiente Srl, Piazza Brembana, Pietrabruna, Pieve a Nievole, Pimonte - Ecogin Srl, Pistoia, Poggio a Caiano, Pomarance, Ponte Buggianese, Posada - Formula Ambiente Spa, Potenza - Acta Spa, Prato, Pratola Peligna - Diodoro Ecologia, Priolo Gargallo - IGM rifiuti industriali, Prossedi, Pulsano - Al.ma. Ecologia Srl, Quarrata, Quarto - DM Technology Srl, Ravello, Rescaldina, Rho - A.Se.R SpA, Rieco - Abruzzo, Rieco - Lazio, Rieco - Marche, Rieti - ASM Rieti Spa, Rignano sull'Arno, Riola Sardo - EffeAmbiente, Ripalimosani, Riparbella, Robecchetto con Induno, Rocca di Papa - DM Technology Srl, Roccella Ionica - Jonica Multiservizi Spa, Rosora, Rovellasca, Sabaudia - Del Prete Srl, Sala Consilina - SuperEco SRL, Salerno - Salerno Pulita Spa, Saluggia, Sambuca Pistoiese, Sammichele di Bari e Casamassima - Meridionale Servizi Ambientali srl, San Casciano in Val di Pesa, San Marcello Piteglio, Sanremo - Amaie Energia e Servizi Srl, Santa Lucia del Mela, Santa Maria a Vico, Santa Maria Capua Vetere - DHI, Santi Cosma e Damiano, Saponara, Saprodir, Sardegna Ecology - Ciclat, Sasom, Scandicci, Scanzorosciate, Scarperia e San Piero, Seab SPA Bolzano, Sennori e Sorso - Gesenu Spa, Sermoneta - Del Prete Srl, Serravalle Pistoiese, Sesto Fiorentino, Sesto San Giovanni - Impresa Sangalli, Sezze - SPL, Sieco Spa, Signa, Silea, Silvi - Diodoro Ecologia, Siniscola - DLR Ambiente - Ciclat, Soleto, Solza, Spoltore - Rieco, Squillace - Sieco Spa, Stefanaconi, Suno, Termoli - Rieco Sud Scarl, Terno d'Isola, Terracina, Terre Roveresche, Tivoli - ASA Tivoli Spa, Toro, Torpè - Eco Flap - Ciclat, Traona, Trappeto, Tricase, Triora, Trivento - Smaltimenti Sud, Turate - Turcato Snc, Unione Basso Biferno - Impregico Srl, Unione Castello di Gerione - Giuliani Environment, Unione Comuni Alta Marmilla - Formula Ambiente Spa, Unione Comuni del Meilogu - Formula Ambiente Spa, Unione Comuni del Villanova - Formula Ambiente Spa, Unione Comuni Terre del Campidano - Formula Ambiente Spa, Unione dei Comuni del Guilcier - Cosir Srl, Unione dei Comuni di Valmalenco, Unione Terra dei Castelli, Ussita, Uzzano, Vaglia, Vaiano, Valfornace, Valle Camonica Servizi Srl, Valle Umbra Servizi S.p.A., Vasto - Pulchra Ambiente Srl, Veritas Spa, Vernio, Vezzano sul Crostolo, Viagrande, Vicchio, Vicoforte, Vieste - Impregico Srl, Villanterio, Villaputzu, Villaricca - Sieco Spa, Villaspeciosa, Vinci, Vitorchiano, Vitulazio - DM Technology Srl, Volsca Ambiente, Volterra, Wipptal, Zambrone - Tecnew Srl |