xirixiz / homeassistant-afvalwijzer

Provides sensors for some Dutch waste collectors
MIT License
176 stars 68 forks source link

Please verify the url:' + jsonUrl + 'manually in your browser #72

Closed Mariusthvdb closed 4 years ago

Mariusthvdb commented 4 years ago

quick feedback:

2020-09-11 11:37:07 ERROR (MainThread) [custom_components.afvalwijzer.sensor] Check afvaldienst platform settings ('No JSON data received from provider. Please verify the url:https://json.mijnafvalwijzer.nl/?method=postcodecheck&postcode=1234AB&street=&huisnummer=123&toevoeging=&langs=nlmanually in your browser. Text mixed with JSON should be visible.',)
2020-09-11 11:37:08 ERROR (MainThread) [homeassistant.components.sensor] Error while setting up afvalwijzer platform for sensor
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/Afvaldienst/Afvaldienst.py", line 57, in __get_data_json
    jsonObject = json.loads(r.json())
  File "/usr/local/lib/python3.8/site-packages/requests/models.py", line 898, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/simplejson/__init__.py", line 525, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.8/site-packages/simplejson/decoder.py", line 370, in decode
    obj, end = self.raw_decode(s)
  File "/usr/local/lib/python3.8/site-packages/simplejson/decoder.py", line 400, in raw_decode
    return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 184, in _async_setup_platform
    await asyncio.shield(task)
  File "/config/custom_components/afvalwijzer/sensor.py", line 65, in async_setup_platform
    afvaldienst = await hass.async_add_executor_job(
  File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/lib/python3.8/site-packages/Afvaldienst/Afvaldienst.py", line 43, in __init__
    self._jsonData = self.__get_data_json()
  File "/usr/local/lib/python3.8/site-packages/Afvaldienst/Afvaldienst.py", line 59, in __get_data_json
    raise ValueError('No JSON data received from provider. Please verify the url:' + jsonUrl + 'manually in your browser. Text mixed with JSON should be visible.')
ValueError: No JSON data received from provider. Please verify the url:https://json.mijnafvalwijzer.nl/?method=postcodecheck&postcode=1234AB&street=&huisnummer=123&toevoeging=&langs=nlmanually in your browser. Text mixed with JSON should be visible.

seems the same error throws 2 different feedbacks in the log in the line

Please verify the url:' + jsonUrl + 'manually in your browser

? Or is that the way you wanted it.

I've redacted the personal detail, so that not what been reported really, the url was correct, although it doesnt kist the street (isnt setup in the config either, and has never been)

btw, the version is still on 4.2.2 ;-)

xirixiz commented 4 years ago

@robertklep heeft contact opgenomen met het bedrijf achter Mijn Afvalwijzer, ze hebben gisteren een aantal wijzigingen doorgevoerd en daarnaast json.mijnafvalwijzer.nl uitgefaseerd omdat die site nog draaide op een verouderd platform. Ze zijn wel benieuwd naar de mogelijkheden van het koppelen van de afvalwijzer met home automation en willen graag kijken of er niet alsnog iets te verzinnen valt om die koppeling weer te herstellen.

Mariusthvdb commented 4 years ago

wat vervelend zeg, al je werk voor niets... mss dat we tot dat moment toch weer over moeten gaan op de scraper? die werkte in het verleden echt prima

weet alleen even niet of die alle functionaliteit heeft die de nu uitgeschakelde sensor heeft?

Theoreet commented 4 years ago

wat vervelend zeg, al je werk voor niets... mss dat we tot dat moment toch weer over moeten gaan op de scraper? die werkte in het verleden echt prima

weet alleen even niet of die alle functionaliteit heeft die de nu uitgeschakelde sensor heeft?

platform updaten en weer aanslingeren :D

expaso commented 4 years ago

WTF?!, JSON koppeling een oud platform? Hebben ze dan een gRPC koppeling ervoor in de plaats ofzo? Hoe moeilijk kan het zijn? .. zucht..

robertklep commented 4 years ago

@Expaso hun JSON platform, niet JSON platforms in het algemeen ๐Ÿ˜…

GentleGiantSoftware commented 4 years ago

Dit is wel even balen, want het was toch wel heel prettig dat ik elke ochtend erop werd gewezen door mijn google assistent als ik de vuilnisbak buiten moet zetten. Ik hoop dat het bedrijf achter mijnafvalwijzer.nl deze functionaliteit weer snel beschikbaar maakt!

xirixiz commented 4 years ago

Ik maak in de tussentijd een alternatief, die haalt (scraped) de data van de website, dan werkt het ook, alleen op een minder mooie manier. De funcitionaliteit voor de eindgebruiker blijft gelijk.

Mariusthvdb commented 4 years ago

Ik maak in de tussentijd een alternatief, die haalt (scraped) de data van de website, dan werkt het ook, alleen op een minder mooie manier. De funcitionaliteit voor de eindgebruiker blijft gelijk.

super, als je hulp met testen nodig hebt laat je het weten ok?

rgruyters commented 4 years ago

WTF?!, JSON koppeling een oud platform? Hebben ze dan een gRPC koppeling ervoor in de plaats ofzo? Hoe moeilijk kan het zijn? .. zucht..

Zover ik nu kan zien is er een https://api.mijnafvalwijzer.nl. Deze url is o.a. te zien als je kalender export doet: https://api.mijnafvalwijzer.nl/webservices/ical/1a8a0525-5eb0-478b-8972-f2ffeec0fc66

(bovenstaande info is via de demo link van mijnafvalwijzer.nl)

Ik kan niet bepalen hoe zij dit nu doen in de backend, maar ik neem aan dat dit redelijk makkelijk uit te breiden is.

expaso commented 4 years ago

De android app communiceert ook via api.mijnafvalwijzer.nl. Je zou verwachten dat die JSON ophaalt vanaf die URL.

Edit: Laat ik niet alleen maar afzeiken maar ook wat nuttigs toevoegen:

https://api.mijnafvalwijzer.nl/webservices/appsinput/?apikey=xxx&&method=postcodecheck&postcode=6686CG&street=&huisnummer=1&toevoeging=&platform=phone&langs=nl&mobiletype=android

Alstublieft ;)

NB: Ik wist niet dat er zoveel data over een beetje afval binnen te trekken viel. Tot en met GPS coรถrdinaten van alle glasbakken aan toe. Ergens hoor ik de baron al roepen: drommels, drommels en nog eens drommels...!

Edit2: Heey, zie dit, er is ook een versie die niet zo lomp veel data teruggeeft. Met een beetje geluk is die bijna gelijk aan de oude API:

https://api.mijnafvalwijzer.nl/webservices/appsinput/?apikey=xxx&method=postcodecheck&postcode=6686CG&street=&huisnummer=1&toevoeging=&app_name=afvalwijzer&platform=phone&mobiletype=android&afvaldata=2020-09-13&version=58&langs=nl

Overigens, niet alle request params zijn verplicht, maar bovenstaande URL is exact zoals de app het doet. (dus kleine kans dat ie opeens niet meer werkt).

robertklep commented 4 years ago

@Expaso nice! Ik was zelf ook al aan het decompilen geslagen en had die eerste URL gevonden, maar ik zie nu pas dat jij al het zware werk al gedaan hebt ๐Ÿ˜‚

xirixiz commented 4 years ago

Super! De data die wordt teruggegeven is exact zoals het was. Ik ga er nu mee aan de slag en verwacht ergens einde dag een werkende release.

Op deze manier is het exact zoals het eerder werd teruggeveven.

https://api.mijnafvalwijzer.nl/webservices/appsinput/?apikey=xxx&method=postcodecheck&postcode=5146EG&street=&huisnummer=6&toevoeging=&app_name=afvalwijzer&platform=phone&langs=nl

Al ga ik dit deel &afvaldata=2020-09-13 er wel in opnemen, want dat geeft gewoon netjes alleen json terug.

Het custom_component werkt daarna ook naar behoren. Ik test het nog even een aantal keer gedurende de dag en maak dan een nieuwe release. Super @Expaso en @robertklep

expaso commented 4 years ago

Awesome! Die eerste url geeft overigens ook alleen json terug, alleen sommige textwaarden bevatten html markup, waardoor je browser in de war raakt.

Een update aan het einde van de dag zou echt super zijn! Morgen moet de bak buiten bij ons, en ik heb geen idee welke ๐Ÿ˜‹๐Ÿ˜‚

xirixiz commented 4 years ago

Release added (not yet in hacs though): https://github.com/xirixiz/homeassistant-afvalwijzer/releases/tag/4.4.0

For me it's working like a charm for both mijnafvalwijzer and afvalstoffendienstkalender!

Thanks for the help all! Now let's hope the api key remains valid ๐Ÿ‘ .

I`ll update the HACS PR as well, and as I prepared everything with the help of @KTibow, I think it'll be availble there again soon!

Howerver, any validation upfront is welcome ofcourse ๐Ÿ˜ƒ

Voxxie commented 4 years ago

Just tested and installed via Hacs, works like a charm again! ๐Ÿ˜‰

JBS5 commented 4 years ago

Just updated, works great again!

Mariusthvdb commented 4 years ago

magic.

Schermafbeelding 2020-09-13 om 10 53 36

van

Schermafbeelding 2020-09-13 om 10 55 03

via (spannend...)

Schermafbeelding 2020-09-13 om 10 56 53

naar volle glorie:

Schermafbeelding 2020-09-13 om 11 01 50

thanks everyone!

expaso commented 4 years ago

Haha top!! Mooie card zeg! Ook veel dank @xirixiz! Nog voor de lunch!

Ik verwacht niet dat de API key snel zal veranderen. Hij zit hardcoded in de app, dus dan zouden ze eerst alle apps moeten updaten, anders crashed alles.

@robertklep Viel jou tijdens het decompilen ook het niveau op van de code van Afvalwijzer? Classes met de naam 'HttpSpul', engels en nederlands door elkaar in de API zoals 'street' en 'huisnummer', alles met strings aan elkaar geplakt. Oh well, het werkt nu, daar gaat het om.

robertklep commented 4 years ago

@Expaso ja, het was me ook opgevallen: hardcoded HTML/CSS in de Java code, veel copy-paste code ๐Ÿ˜ฌ

xirixiz commented 4 years ago

Jullie ook bedankt voor jullie hulp, super! @Expaso @robertklep

xirixiz commented 4 years ago

Goodmorning,

I just received the message below from mijnafvalwijzer.nl. I don't want to have discussions about this with mijnafvalwijzer.nl so I decided to remove the api and url information from the component. I asked them whether is possible to come up with a solution so everyone is happy. I`ll inform you when I received a reply.


Ik heb begrepen dat jij de ontwikkelaar bent achter een aantal projecten die op Github staan t.a.v. home-automation en data-fetching vanuit ons product 'Mijn Afvalwijzer'.ย 

Voorheen was deze API publiekelijk beschikbaar via 'JSON.mijnafvalwijzer.nl'. Dit is inmiddels niet meer het geval en de API is publiekelijk niet meer beschikbaar. Om onze Apps te laten communiceren met de backend (de API.mijnafvalwijzer.nl) wordt gebruik gemaakt van een API-key. Deze key is klaarblijkelijk via reverse-engineering, of data-sniffing uit de app gehaald en wordt nu misbruikt om toegang tot de API te krijgen. De key is specifiek bedoelt om oneigenlijk toegang tot de dienst tegen te gaan.

Dit is niet de bedoeling. We willen je dan ook vriendelijk vragen de betreffende code (waar deze key gebruikt wordt) offline te halen. We zullen na een korte periode deze API-key sowieso gaan aanpassen en daarmee stopt de werking van de plugin. We begrijpen dat dit vervelend kan zijn voor diegene die home-automation gebruiken. Wellicht biedt de betreffende gemeente zelf een oplossing om deze data (publiekelijk) te benaderen.

rgruyters commented 4 years ago

Why make it so much difficult... If you don't want us to use the mobile API-key, why not given us one for Home Assistant? It is not that this app use a different method than the mobile app... Hopefully you will receive answers soon from them with a solution.

xirixiz commented 4 years ago

Yes, I fully agree. Let's wait for the answer.

GentleGiantSoftware commented 4 years ago

Ik begrijp dat ze reverse engineering niet leuk vinden en zeker niet het (mis/ge)bruik van de API key. Maar dit geeft wel aan dat het alleen een kwestie is van goodwill om het gebruik in Home Assistant te ondersteunen en niet het inrichten van een speciale interface. Hopelijk zijn ze inderdaad bereid om een API key beschikbaar te stellen voor de beperkte informatie die we in Home Assistant graag willen zien.

xirixiz commented 4 years ago

Antwoord:

Addcomm (het bedrijf achter Mijnafvalwijzer) is niet de eigenaar van de data. De gemeentes zijn eigenaar. De ophaaldata zelf valt niet onder persoonsgegevens, maar de gemeentes zijn evengoed huiverig om deze data via hun leverancier (wij dus) naar buiten open te stellen. Om die reden moeten we het verder tegengaan. Zoals je al aangaf veranderen we de key niet enkel om jouw project. Er zijn er inderdaad meerdere.

Het idee om in de toekomst een eigen key af te geven neem ik mee. Indien de gemeente's akkoord gaan dan zijn we zeker bereid het op die manier te doen. I'll keep you posted.. ;)

xirixiz commented 4 years ago

Ik los het anders op. Ik maak het component beschikbaar zonder URL en API key, op die manier is diegene die het wil gebruiken verantwoordelijk voor het in het bezit krijgen van een legitieme api token. Ik heb de code overigens voor 80% herschreven, dus een nieuwe release lag toch al op de loer.... waarschijnlijk einde middag of vanavond beschikbaar. Keep you posted!

rgruyters commented 4 years ago

For now that would be a good alternative. You are not responsible for using someone's API-key and if people still want to use it (in any means) then they are self responsible.

rgruyters commented 4 years ago

Addcomm (het bedrijf achter Mijnafvalwijzer) is niet de eigenaar van de data. De gemeentes zijn eigenaar. De ophaaldata zelf valt niet onder persoonsgegevens, maar de gemeentes zijn evengoed huiverig om deze data via hun leverancier (wij dus) naar buiten open te stellen. Om die reden moeten we het verder tegengaan. Zoals je al aangaf veranderen we de key niet enkel om jouw project. Er zijn er inderdaad meerdere.

Yeah, GDPR has some good points, but people that don't understand how the information is being delivered are panicing and saying NO.

Basically they have to explain that the information is already public available, but is delivered in a different way. As an example, maybe not the best one, is receiving a postal package. It can be delivered by the mailman/mailwoman or by courier. They both can use different transports, but in the end they deliver the same (postal) package.

xirixiz commented 4 years ago

....... L2... https://github.com/xirixiz/python-afvalwijzer-afvalstoffendienst/blob/737b636fcee71049bf54e15adb48fda8d33112a6/.gitignore

xirixiz commented 4 years ago

Oke, I'm almost done with a new and working component without using the API but with all the same functionality. I`ll release it Tomorrow or the day after Tomorrow

xirixiz commented 3 years ago

New release available (no API key required, same functionality!)