JsonMod response 403 - Ergebnis im Browser aber OK

Begonnen von mthome, 29 Mai 2023, 06:18:56

Vorheriges Thema - Nächstes Thema

herrmannj

Bitte das file im Anhang testen. Du darfst diesen Dateianhang nicht ansehen.

Für die def: alles was nach system:// kommt, wird als system Aufruf interpretiert. Das kann alles sein (hier curl), Hauptsache ein vernünftiger json kommt zurück. Damit geht jetzt auch POST, DELETE etc (per curl)

define json_system JsonMod system://curl https://mobile-api.rewe.de/api/v3/all-offers?marketCode=240034
attr json_system readingList multi(jsonPath('$.categories.0.offers.[*]'),concat('artikeltext_', count()),property('title'));;
#   API_LAST_MSG -1
#   API_LAST_RES 1685488908.77475
#   DEF        system://curl https://mobile-api.rewe.de/api/v3/all-offers?marketCode=240034
#   FUUID      64766901-f33f-a34f-a0f4-ff25f695591bd6fc
#   NAME       json_system
#   NEXT       2023-05-31 02:00:00
#   NR         47
#   SOURCE      (-1)
#   STATE      ???
#   SVN        27457 2023-04-17 23:35:57 UTC
#   TYPE       JsonMod
#   eventCount 8
#   CONFIG:
#     IN_REQUEST 0
#     SOURCE     system://curl https://mobile-api.rewe.de/api/v3/all-offers?marketCode=240034
#     SECRET:
#   READINGS:
#     2023-05-31 01:21:48   artikeltext_0   Géramont Cremig-zarte Scheiben
#     2023-05-31 01:21:48   artikeltext_1   Géramont Weichkäse
#     2023-05-31 01:21:48   artikeltext_10  Bizzl Apfelschorle oder Limonade
#     2023-05-31 01:21:48   artikeltext_11  Mini Roma Rispentomaten
#     2023-05-31 01:21:48   artikeltext_12  REWE �Beste Wahl Anno 1904 Weizenmischbrot
#     2023-05-31 01:21:48   artikeltext_13  Jacobs Auslese oder Meisterröstung
#     2023-05-31 01:21:48   artikeltext_14  Schweine-Rückensteaks
#     2023-05-31 01:21:48   artikeltext_15  Volvic Naturelle
#     2023-05-31 01:21:48   artikeltext_2   Barilla Pasta
#     2023-05-31 01:21:48   artikeltext_3   Vorgereifte Avocado
#     2023-05-31 01:21:48   artikeltext_4   Frisches Hähnchen-Brustfilet
#     2023-05-31 01:21:48   artikeltext_5   Coca-Cola
#     2023-05-31 01:21:48   artikeltext_6   Leerdammer Original
#     2023-05-31 01:21:48   artikeltext_7   Schöller Multipackung Kaktus
#     2023-05-31 01:21:48   artikeltext_8   Schöller Multipackung Pirulo Watermelon
#     2023-05-31 01:21:48   artikeltext_9   Steinhaus Krustenbraten oder Krustenbraten Thymian-Honig
#
setstate json_system 2023-05-31 01:21:48 .computedReadings artikeltext_6,artikeltext_1,artikeltext_13,artikeltext_2,artikeltext_11,artikeltext_7,artikeltext_8,artikeltext_10,artikeltext_15,artikeltext_3,artikeltext_9,artikeltext_5,artikeltext_4,artikeltext_12,artikeltext_0,artikeltext_14
setstate json_system 2023-05-31 01:21:48 artikeltext_0 Géramont Cremig-zarte Scheiben
setstate json_system 2023-05-31 01:21:48 artikeltext_1 Géramont Weichkäse
setstate json_system 2023-05-31 01:21:48 artikeltext_10 Bizzl Apfelschorle oder Limonade
setstate json_system 2023-05-31 01:21:48 artikeltext_11 Mini Roma Rispentomaten
setstate json_system 2023-05-31 01:21:48 artikeltext_12 REWE �Beste Wahl Anno 1904 Weizenmischbrot
setstate json_system 2023-05-31 01:21:48 artikeltext_13 Jacobs Auslese oder Meisterröstung
setstate json_system 2023-05-31 01:21:48 artikeltext_14 Schweine-Rückensteaks
setstate json_system 2023-05-31 01:21:48 artikeltext_15 Volvic Naturelle
setstate json_system 2023-05-31 01:21:48 artikeltext_2 Barilla Pasta
setstate json_system 2023-05-31 01:21:48 artikeltext_3 Vorgereifte Avocado
setstate json_system 2023-05-31 01:21:48 artikeltext_4 Frisches Hähnchen-Brustfilet
setstate json_system 2023-05-31 01:21:48 artikeltext_5 Coca-Cola
setstate json_system 2023-05-31 01:21:48 artikeltext_6 Leerdammer Original
setstate json_system 2023-05-31 01:21:48 artikeltext_7 Schöller Multipackung Kaktus
setstate json_system 2023-05-31 01:21:48 artikeltext_8 Schöller Multipackung Pirulo Watermelon
setstate json_system 2023-05-31 01:21:48 artikeltext_9 Steinhaus Krustenbraten oder Krustenbraten Thymian-Honig


mthome

#16
Hallo herrmannj,

funktioniert super! Vieelen vieelen Dank

Internals:
   API_LAST_MSG -1
   API_LAST_RES 1685505418.77012
   CFGFN     
   DEF        system://curl https://mobile-api.rewe.de/api/v3/all-offers?marketCode=240034
   FUUID      6476c3d2-f33f-6d2a-2420-4c551122bf8b045c
   NAME       ReweTest
   NEXT       2023-05-31 06:00:00
   NR         3744
   SOURCE      (-1)
   STATE      ???
   SVN        27457 2023-04-17 23:35:57 UTC
   TYPE       JsonMod
   eventCount 6
   CONFIG:
     IN_REQUEST 0
     SOURCE     system://curl https://mobile-api.rewe.de/api/v3/all-offers?marketCode=240034
     SECRET:
   READINGS:
     2023-05-31 05:56:58   artikeltext_0   Géramont Cremig-zarte Scheiben
     2023-05-31 05:56:58   artikeltext_1   Géramont Weichkäse
     2023-05-31 05:56:58   artikeltext_10  Bizzl Apfelschorle oder Limonade
     2023-05-31 05:56:58   artikeltext_11  Mini Roma Rispentomaten
     2023-05-31 05:56:58   artikeltext_12  REWE �Beste Wahl Anno 1904 Weizenmischbrot
     2023-05-31 05:56:58   artikeltext_13  Jacobs Auslese oder Meisterröstung
     2023-05-31 05:56:58   artikeltext_14  Schweine-Rückensteaks
     2023-05-31 05:56:58   artikeltext_15  Volvic Naturelle
     2023-05-31 05:56:58   artikeltext_2   Barilla Pasta
     2023-05-31 05:56:58   artikeltext_3   Vorgereifte Avocado
     2023-05-31 05:56:58   artikeltext_4   Frisches Hähnchen-Brustfilet
     2023-05-31 05:56:58   artikeltext_5   Coca-Cola
     2023-05-31 05:56:58   artikeltext_6   Leerdammer Original
     2023-05-31 05:56:58   artikeltext_7   Schöller Multipackung Kaktus
     2023-05-31 05:56:58   artikeltext_8   Schöller Multipackung Pirulo Watermelon
     2023-05-31 05:56:58   artikeltext_9   Steinhaus Krustenbraten oder Krustenbraten Thymian-Honig
     2023-05-31 05:56:58   preis_0         1,99 €
     2023-05-31 05:56:58   preis_1         1,99 €
     2023-05-31 05:56:58   preis_10        8,49 €
     2023-05-31 05:56:58   preis_11        1,49 €
     2023-05-31 05:56:58   preis_12        1,79 €
     2023-05-31 05:56:58   preis_13        3,99 €
     2023-05-31 05:56:58   preis_14        2,99 €
     2023-05-31 05:56:58   preis_15        4,74 €
     2023-05-31 05:56:58   preis_2         0,99 €
     2023-05-31 05:56:58   preis_3         0,79 €
     2023-05-31 05:56:58   preis_4         8,80 €
     2023-05-31 05:56:58   preis_5         0,95 €
     2023-05-31 05:56:58   preis_6         0,88 €
     2023-05-31 05:56:58   preis_7         2,22 €
     2023-05-31 05:56:58   preis_8         2,22 €
     2023-05-31 05:56:58   preis_9         1,79 €
Attributes:
   group      Test
   readingList multi(jsonPath('$.categories.0.offers.[*]'),concat('artikeltext_', count()),property('title'));
multi(jsonPath('$.categories.0.offers.[*]'),concat('preis_', count()),property('priceData.price'));

   room       System

Hast Du vor, diese Änderung auch zu veröffentlichen? Dann würde ich mir die Cronjob Geschichte sparen  ;D

herrmannj


ch.eick

Hey,

ich habe mal raus gesucht, wie man den marketcode abfragen kann :-)

https://www.rewe.de/api/marketsearch?searchTerm=<PLZ>

wwIdent "marketcode"
isReweDortmund false
companyName "REWE Markt GmbH"
contactStreet "Strasse"
contactZipCode "PLZ"
contactCity "Ort"
marketHeadline "REWE Markt"
openingInfo
isOpen
until "22:00"

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

herrmannj

Ich bin gerade etwas ratlos, jemand eine Idee zu: (?)

https://reqbin.com/req/c-dwjszac0/curl-post-json-example

erlaubt es den (POST) request zu testen, das wollte ich gerade mit POST+Json (+ unit test und Doku für JsonMod). Wenn ich den request online (via link) teste, dann geht das. Ich bekomme das aber lokal (cmdline, verschiedene OS) nicht zum laufen, ich bekomme da immer HTML zurück.

Dies:
curl -X POST https://reqbin.com/echo/post/json
   -H 'Content-Type: application/json'
   -d '{"login":"my_login","password":"my_password"}'
sollte das ergeben:
{
    "success": "true"
}

Jemand 'ne Idee ?

herrmannj

Zitat von: mthome am 31 Mai 2023, 06:02:13system://curl https://mobile-api.rewe.de/api/v3/all-offers?marketCode=240034

ich hab dir mal die readingList in noch etwas schöner [sic] gemacht:
multi(jsonPath('$.categories.0.offers.[*]'), property('detail.contents.0.titles.0'), sprintf('%s (%s) nur %s', property('title'), property('subtitle'), property('priceData.price')));

Art.-Nr._1178278
Vorgereifte Avocado (»Hass«, Kl. I, je St.) nur 0,79 €
2023-05-31 22:22:37
Art.-Nr._1223984
Bizzl Apfelschorle oder Limonade (versch. Sorten, teilw. koffeinhaltig, je 12 x 1-l-Fl.-Kasten (1 l = 0.71), zzgl. 3.30 Pfand) nur 8,49 €
2023-05-31 22:22:37
Art.-Nr._1483021
Barilla Pasta (versch. Ausformungen, je 500-g-Pckg. (1 kg = 1.98)) nur 0,99 €
2023-05-31 22:22:37
Art.-Nr._2018980
Steinhaus Krustenbraten oder Krustenbraten Thymian-Honig (Haltungsform 2, je 100 g) nur 1,79 €
2023-05-31 22:22:37
Art.-Nr._2255510
Géramont Cremig-zarte Scheiben (je 150-g-Pckg. (1 kg = 13.27)) nur 1,99 €
2023-05-31 22:22:37
Art.-Nr._2345396
Schweine-Rückensteaks (in versch. Marinaden, Haltungsform 2, je 300-g-Pckg. (1 kg = 9.97)) nur 2,99 €
2023-05-31 22:22:37
Art.-Nr._263357
Volvic Naturelle (je 6 x 1,5-l-Fl.-Pckg. (1 l = 0.53), zzgl. 1.50 Pfand) nur 4,74 €
2023-05-31 22:22:37
Art.-Nr._2713121
Schöller Multipackung Kaktus (je 9 x 45-ml-Pckg. (1 l = 5.48)) nur 2,22 €
2023-05-31 22:22:37
Art.-Nr._4508467
Leerdammer Original (holl. Schnittkäse, 45% Fett i.Tr., je 100 g) nur 0,88 €
2023-05-31 22:22:37
Art.-Nr._4529243
Géramont Weichkäse (60% Fett i.Tr., je 200-g-Pckg. (1 kg = 9.95)) nur 1,99 €
2023-05-31 22:22:37
Art.-Nr._6730574
Coca-Cola (versch. Sorten, teilw. koffeinhaltig, je 1,5-l-Fl. (1 l = 0.63), zzgl. 0.25 Pfand) nur 0,95 €
2023-05-31 22:22:37
Art.-Nr._7055901
Jacobs Auslese oder Meisterröstung (versch. Sorten, gemahlener Bohnenkaffee, je 500-g-Pckg. (1 kg = 7.98)) nur 3,99 €
2023-05-31 22:22:37
Art.-Nr._7238775
Mini Roma Rispentomaten (»Aromatica«, Kl. I, je 250-g-Schale (1 kg = 5.96)) nur 1,49 €
2023-05-31 22:22:37
Art.-Nr._7556390
Frisches Hähnchen-Brustfilet (Teilstück, Haltungsform 2, SB-verpackt, je 1 kg) nur 8,80 €
2023-05-31 22:22:37
Art.-Nr._7662860
REWE �Beste Wahl Anno 1904 Weizenmischbrot (je 500-g-Pckg. (1 kg = 3.58)) nur 1,79 €
2023-05-31 22:22:37
Art.-Nr._8255247
Schöller Multipackung Pirulo Watermelon (je 5 x 73-ml-Pckg. (1 l = 6.08)) nur 2,22 €
2023-05-31 22:22:37

betateilchen

Zitat von: herrmannj am 31 Mai 2023, 21:43:49Ich bin gerade etwas ratlos, jemand eine Idee zu:


Spontan (kann gerade nicht testen) würde ich sagen, da fehlt ein accept header, in dem drinsteht, dass Du json als Antwort möchtest.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#22
Was von reqbin als html zurückkommt, ist ja letztlich eine Fehlerseite wegen fehlenden Cookies und nicht vorhandenem JavaScript. Vermutlich ist die Seite nicht dafür gedacht, von außerhalb eines echten Browsers aufgerufen zu werden.

Probier es mal mit einer anderen Testumgebung  :)

curl -X POST "https://httpbin.org/anything" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"login":"my_login","password":"my_password"}'
liefert als Antwort:

{
  "args": {},
  "data": "{\"login\":\"my_login\",\"password\":\"my_password\"}",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "application/json",
    "Content-Length": "45",
    "Content-Type": "application/json",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.74.0",
    "X-Amzn-Trace-Id": "Root=...4f8"
  },
  "json": {
    "login": "my_login",
    "password": "my_password"
  },
  "method": "POST",
  "origin": "myIP",
  "url": "https://httpbin.org/anything"
}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

herrmannj

Zitat von: betateilchen am 01 Juni 2023, 00:20:19Was von reqbin als html zurückkommt, ist ja letztlich eine Fehlerseite wegen fehlenden Cookies und nicht vorhandenem JavaScript. Vermutlich ist die Seite nicht dafür gedacht, von außerhalb eines echten Browsers aufgerufen zu werden.
vmtl die einfachste Erklärung. Wusste nicht, dass das mit httpbin auch geht. Perfekt, Danke. Das reicht für einen unit test mehr als aus.

kurt6908

Hallo,

ich nutze JsonMod um eine lokale XML-Datei auszulesen. Seit dem letzen Update auf die neue Version (Revision 27640) funtkioniert aber mein file:/ als source nicht mehr. Verzeichnisseitig wurde nicht geändert, nur das nächtliche Update hat das Update eingespielt. Letzer erfolgreicher Leseversuch, war der letze vorm Update.

Kann jemand das Problem lösen oder mir einen Ratschlag geben???

Vielen Dank.

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

herrmannj

Ja gern. Zeig Mal deine def bitte   

Btw, bitte beim nächsten Mal für so etwas einen neuen Thread bitte

kurt6908

Hallo,

hab exra keinen neuen Thread aufgemacht, da es nach meiner Ansicht mit dem Update zusammenhängt. Aber beim nächsten Mal denke ich daran.

Hier mein Device:

Internals:
   API_LAST_MSG 404
   API_LAST_RES 1686065111.2714
   DEF        file://home/pi/a4:c1:38:c8:8f:6d.json
   FUUID      60ddf128-f33f-c3f9-dc53-c3f7d24259b838c6
   NAME       Garage_Batterie1
   NEXT       2023-06-06 17:30:00
   NR         64
   SOURCE     home/pi/a4:c1:38:c8:8f:6d.json
   STATE      2023-06-06_03:50:05
   SVN        27640 2023-06-01 17:03:20 UTC
   TYPE       JsonMod
   eventCount 9
   CONFIG:
     IN_REQUEST 0
     SOURCE     file://home/pi/a4:c1:38:c8:8f:6d.json
     SECRET:
   READINGS:
     2023-06-06 03:55:00   Imain           -0.35
     2023-06-06 03:55:00   NominalCap      110
     2023-06-06 03:55:00   NumberCycles    180
     2023-06-06 03:55:00   ProtectState    0
     2023-06-06 03:55:00   ProtectStateText ok
     2023-06-06 03:55:00   RemainCap       70.85
     2023-06-06 03:55:00   SOC             64
     2023-06-06 03:55:00   Temp            24.8
     2023-06-06 03:55:00   Time            2023-06-06_03:50:05
     2023-06-06 03:55:00   Vmain           26.28
Attributes:
   event-on-change-reading .*
   interval   */5 * * * *
   readingList single(jsonPath('$.Vmain'), 'Vmain', '0'); single(jsonPath('$.Imain'), 'Imain', '0'); single(jsonPath('$.SOC'), 'SOC', '0'); single(jsonPath('$.NominalCap'), 'NominalCap', '0'); single(jsonPath('$.RemainCap'), 'RemainCap', '0'); single(jsonPath('$.Time'), 'Time', '0'); single(jsonPath('$.NumberCycles'), 'NumberCycles', '0'); single(jsonPath('$.ProtectState'), 'ProtectState', '0'); single(jsonPath('$.ProtectStateText'), 'ProtectStateText', '0'); single(jsonPath('$.Temp'), 'Temp', '0')
   room       Energie
   stateFormat {ReadingsVal($name,"Time",undef)}

Um 04:00 lief das FHEM-Update. Die auszulende Datei hat aktuelle Werte, die FHEM-Readings zeigen die Werte vor 04:00.

Unter Source habe ich es auch mit 'file:/' (also nur ein /) probiert, aber geht auch nicht.

Viele Grüße

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

herrmannj

bei absoluten path müssen 3 "/" hin.

Du hast Recht, theoretisch müsste ein "/" ebenfalls funktionieren. Um keine breaking changes zu erzeugen, lasse ich das vorerst aber so wie es ist.

betateilchen

Probiers mal mit

file:///home/pi/a4:c1:38:c8:8f:6d.json
JsonMod regext (seit neuestem) sowohl einen als auch zwei slashes gnadenlos weg.
Deshalb funktionieren absolute Pfade mit / am Anfang nicht mehr, weil aus Deiner Angabe dann

home/pi/...
wird, was logischerweise nicht als Datei gefunden wird.
Mit drei slashes bleibt nach dem regex einer übrig, dann funktioniert auch die Auswertung wieder.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#29
Zitat von: herrmannj am 06 Juni 2023, 20:27:32Um keine breaking changes zu erzeugen, lasse ich das vorerst aber so wie es ist.

Das neue Verhalten IST aber ein breaking change. Ich musste jetzt seit dem Update auch 3 slashes verwenden, was vorher nicht notwendig war.

Zitat von: herrmannj am 06 Juni 2023, 20:27:32theoretisch müsste ein "/" ebenfalls funktionieren

praktisch auch, wenn man Deinem Code Glauben schenken darf.

# file: correct file:/.. but also accepted file://..
if ($source =~ m/^file:[\/]{1,2}(.+)/) {
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!