From b667af0ef6c306e0435d72fdd605b13449635d88 Mon Sep 17 00:00:00 2001
From: 5ila5 <5ila5@users.noreply.github.com>
Date: Tue, 27 Aug 2024 19:58:04 +0200
Subject: [PATCH] add Backend of My Local Services App
You can just search schedule using coordinates
---
README.md | 45 ++++
.../waste_collection_schedule/sources.json | 225 ++++++++++++++++++
.../source/app_my_local_services_au.py | 199 ++++++++++++++++
doc/source/app_my_local_services_au.md | 88 +++++++
info.md | 2 +-
5 files changed, 558 insertions(+), 1 deletion(-)
create mode 100644 custom_components/waste_collection_schedule/waste_collection_schedule/source/app_my_local_services_au.py
create mode 100644 doc/source/app_my_local_services_au.md
diff --git a/README.md b/README.md
index a375ed9e..b44c5a28 100644
--- a/README.md
+++ b/README.md
@@ -29,6 +29,10 @@ If your service provider is not listed, feel free to open a [source request issu
Australia
+- [Adelaide Hills Council](/doc/source/app_my_local_services_au.md) / ahc.sa.gov.au
+- [Adelaide Plains Council](/doc/source/app_my_local_services_au.md) / apc.sa.gov.au
+- [Alexandrina Council](/doc/source/app_my_local_services_au.md) / alexandrina.sa.gov.au
+- [App Backend of My Local Services](/doc/source/app_my_local_services_au.md) / localcouncils.sa.gov.au
- [Armadale (Western Australia)](/doc/source/armadale_wa_gov_au.md) / armadale.wa.gov.au
- [Australian Capital Territory (ACT)](/doc/source/act_gov_au.md) / cityservices.act.gov.au/recycling-and-waste
- [Banyule City Council](/doc/source/banyule_vic_gov_au.md) / banyule.vic.gov.au
@@ -36,21 +40,47 @@ If your service provider is not listed, feel free to open a [source request issu
- [Bayside City Council](/doc/source/impactapps_com_au.md) / bayside.vic.gov.au
- [Bega Valley Shire Council](/doc/source/impactapps_com_au.md) / begavalley.nsw.gov.au
- [Belmont City Council](/doc/source/belmont_wa_gov_au.md) / belmont.wa.gov.au
+- [Berri Barmera Council](/doc/source/app_my_local_services_au.md) / berribarmera.sa.gov.au
- [Blacktown City Council (NSW)](/doc/source/blacktown_nsw_gov_au.md) / blacktown.nsw.gov.au
- [Blue Mountains City Council](/doc/source/impactapps_com_au.md) / bmcc.nsw.gov.au
- [Brisbane City Council](/doc/source/brisbane_qld_gov_au.md) / brisbane.qld.gov.au
- [Burwood City Council](/doc/source/impactapps_com_au.md) / burwood.nsw.gov.au
+- [Campbelltown City Council](/doc/source/app_my_local_services_au.md) / campbelltown.sa.gov.au
- [Campbelltown City Council (NSW)](/doc/source/campbelltown_nsw_gov_au.md) / campbelltown.nsw.gov.au
- [Cardinia Shire Council](/doc/source/cardinia_vic_gov_au.md) / cardinia.vic.gov.au
+- [City of Adelaide](/doc/source/app_my_local_services_au.md) / adelaidecitycouncil.com
- [City of Ballarat](/doc/source/ballarat_vic_gov_au.md) / ballarat.vic.gov.au
+- [City of Burnside](/doc/source/app_my_local_services_au.md) / burnside.sa.gov.au
- [City of Canada Bay Council](/doc/source/canadabay_nsw_gov_au.md) / canadabay.nsw.gov.au
+- [City of Charles Sturt](/doc/source/app_my_local_services_au.md) / charlessturt.sa.gov.au
- [City of Cockburn](/doc/source/cockburn_wa_gov_au.md) / cockburn.wa.gov.au
- [City of Darebin](/doc/source/darebin_vic_gov_au.md) / darebin.vic.gov.au
- [City of Greater Geelong](/doc/source/geelongaustralia_com_au.md) / geelongaustralia.com.au
- [City of Kingston](/doc/source/kingston_vic_gov_au.md) / kingston.vic.gov.au
+- [City of Mitcham](/doc/source/app_my_local_services_au.md) / mitchamcouncil.sa.gov.au
+- [City of Mount Gambier](/doc/source/app_my_local_services_au.md) / mountgambier.sa.gov.au
+- [City of Norwood Payneham and St Peters](/doc/source/app_my_local_services_au.md) / npsp.sa.gov.au
+- [City of Onkaparinga](/doc/source/app_my_local_services_au.md) / onkaparingacity.com
- [City of Onkaparinga Council](/doc/source/onkaparingacity_com.md) / onkaparingacity.com
+- [City of Port Adelaide Enfield](/doc/source/app_my_local_services_au.md) / cityofpae.sa.gov.au
+- [City of Prospect](/doc/source/app_my_local_services_au.md) / prospect.sa.gov.au
+- [City of Salisbury](/doc/source/app_my_local_services_au.md) / salisbury.sa.gov.au
+- [City of West Torrens](/doc/source/app_my_local_services_au.md) / westtorrens.sa.gov.au
+- [City of Whyalla](/doc/source/app_my_local_services_au.md) / whyalla.sa.gov.au
+- [Clare and Gilbert Valleys Council](/doc/source/app_my_local_services_au.md) / claregilbertvalleys.sa.gov.au
+- [Coorong District Council](/doc/source/app_my_local_services_au.md) / coorong.sa.gov.au
+- [Council of Copper Coast](/doc/source/app_my_local_services_au.md) / coppercoast.sa.gov.au
- [Cowra Council](/doc/source/impactapps_com_au.md) / cowracouncil.com.au
- [Cumberland Council (NSW)](/doc/source/cumberland_nsw_gov_au.md) / cumberland.nsw.gov.au
+- [District Council of Barunga West](/doc/source/app_my_local_services_au.md) / barungawest.sa.gov.au
+- [District Council of Ceduna](/doc/source/app_my_local_services_au.md) / ceduna.sa.gov.au
+- [District Council of Cleve](/doc/source/app_my_local_services_au.md) / cleve.sa.gov.au
+- [District Council of Elliston](/doc/source/app_my_local_services_au.md) / elliston.sa.gov.au
+- [District Council of Loxton Waikerie](/doc/source/app_my_local_services_au.md) / loxtonwaikerie.sa.gov.au
+- [District Council of Mount Barker](/doc/source/app_my_local_services_au.md) / mountbarker.sa.gov.au
+- [District Council of Mount Remarkable](/doc/source/app_my_local_services_au.md) / mtr.sa.gov.au
+- [District Council of Robe](/doc/source/app_my_local_services_au.md) / robe.sa.gov.au
+- [District Council of Streaky Bay](/doc/source/app_my_local_services_au.md) / streakybay.sa.gov.au
- [Forbes Shire Council](/doc/source/impactapps_com_au.md) / forbes.nsw.gov.au
- [Frankston City Council](/doc/source/frankston_vic_gov_au.md) / frankston.gov.au
- [Gold Coast City Council](/doc/source/goldcoast_qld_gov_au.md) / goldcoast.qld.gov.au
@@ -64,6 +94,7 @@ If your service provider is not listed, feel free to open a [source request issu
- [Knox City Council](/doc/source/knox_vic_gov_au.md) / knox.vic.gov.au
- [Ku-ring-gai Council](/doc/source/kuringgai_nsw_gov_au.md) / krg.nsw.gov.au
- [Lake Macquarie City Council](/doc/source/lakemac_nsw_gov_au.md) / lakemac.com.au
+- [Light Regional Council](/doc/source/app_my_local_services_au.md) / light.sa.gov.au
- [Lithgow City Council](/doc/source/impactapps_com_au.md) / lithgow.nsw.gov.au
- [Livingstone Shire Council](/doc/source/impactapps_com_au.md) / livingstone.qld.gov.au
- [Loddon Shire Council](/doc/source/impactapps_com_au.md) / loddon.vic.gov.au
@@ -74,37 +105,51 @@ If your service provider is not listed, feel free to open a [source request issu
- [Maroondah City Council](/doc/source/maroondah_vic_gov_au.md) / maroondah.vic.gov.au
- [Melton City Council](/doc/source/melton_vic_gov_au.md) / melton.vic.gov.au
- [Merri-bek City Council](/doc/source/merri_bek_vic_gov_au.md) / merri-bek.vic.gov.au
+- [Mid Murray Council](/doc/source/app_my_local_services_au.md) / mid-murray.sa.gov.au
- [Moira Shire Council](/doc/source/impactapps_com_au.md) / moira.vic.gov.au
- [Moree Plains Shire Council](/doc/source/impactapps_com_au.md) / mpsc.nsw.gov.au
- [Moreton Bay](/doc/ics/moretonbay_qld_gov_au.md) / moretonbay.qld.gov.au
- [Mosman Council](/doc/source/mosman_nsw_gov_au.md) / mosman.nsw.gov.au
+- [Naracoorte Lucindale Council](/doc/source/app_my_local_services_au.md) / naracoortelucindale.sa.gov.au
- [Nillumbik Shire Council](/doc/source/nillumbik_vic_gov_au.md) / nillumbik.vic.gov.au
- [North Adelaide Waste Management Authority](/doc/source/nawma_sa_gov_au.md) / nawma.sa.gov.au
+- [Northern Areas Council](/doc/source/app_my_local_services_au.md) / nacouncil.sa.gov.au/page.aspx
- [Penrith City Council](/doc/source/impactapps_com_au.md) / penrithcity.nsw.gov.au
- [Port Adelaide Enfield, South Australia](/doc/source/portenf_sa_gov_au.md) / ecouncil.portenf.sa.gov.au
+- [Port Augusta City Council](/doc/source/app_my_local_services_au.md) / portaugusta.sa.gov.au
- [Port Macquarie Hastings Council](/doc/source/impactapps_com_au.md) / pmhc.nsw.gov.au
+- [Port Pirie Regional Council](/doc/source/app_my_local_services_au.md) / pirie.sa.gov.au
- [Port Stephens Council](/doc/source/portstephens_nsw_gov_au.md) / portstephens.nsw.gov.au
- [Queanbeyan-Palerang Regional Council](/doc/source/impactapps_com_au.md) / qprc.nsw.gov.au
- [RecycleSmart](/doc/source/recyclesmart_com.md) / recyclesmart.com
- [Redland City Council (QLD)](/doc/source/redland_qld_gov_au.md) / redland.qld.gov.au
+- [Regional Council of Goyder](/doc/source/app_my_local_services_au.md) / goyder.sa.gov.au
+- [Renmark Paringa Council](/doc/source/app_my_local_services_au.md) / renmarkparinga.sa.gov.au
+- [Rural City of Murray Bridge](/doc/source/app_my_local_services_au.md) / murraybridge.sa.gov.au
- [Shellharbour City Council](/doc/source/shellharbourwaste_com_au.md) / shellharbourwaste.com.au
- [Singleton Council](/doc/source/impactapps_com_au.md) / singleton.nsw.gov.au
- [Snowy Valleys Council](/doc/source/impactapps_com_au.md) / snowyvalleys.nsw.gov.au
- [South Burnett Regional Council](/doc/source/impactapps_com_au.md) / southburnett.qld.gov.au
+- [Southern Mallee District Council](/doc/source/app_my_local_services_au.md) / southernmallee.sa.gov.au
- [Stirling](/doc/source/stirling_wa_gov_au.md) / stirling.wa.gov.au
- [Stonnington City Council](/doc/source/stonnington_vic_gov_au.md) / stonnington.vic.gov.au
+- [The Flinders Ranges Council](/doc/source/app_my_local_services_au.md) / frc.sa.gov.au/page.aspx
- [The Hawkesbury City Council, Sydney](/doc/source/hawkesbury_nsw_gov_au.md) / hawkesbury.nsw.gov.au
- [The Hills Shire Council, Sydney](/doc/source/thehills_nsw_gov_au.md) / thehills.nsw.gov.au
- [Town of Victoria Park](/doc/source/victoriapark_wa_gov_au.md) / victoriapark.wa.gov.au
+- [Town of Walkerville](/doc/source/app_my_local_services_au.md) / walkerville.sa.gov.au
- [Townsville](/doc/source/townsville_qld_gov_au.md) / townsville.qld.gov.au
- [Unley City Council (SA)](/doc/source/unley_sa_gov_au.md) / unley.sa.gov.au
+- [Wakefield Regional Council](/doc/source/app_my_local_services_au.md) / wakefieldrc.sa.gov.au
- [Wellington Shire Council](/doc/source/impactapps_com_au.md) / wellington.vic.gov.au
- [Whitehorse City Counfil](/doc/source/whitehorse_vic_gov_au.md) / whitehorse.vic.gov.au
- [Whittlesea City Council](/doc/source/whittlesea_vic_gov_au.md) / whittlesea.vic.gov.au/My-Neighbourhood
- [Wollondilly Shire Council](/doc/source/wollondilly_nsw_gov_au.md) / wollondilly.nsw.gov.au
- [Wollongong City Council](/doc/source/wollongongwaste_com_au.md) / wollongongwaste.com
- [Wyndham City Council, Melbourne](/doc/source/wyndham_vic_gov_au.md) / wyndham.vic.gov.au
+- [Yankalilla District Council](/doc/source/app_my_local_services_au.md) / yankalilla.sa.gov.au
- [Yarra Ranges Council](/doc/source/yarra_ranges_vic_gov_au.md) / yarraranges.vic.gov.au
+- [Yorke Peninsula Council](/doc/source/app_my_local_services_au.md) / yorke.sa.gov.au
diff --git a/custom_components/waste_collection_schedule/sources.json b/custom_components/waste_collection_schedule/sources.json
index ab8f1075..952d9a0a 100644
--- a/custom_components/waste_collection_schedule/sources.json
+++ b/custom_components/waste_collection_schedule/sources.json
@@ -1,5 +1,25 @@
{
"Australia": [
+ {
+ "title": "Adelaide Hills Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "Adelaide Plains Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "Alexandrina Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "App Backend of My Local Services",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Armadale (Western Australia)",
"module": "armadale_wa_gov_au",
@@ -41,6 +61,11 @@
"module": "belmont_wa_gov_au",
"default_params": {}
},
+ {
+ "title": "Berri Barmera Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Blacktown City Council (NSW)",
"module": "blacktown_nsw_gov_au",
@@ -65,6 +90,11 @@
"service": "Burwood City Council"
}
},
+ {
+ "title": "Campbelltown City Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Campbelltown City Council (NSW)",
"module": "campbelltown_nsw_gov_au",
@@ -75,16 +105,31 @@
"module": "cardinia_vic_gov_au",
"default_params": {}
},
+ {
+ "title": "City of Adelaide",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "City of Ballarat",
"module": "ballarat_vic_gov_au",
"default_params": {}
},
+ {
+ "title": "City of Burnside",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "City of Canada Bay Council",
"module": "canadabay_nsw_gov_au",
"default_params": {}
},
+ {
+ "title": "City of Charles Sturt",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "City of Cockburn",
"module": "cockburn_wa_gov_au",
@@ -105,11 +150,71 @@
"module": "kingston_vic_gov_au",
"default_params": {}
},
+ {
+ "title": "City of Mitcham",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "City of Mount Gambier",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "City of Norwood Payneham and St Peters",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "City of Onkaparinga",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "City of Onkaparinga Council",
"module": "onkaparingacity_com",
"default_params": {}
},
+ {
+ "title": "City of Port Adelaide Enfield",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "City of Prospect",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "City of Salisbury",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "City of West Torrens",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "City of Whyalla",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "Clare and Gilbert Valleys Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "Coorong District Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "Council of Copper Coast",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Cowra Council",
"module": "impactapps_com_au",
@@ -122,6 +227,51 @@
"module": "cumberland_nsw_gov_au",
"default_params": {}
},
+ {
+ "title": "District Council of Barunga West",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "District Council of Ceduna",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "District Council of Cleve",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "District Council of Elliston",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "District Council of Loxton Waikerie",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "District Council of Mount Barker",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "District Council of Mount Remarkable",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "District Council of Robe",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "District Council of Streaky Bay",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Forbes Shire Council",
"module": "impactapps_com_au",
@@ -191,6 +341,11 @@
"module": "lakemac_nsw_gov_au",
"default_params": {}
},
+ {
+ "title": "Light Regional Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Lithgow City Council",
"module": "impactapps_com_au",
@@ -247,6 +402,11 @@
"module": "merri_bek_vic_gov_au",
"default_params": {}
},
+ {
+ "title": "Mid Murray Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Moira Shire Council",
"module": "impactapps_com_au",
@@ -271,6 +431,11 @@
"module": "mosman_nsw_gov_au",
"default_params": {}
},
+ {
+ "title": "Naracoorte Lucindale Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Nillumbik Shire Council",
"module": "nillumbik_vic_gov_au",
@@ -281,6 +446,11 @@
"module": "nawma_sa_gov_au",
"default_params": {}
},
+ {
+ "title": "Northern Areas Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Penrith City Council",
"module": "impactapps_com_au",
@@ -293,6 +463,11 @@
"module": "portenf_sa_gov_au",
"default_params": {}
},
+ {
+ "title": "Port Augusta City Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Port Macquarie Hastings Council",
"module": "impactapps_com_au",
@@ -300,6 +475,11 @@
"service": "Port Macquarie Hastings Council"
}
},
+ {
+ "title": "Port Pirie Regional Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Port Stephens Council",
"module": "portstephens_nsw_gov_au",
@@ -322,6 +502,21 @@
"module": "redland_qld_gov_au",
"default_params": {}
},
+ {
+ "title": "Regional Council of Goyder",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "Renmark Paringa Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
+ {
+ "title": "Rural City of Murray Bridge",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Shellharbour City Council",
"module": "shellharbourwaste_com_au",
@@ -348,6 +543,11 @@
"service": "South Burnett Regional Council"
}
},
+ {
+ "title": "Southern Mallee District Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Stirling",
"module": "stirling_wa_gov_au",
@@ -358,6 +558,11 @@
"module": "stonnington_vic_gov_au",
"default_params": {}
},
+ {
+ "title": "The Flinders Ranges Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "The Hawkesbury City Council, Sydney",
"module": "hawkesbury_nsw_gov_au",
@@ -373,6 +578,11 @@
"module": "victoriapark_wa_gov_au",
"default_params": {}
},
+ {
+ "title": "Town of Walkerville",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Townsville",
"module": "townsville_qld_gov_au",
@@ -383,6 +593,11 @@
"module": "unley_sa_gov_au",
"default_params": {}
},
+ {
+ "title": "Wakefield Regional Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Wellington Shire Council",
"module": "impactapps_com_au",
@@ -415,10 +630,20 @@
"module": "wyndham_vic_gov_au",
"default_params": {}
},
+ {
+ "title": "Yankalilla District Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
+ },
{
"title": "Yarra Ranges Council",
"module": "yarra_ranges_vic_gov_au",
"default_params": {}
+ },
+ {
+ "title": "Yorke Peninsula Council",
+ "module": "app_my_local_services_au",
+ "default_params": {}
}
],
"Austria": [
diff --git a/custom_components/waste_collection_schedule/waste_collection_schedule/source/app_my_local_services_au.py b/custom_components/waste_collection_schedule/waste_collection_schedule/source/app_my_local_services_au.py
new file mode 100644
index 00000000..c3680507
--- /dev/null
+++ b/custom_components/waste_collection_schedule/waste_collection_schedule/source/app_my_local_services_au.py
@@ -0,0 +1,199 @@
+from datetime import datetime, timedelta
+
+import requests
+from dateutil.rrule import WEEKLY, rrule, weekday
+from waste_collection_schedule import Collection # type: ignore[attr-defined]
+
+TITLE = "App Backend of My Local Services"
+DESCRIPTION = "Source for App Backend of My Local Services."
+URL = "https://www.localcouncils.sa.gov.au"
+TEST_CASES = {
+ "35 Laurel Terrace; Robe SA 5276; Australia": {
+ "lat": "-37.1647585",
+ "lon": "139.7851318",
+ },
+ "18 Graeber Road, Lobethal SA 5241": {
+ "lat": "-34.916506399999996",
+ "lon": "138.8820226",
+ },
+ "25 Wyatt St, Mount Gambier SA 5290, Australia": {
+ "lat": "-37.824624961239614",
+ "lon": "140.77720893956482",
+ },
+}
+
+EXTRA_INFO = [ # list from https://www.localcouncils.sa.gov.au/my-local-services-app#accordion__target-1426969-2
+ {"url": "http://www.adelaidecitycouncil.com", "title": "City of Adelaide"},
+ {"url": "https://www.ahc.sa.gov.au", "title": "Adelaide Hills Council"},
+ {"url": "http://www.apc.sa.gov.au", "title": "Adelaide Plains Council"},
+ {"url": "http://www.alexandrina.sa.gov.au", "title": "Alexandrina Council"},
+ {"url": "http://www.berribarmera.sa.gov.au", "title": "Berri Barmera Council"},
+ {"url": "http://www.campbelltown.sa.gov.au", "title": "Campbelltown City Council"},
+ {"url": "http://www.burnside.sa.gov.au", "title": "City of Burnside"},
+ {"url": "http://www.charlessturt.sa.gov.au", "title": "City of Charles Sturt"},
+ {"url": "http://www.mountgambier.sa.gov.au", "title": "City of Mount Gambier"},
+ {"url": "http://www.mitchamcouncil.sa.gov.au", "title": "City of Mitcham"},
+ {
+ "url": "https://www.npsp.sa.gov.au",
+ "title": "City of Norwood Payneham and St Peters",
+ },
+ {"url": "http://www.onkaparingacity.com", "title": "City of Onkaparinga"},
+ {
+ "url": "https://www.cityofpae.sa.gov.au",
+ "title": "City of Port Adelaide Enfield",
+ },
+ {"url": "http://www.prospect.sa.gov.au", "title": "City of Prospect"},
+ {"url": "http://www.salisbury.sa.gov.au", "title": "City of Salisbury"},
+ {"url": "http://www.westtorrens.sa.gov.au", "title": "City of West Torrens"},
+ {"url": "http://www.whyalla.sa.gov.au", "title": "City of Whyalla"},
+ {
+ "url": "http://www.claregilbertvalleys.sa.gov.au",
+ "title": "Clare and Gilbert Valleys Council",
+ },
+ {"url": "http://www.coorong.sa.gov.au", "title": "Coorong District Council"},
+ {
+ "url": "http://www.barungawest.sa.gov.au",
+ "title": "District Council of Barunga West",
+ },
+ {"url": "http://www.cleve.sa.gov.au", "title": "District Council of Cleve"},
+ {"url": "http://www.coppercoast.sa.gov.au", "title": "Council of Copper Coast"},
+ {"url": "http://www.ceduna.sa.gov.au", "title": "District Council of Ceduna"},
+ {"url": "http://www.elliston.sa.gov.au", "title": "District Council of Elliston"},
+ {
+ "url": "http://www.loxtonwaikerie.sa.gov.au",
+ "title": "District Council of Loxton Waikerie",
+ },
+ {
+ "url": "https://www.mountbarker.sa.gov.au",
+ "title": "District Council of Mount Barker",
+ },
+ {
+ "url": "https://www.mtr.sa.gov.au",
+ "title": "District Council of Mount Remarkable",
+ },
+ {"url": "https://www.robe.sa.gov.au", "title": "District Council of Robe"},
+ {
+ "url": "http://www.streakybay.sa.gov.au",
+ "title": "District Council of Streaky Bay",
+ },
+ {"url": "http://www.light.sa.gov.au", "title": "Light Regional Council"},
+ {"url": "http://www.mid-murray.sa.gov.au", "title": "Mid Murray Council"},
+ {
+ "url": "http://www.naracoortelucindale.sa.gov.au",
+ "title": "Naracoorte Lucindale Council",
+ },
+ {
+ "url": "https://www.nacouncil.sa.gov.au/page.aspx",
+ "title": "Northern Areas Council",
+ },
+ {"url": "http://www.portaugusta.sa.gov.au", "title": "Port Augusta City Council"},
+ {"url": "http://www.pirie.sa.gov.au", "title": "Port Pirie Regional Council"},
+ {"url": "http://www.goyder.sa.gov.au", "title": "Regional Council of Goyder"},
+ {"url": "http://www.renmarkparinga.sa.gov.au", "title": "Renmark Paringa Council"},
+ {
+ "url": "http://www.murraybridge.sa.gov.au",
+ "title": "Rural City of Murray Bridge",
+ },
+ {
+ "url": "http://www.southernmallee.sa.gov.au",
+ "title": "Southern Mallee District Council",
+ },
+ {
+ "url": "http://www.frc.sa.gov.au/page.aspx",
+ "title": "The Flinders Ranges Council",
+ },
+ {"url": "http://www.walkerville.sa.gov.au", "title": "Town of Walkerville"},
+ {"url": "http://www.wakefieldrc.sa.gov.au", "title": "Wakefield Regional Council"},
+ {"url": "http://www.yankalilla.sa.gov.au", "title": "Yankalilla District Council"},
+ {"url": "http://yorke.sa.gov.au", "title": "Yorke Peninsula Council"},
+]
+
+COUNTRY = "au"
+
+
+ICON_MAP = {
+ "Trash": "mdi:trash-can",
+ "Glass": "mdi:bottle-soda",
+ "Bio": "mdi:leaf",
+ "Paper": "mdi:package-variant",
+ "Recycle": "mdi:recycle",
+}
+
+
+API_URL = "https://services1.arcgis.com/37apdbovSVEwr4YE/ArcGIS/rest/services/MyLocalServices/FeatureServer/{endpoint}/query?f=pjson&geometry=%7B%22x%22:{lon},%22y%22:{lat},%22spatialReference%22:%7B%22wkid%22:4326%7D%7D&geometryType=esriGeometryPoint&inSR=4326&outFields=Waste_Type,Col_Day,Col_Freq,Colour,Col_Offset,Alternate,Exclusion,Additional&returnCountOnly=false&returnGeometry=false&returnIdsOnly=false&spatialRel=esriSpatialRelIntersects"
+ENDPOINTS = (0, 1, 2, 4)
+
+
+class Source:
+ def __init__(self, lat: float, lon: float):
+ if not isinstance(lat, float):
+ try:
+ lat = float(lat)
+ except ValueError:
+ raise ValueError("Latitude must be a float")
+ if not isinstance(lon, float):
+ try:
+ lon = float(lon)
+ except ValueError:
+ raise ValueError("Longitude must be a float")
+
+ self._lat: float = lat
+ self._lon: float = lon
+
+ def fetch(self) -> list[Collection]:
+ # get json file
+ entries = []
+ for endpoint in ENDPOINTS:
+ r = requests.get(
+ API_URL.format(endpoint=endpoint, lat=self._lat, lon=self._lon)
+ )
+ r.raise_for_status()
+ for features in r.json()["features"]:
+ data = features["attributes"]
+ exclusions_str: str | None = data["Exclusion"]
+ additionals_str: str | None = data["Additional"]
+ waste_type: str = data["Waste_Type"]
+
+ weekday_int: int = (
+ data["Col_Day"] + -2
+ ) % 7 # Normalise to 0(monday)-6(sunday) as response is 1(sunday)-7(saturday)
+ freq: int = data["Col_Freq"]
+ offset: int = data["Col_Offset"]
+
+ start = datetime.now().replace(
+ month=1, day=1, hour=0, minute=0, second=0, microsecond=0
+ ).date() + timedelta(weeks=offset)
+ end = datetime.now().replace(
+ hour=0, minute=0, second=0, microsecond=0
+ ).date() + timedelta(days=365)
+
+ dates = [
+ d.date()
+ for d in rrule(
+ WEEKLY,
+ byweekday=weekday(weekday_int),
+ interval=freq,
+ dtstart=start,
+ until=end,
+ )
+ ]
+ if additionals_str:
+ for additional_str in additionals_str.split(", "):
+ dates.append(
+ datetime.strptime(additional_str, "%Y-%m-%d").date()
+ )
+ if exclusions_str:
+ for exclusion_str in exclusions_str.split(", "):
+ try:
+ dates.remove(
+ datetime.strptime(exclusion_str, "%Y-%m-%d").date()
+ )
+ except ValueError:
+ print("Exclusion date not found in dates", exclusion_str)
+
+ icon = ICON_MAP.get(waste_type.upper()) # Collection icon
+
+ for d in dates:
+ entries.append(Collection(date=d, t=waste_type, icon=icon))
+
+ return entries
diff --git a/doc/source/app_my_local_services_au.md b/doc/source/app_my_local_services_au.md
new file mode 100644
index 00000000..25af2dfa
--- /dev/null
+++ b/doc/source/app_my_local_services_au.md
@@ -0,0 +1,88 @@
+# App Backend of My Local Services
+
+Support for schedules provided by [App Backend of My Local Services](https://www.localcouncils.sa.gov.au), serving App Backend of My Local Services, Australia.
+
+## Configuration via configuration.yaml
+
+```yaml
+waste_collection_schedule:
+ sources:
+ - name: app_my_local_services_au
+ args:
+ lat: LATITUDE
+ lon: LONGITUDE
+
+```
+
+### Configuration Variables
+
+**lat**
+*(String) (required)*
+
+**lon**
+*(String) (required)*
+
+## Example
+
+```yaml
+waste_collection_schedule:
+ sources:
+ - name: app_my_local_services_au
+ args:
+ lat: -34.916506399999996
+ lon: 138.8820226
+
+```
+
+## Supported Councils
+
+The Website says that the following councils are supported, but we did not test all of them. If you find that your council is not supported, please open an issue.
+
+- City of Adelaide
+- Adelaide Hills Council
+- Adelaide Plains Council
+- Alexandrina Council
+- Berri Barmera Council
+- Campbelltown City Council
+- City of Burnside
+- City of Charles Sturt
+- City of Mount Gambier
+- City of Mitcham
+- City of Norwood Payneham and St Peters
+- City of Onkaparinga
+- City of Port Adelaide Enfield
+- City of Prospect
+- City of Salisbury
+- City of West Torrens
+- City of Whyalla
+- Clare and Gilbert Valleys Council
+- Coorong District Council
+- District Council of Barunga West
+- District Council of Cleve
+- Council of Copper Coast
+- District Council of Ceduna
+- District Council of Elliston
+- District Council of Loxton Waikerie
+- District Council of Mount Barker
+- District Council of Mount Remarkable
+- District Council of Robe
+- District Council of Streaky Bay
+- Light Regional Council
+- Mid Murray Council
+- Naracoorte Lucindale Council
+- Northern Areas Council
+- Port Augusta City Council
+- Port Pirie Regional Council
+- Regional Council of Goyder
+- Renmark Paringa Council
+- Rural City of Murray Bridge
+- Southern Mallee District Council
+- The Flinders Ranges Council
+- Town of Walkerville
+- Wakefield Regional Council
+- Yankalilla District Council
+- Yorke Peninsula Council
+
+## How to get the source argument
+
+Find the latitude and longitude of your address using [Google Maps](https://www.google.com/maps) or any other maps service. It should be as accurate as possible(many decimal places) to get the correct schedule.
diff --git a/info.md b/info.md
index 58be5590..ee69b32a 100644
--- a/info.md
+++ b/info.md
@@ -16,7 +16,7 @@ Waste collection schedules from service provider web sites are updated daily, de
|--|--|
| Generic | ICS / iCal files |
| Static | User-defined dates or repeating date patterns |
-| Australia | Armadale (Western Australia), Australian Capital Territory (ACT), Banyule City Council, Baw Baw Shire Council, Bayside City Council, Bega Valley Shire Council, Belmont City Council, Blacktown City Council (NSW), Blue Mountains City Council, Brisbane City Council, Burwood City Council, Campbelltown City Council (NSW), Cardinia Shire Council, City of Ballarat, City of Canada Bay Council, City of Cockburn, City of Darebin, City of Greater Geelong, City of Kingston, City of Onkaparinga Council, Cowra Council, Cumberland Council (NSW), Forbes Shire Council, Frankston City Council, Gold Coast City Council, Gwydir Shire Council, Hobsons Bay City Council, Hornsby Shire Council, Hume City Council, Impact Apps, Inner West Council (NSW), Ipswich City Council, Knox City Council, Ku-ring-gai Council, Lake Macquarie City Council, Lithgow City Council, Livingstone Shire Council, Loddon Shire Council, Logan City Council, Macedon Ranges Shire Council, Mansfield Shire Council, Maribyrnong Council, Maroondah City Council, Melton City Council, Merri-bek City Council, Moira Shire Council, Moree Plains Shire Council, Moreton Bay, Mosman Council, Nillumbik Shire Council, North Adelaide Waste Management Authority, Penrith City Council, Port Adelaide Enfield, South Australia, Port Macquarie Hastings Council, Port Stephens Council, Queanbeyan-Palerang Regional Council, RecycleSmart, Redland City Council (QLD), Shellharbour City Council, Singleton Council, Snowy Valleys Council, South Burnett Regional Council, Stirling, Stonnington City Council, The Hawkesbury City Council, Sydney, The Hills Shire Council, Sydney, Town of Victoria Park, Townsville, Unley City Council (SA), Wellington Shire Council, Whitehorse City Counfil, Whittlesea City Council, Wollondilly Shire Council, Wollongong City Council, Wyndham City Council, Melbourne, Yarra Ranges Council |
+| Australia | Adelaide Hills Council, Adelaide Plains Council, Alexandrina Council, App Backend of My Local Services, Armadale (Western Australia), Australian Capital Territory (ACT), Banyule City Council, Baw Baw Shire Council, Bayside City Council, Bega Valley Shire Council, Belmont City Council, Berri Barmera Council, Blacktown City Council (NSW), Blue Mountains City Council, Brisbane City Council, Burwood City Council, Campbelltown City Council, Campbelltown City Council (NSW), Cardinia Shire Council, City of Adelaide, City of Ballarat, City of Burnside, City of Canada Bay Council, City of Charles Sturt, City of Cockburn, City of Darebin, City of Greater Geelong, City of Kingston, City of Mitcham, City of Mount Gambier, City of Norwood Payneham and St Peters, City of Onkaparinga, City of Onkaparinga Council, City of Port Adelaide Enfield, City of Prospect, City of Salisbury, City of West Torrens, City of Whyalla, Clare and Gilbert Valleys Council, Coorong District Council, Council of Copper Coast, Cowra Council, Cumberland Council (NSW), District Council of Barunga West, District Council of Ceduna, District Council of Cleve, District Council of Elliston, District Council of Loxton Waikerie, District Council of Mount Barker, District Council of Mount Remarkable, District Council of Robe, District Council of Streaky Bay, Forbes Shire Council, Frankston City Council, Gold Coast City Council, Gwydir Shire Council, Hobsons Bay City Council, Hornsby Shire Council, Hume City Council, Impact Apps, Inner West Council (NSW), Ipswich City Council, Knox City Council, Ku-ring-gai Council, Lake Macquarie City Council, Light Regional Council, Lithgow City Council, Livingstone Shire Council, Loddon Shire Council, Logan City Council, Macedon Ranges Shire Council, Mansfield Shire Council, Maribyrnong Council, Maroondah City Council, Melton City Council, Merri-bek City Council, Mid Murray Council, Moira Shire Council, Moree Plains Shire Council, Moreton Bay, Mosman Council, Naracoorte Lucindale Council, Nillumbik Shire Council, North Adelaide Waste Management Authority, Northern Areas Council, Penrith City Council, Port Adelaide Enfield, South Australia, Port Augusta City Council, Port Macquarie Hastings Council, Port Pirie Regional Council, Port Stephens Council, Queanbeyan-Palerang Regional Council, RecycleSmart, Redland City Council (QLD), Regional Council of Goyder, Renmark Paringa Council, Rural City of Murray Bridge, Shellharbour City Council, Singleton Council, Snowy Valleys Council, South Burnett Regional Council, Southern Mallee District Council, Stirling, Stonnington City Council, The Flinders Ranges Council, The Hawkesbury City Council, Sydney, The Hills Shire Council, Sydney, Town of Victoria Park, Town of Walkerville, Townsville, Unley City Council (SA), Wakefield Regional Council, Wellington Shire Council, Whitehorse City Counfil, Whittlesea City Council, Wollondilly Shire Council, Wollongong City Council, Wyndham City Council, Melbourne, Yankalilla District Council, Yarra Ranges Council, Yorke Peninsula Council |
| Austria | Abfallverband Hollabrunn, Abfallverband Korneuburg, Abfallverband Schwechat, Abfallwirtschaft der Stadt St. Pölten, Abfallwirtschaft Stadt Krems, Afritz am See, Alpbach, Altenmarkt an der Triesting, Althofen, Andau, Angath, Apetlon, App CITIES, Arnoldstein, Aschau im Zillertal, AWV Neunkirchen, AWV Wr. Neustadt, Bad Blumau, Bad Gleichenberg, Bad Häring, Bad Kleinkirchheim, Bad Loipersdorf, Bad Radkersburg, Bad Tatzmannsdorf, Bad Waltersdorf, Baldramsdorf, Berg im Drautal, Berndorf bei Salzburg, Bernstein, Bildein, Brandenberg, Breitenbach am Inn, Breitenbrunn am Neusiedler See, Breitenstein, Bromberg, Bruckneudorf, Buch - St. Magdalena, Burgau, Burgauberg-Neudauberg, Burgenländischer Müllverband, Dechantskirchen, Dellach, Dellach im Drautal, Deutsch Goritz, Deutsch Jahrndorf, Deutsch Kaltenbrunn, Deutschkreutz, Die NÖ Umweltverbände, Dobl-Zwaring, Drasenhofen, Draßmarkt, Ebenthal in Kärnten, Eberau, Eberndorf, Ebersdorf, Eberstein, Edelsbach bei Feldbach, Eggenburg, Eggersdorf bei Graz, Eichgraben, Eisenstadt, Eugendorf, Fehring, Feistritz im Rosental, Feistritz ob Bleiburg, Feldbach, Feldkirchen in Kärnten, Feldkirchen in Kärnten, Ferlach, Ferndorf, Ferndorf, Finkenstein am Faaker See, Frankenau-Unterpullendorf, Frauenkirchen, Frauenstein, Freistadt, Fresach, Friedberg, Frohnleiten, Fürstenfeld, Gabersdorf, GABL, Gattendorf, GAUL Laa an der Thaya, GAUM Mistelbach, GDA Amstetten, Gemeindeverband Horn, Gitschtal, Gitschtal, Globasnitz, Gmünd in Kärnten, Gols, Grafendorf bei Hartberg, Grafenschachen, Grafenstein, Grafenstein, Gratkorn, Gratwein-Straßengel, Greifenburg, Großkirchheim, Großsteinbach, Großwarasdorf, Großwilfersdorf, Gutenberg, Guttaring, GV Gmünd, GV Krems, GV Zwettl, GVA Baden, GVA Baden, GVA Lilienfeld, GVA Mödling, GVA Tulln, GVA Waidhofen/Thaya, GVU Bezirk Gänserndorf, GVU Melk, GVU Scheibbs, GVU Scheibbs, GVU St. Pölten, Güssing, Hagenberg im Mühlkreis, Hannersdorf, Hartberg, Heiligenblut am Großglockner, Heiligenkreuz, Heiligenkreuz am Waasen, Heimschuh, Henndorf am Wallersee, Henndorf am Wallersee, Hermagor-Pressegger See, Hirm, Hofstätten an der Raab, Hopfgarten im Brixental, Horitschon, Horn, Hornstein, Hüttenberg, Ilz, infeo, Innsbrucker Kommunalbetriebe, Inzenhof, Irschen, Jabing, Jagerberg, Kaindorf, Kaisersdorf, Kalsdorf bei Graz, Kapfenstein, Kemeten, Keutschach am See, Kirchbach, Kirchbach-Zerlach, Kirchberg an der Raab, Kirchbichl, Kirchdorf in Tirol, Kittsee, Klagenfurt am Wörthersee, Kleblach-Lind, Kleinmürbisch, Klingenbach, Klosterneuburg, Klöch, Kobersdorf, Kohfidisch, Korneuburg, Krems in Kärnten, Krensdorf, Krumpendorf am Wörthersee, Kuchl, Kundl, Kössen, Köstendorf, Kötschach-Mauthen, Köttmannsdorf, Laa an der Thaya, Lackenbach, Lackendorf, Langau, Langenrohr, Leibnitz, Leithaprodersdorf, Lendorf, Leoben, Lesachtal, Leutschach an der Weinstraße, Lieboch, Linz AG, Litzelsdorf, Lockenhaus, Loipersbach im Burgenland, Ludmannsdorf, Lurnfeld, Magdalensberg, Mallnitz, Malta, Maria Rain, Maria Saal, Maria Wörth, Mariasdorf, Markt Hartmannsdorf, Markt Neuhodis, Markt Piesting Dreistetten, Marktgemeinde Edlitz, Marz, Mattersburg, Mattsee, Mayer Recycling, Meiseldorf, Melk, Mettersdorf am Saßbach, Miesenbach, Millstatt, Mischendorf, Mistelbach, Mitterdorf an der Raab, Moosburg, Mureck, Mönchhof, Mörbisch am See, Mörtschach, Mühldorf, Müll App, Münster, Neudorf bei Parndorf, Neudörfl, Neufeld an der Leitha, Neumarkt am Wallersee, Neusiedl am See, Neustift bei Güssing, Nickelsdorf, Oberdrauburg, Oberndorf in Tirol, Oberpullendorf, Oberschützen, Obertrum am See, Oberwart, Oslip, Ottendorf an der Rittschein, Ottobrunn, Paldau, Pama, Pamhagen, Parndorf, Paternion, Payerbach, Peggau, Pernegg an der Mur, Pernegg im Waldviertel, Pfarrwerfen, Pilgersdorf, Pinggau, Pinkafeld, Podersdorf am See, Poggersdorf, Poggersdorf, Potzneusiedl, Poysdorf, Pöchlarn, Pörtschach am Wörther See, Raach am Hochgebirge, Raasdorf, Radenthein, Radfeld, Radmer, Ragnitz, Raiding, Ramsau im Zillertal, Rangersdorf, Reichenau, Reichenfels, Reith im Alpbachtal, Reißeck, Rennweg am Katschberg, Rohr bei Hartberg, Rohr im Burgenland, Rudersdorf, Rust, Saalfelden am Steinernen Meer, Sachsenburg, Sankt Georgen an der Stiefing, Sankt Gilgen, Sankt Oswald bei Plankenwarth, Schiefling am Wörthersee, Schleedorf, Schrattenberg, Schwadorf, Schwaz, Schwoich, Schäffern, Schützen am Gebirge, Seeboden, Seeham, Seekirchen am Wallersee, Seiersberg-Pirka, Siegendorf, Sigleß, Sigmundsherberg, Sinabelkirchen, Spittal an der Drau, St. Andrä, St. Andrä, St. Andrä am Zicksee, St. Anna am Aigen, St. Egyden am Steinfeld, St. Georgen an der Leys, St. Jakob im Rosental, St. Jakob im Rosental, St. Johann in der Haide, St. Johann in Tirol, St. Konrad, St. Lorenzen am Wechsel, St. Margareten im Rosental, St. Margarethen an der Raab, St. Margarethen im Burgenland, St. Peter - Freienstein, St. Peter am Ottersbach, St. Ruprecht an der Raab, St. Symvaro, St. Veit in der Südsteiermark, Stadt Salzburg, Stadtgemeinde Traiskirchen, Stadtservice Korneuburg, Stall, Stegersbach, Steinbrunn, Steinfeld, Steuerberg, Stinatz, Stiwoll, Stockenboi, Stockerau, Strass im Zillertal, Straß in Steiermark, Straßwalchen, Söchau, Söll, Tadten, Tattendorf, Techelsberg am Wörther See, Thal, Tieschen, Tobaj, Trebesing, Treffen am Ossiacher See, Tulln an der Donau, Umweltprofis, Umweltv, Unterfrauenhaid, Unterkohlstätten, Unterlamm, Unterwart, Vasoldsberg, Velden am Wörther See, Villach, Vordernberg, Völkermarkt, Völkermarkt, Walpersbach, Wattens, Weiden am See, Weitersfeld, Weiz, Weißensee, Weppersdorf, Werfenweng, Wies, Wiesen, Wiesfleck, Wiesmath, Wimpassing an der Leitha, Winden am See, Winklern, Wolfau, Wolfsberg, Wolfsberg, Wolkersdorf im Weinviertel, WSZ Moosburg, Wulkaprodersdorf, Wörterberg, Zagersdorf, Zelking-Matzleinsdorf, Zell, Zell am Ziller, Zellberg, Zillingtal, Zurndorf, Übelbach |
| Belgium | Hygea, Limburg.net, Recycle! |
| Canada | Aurora (ON), Calgary (AB), Calgary, AB, City of Edmonton, AB, City of Greater Sudbury, ON, City of Nanaimo, City of Peterborough, ON, City of Vancouver, County of Simcoe, ON, CURBit St. John's, Halifax, NS, Kawartha Lakes (ON), London (ON), Montreal (QC), Niagara Region, Orillia, Ontario, Ottawa, Canada, Region of Waterloo, RM of Morris, MB, Strathcona County, ON, Toronto (ON), Vaughan (ON), Waste Wise APPS, Winnipeg (MB) |