Forum: Mikrocontroller und Digitale Elektronik ESP8266 GET JSON Daten


von MOBA 2. (Gast)


Lesenswert?

Hallo,

ich versuche diese Daten zu bekommen:

https://script.googleusercontent.com/macros/echo?user_content_key=mx-lkdNlq7SPgifAvq9gF3ILyl-tT6NLPs3KZQia1J2-n5M24hYy9R8GirIFSF28Up89NS2Hr94CY56jxA0tWmajYXWhTJlym5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJ9GRkcRevgjTvo8Dc32iw_BLJPcPfRdVKhJT5HNzQuXEeN3QFwl2n0M6ZmO-h7C6eIqWsDnSrEd&lib=MwxUjRcLr2qLlnVOLh12wSNkqcO1Ikdrk


Der ESP ist am ATMega dran. Der will die Uhrzeit, Wochentag etc... 
haben.
Mit Wetter hat das geklappt (openweathermap.org), dort habe ich es 
gesendet und bekomme die Daten indem ich:

AT+CIPSTART="TCP","api.openweathermap.org",80
AT+CIPSEND=103\r\n
GET /data/2.5/weather?id=...................................\r\n
Host: api.openweathermap.org\r\n


Wenn ich die 4 Strings oben sende (meine ID habe ich jetzt 
ausgeblendet), dann bekomme ich div. Strings im JSON Format (eigentlich 
genauso wie beim Googlelink. Nur ich kann das nicht über den ESP 
bekommen.


Vorneweg: Firmware umschreiben beim ESP ist raus. Ich nutze die Standard 
von Espressif und fertig. Ich möchte diese Angelegenheiten auf der µC 
Seite machen, da ich dort jederzeit die Firmware updaten kann.




Kann mir jmd. helfen wie ich die Daten bekomme?

von Stefan F. (Gast)


Lesenswert?

> Nur ich kann das nicht über den ESP bekommen.

Das musst du genauer beschreiben. Was erwartest du, zu empfangen, und 
was empfängst du stattdessen. Wie verhält sich deine Anwednung mit ESP 
im Vergleich zu einem Test am PC mit Netcat?

Log-Auszüge der ganzen Tests solltest du zeigen, kannst die ID's ja 
unkenntlich machen.

> GET /data/2.5/weather?id=...................................\r\n

Hier fällt mir auf, dass du vergessen hast, das HTTP Protokoll 
anzugeben.

GET /data/2.5/weather?id=...... HTTP/1.0\r\n

von Εrnst B. (ernst)


Lesenswert?

Evtl. musst du auch einen Header "Accept: application/json" mitsenden.

von MOBA 2. (Gast)


Angehängte Dateien:

Lesenswert?

Εrnst B. schrieb:
> Evtl. musst du auch einen Header "Accept: application/json" mitsenden.


Hi,

die Sachen:

AT+CIPSTART="TCP","api.openweathermap.org",80
AT+CIPSEND=103\r\n
GET /data/2.5/weather?id=...................................\r\n
Host: api.openweathermap.org\r\n


die funktionieren und bekomme alle Wetterdaten. Ich sende dort gar kein 
HTTP/1.0, klappt trotzdem?!


Hier geht es um diesen Link:
https://script.googleusercontent.com/macros/echo?user_content_key=9KdUApyqKa0Y0_g2e61WcfwsXKZrv2_mHapbDknbkXtjMzsWuclVsSdhH9OO9wjLonCQ6f-d99SFFKcMF19uw8ca4KGM4fEtm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJ9GRkcRevgjTvo8Dc32iw_BLJPcPfRdVKhJT5HNzQuXEeN3QFwl2n0M6ZmO-h7C6eIqWsDnSrEd&lib=MwxUjRcLr2qLlnVOLh12wSNkqcO1Ikdrk


Ruft ihn einfach mal auf, und ihr seht was eigentlich zu erwarten ist.
Den habe ich im Netz gefunden, da braucht man keine ID.

Ich habe versucht so zu senden:

AT+CIPSTART="TCP","script.googleusercontent.com",80\r\n
AT+CIPSEND=338\r\n
GET 
/macros/echo?user_content_key=_5fcYWA9yfzbGOQ3O0JNrZ4D9A61ZBUmAqa2IdWptG 
NKWGc0KVKrrKtsCJquQ0JpBw_zxse2Tzjzxj24GGxQuFXGAaKqr0OYm5_BxDlH2jW0nuo2oD 
emN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJ9GRkcRevgjTvo8Dc32iw_BLJPcPfRdVKhJT5 
HNzQuXEeN3QFwl2n0M6ZmO-h7C6eIqWsDnSrEd&lib=MwxUjRcLr2qLlnVOLh12wSNkqcO1I 
kdrk/1.1\r\n
Host: script.googleusercontent.com\r\n


Ich bekomme dort sofot einen Fehler (ohne Wartezeit). Siehe Screenshot.
Was mache ich dort flasch? Wie muss ich das senden? Ich habe mich 
einfach am openweathermap Code orientiert, da dieser funktioniert.

von Jan L. (ranzcopter)


Lesenswert?

Marius D. schrieb:
> Hier geht es um diesen Link:
> 
https://script.googleusercontent.com/macros/echo?user_content_key=9KdUApyqKa0Y0_g2e61WcfwsXKZrv2_mHapbDknbkXtjMzsWuclVsS

um diesen Link geht es eher nicht wirklich - hier lautet das Ding 
"https://"; - das ist SSL/TLS über Port 443. In deinem Code gibst du aber 
Port 80 - also HTTP - an. Das ist ein klitzekleiner Unterschied...

Rufst du o.g. Link in einer Kommandozeile deiner Wahl mal auf z.B. per

curl "http://script...."; bekommst du als Antwort dann einen
"301 Moved Permanently" wiederum auf "https://....";. Dem folgt die 
ESP-Firmware aber ganz sicher nicht...
Offenbar möchte Google nicht, dass man ohne SSL zugreift.

"Früher" jedenfalls konnte die AT-Firmware gar kein SSL - ob sich das 
inzwischen geändert hat, weiss ich nicht.
Da sich nach meiner Erfahrung jede AT-Version von der jeweils anderen 
Version mehr oder weniger deutlich (bis fatal) unterscheidet, habe ich 
es aufgegeben, damit irgendwas Sinnvolles machen zuwollen... :)

von Εrnst B. (ernst)


Lesenswert?

Marius D. schrieb:
> einfach am openweathermap Code orientiert, da dieser funktioniert.

Der funktioniert, weil der Server dort die Uralt-Version von HTTP (noch 
aus den Zeiten vor Versionsnummern, jetzt oft als HTTP 0.9 bezeichnet) 
spricht.

Das muss nicht jeder Server so handhaben.

Schreib einfach hinter die URL&vor \r\n noch " HTTP/1.0" (mit space 
getrennt)

Wenn der Google-Server jedoch auch noch HTTPS erwartet hilft das alleine 
nicht.

von MOBA 2. (Gast)


Lesenswert?

Εrnst B. schrieb:
> Marius D. schrieb:
>> einfach am openweathermap Code orientiert, da dieser funktioniert.
>
> Der funktioniert, weil der Server dort die Uralt-Version von HTTP (noch
> aus den Zeiten vor Versionsnummern, jetzt oft als HTTP 0.9 bezeichnet)
> spricht.
>
> Das muss nicht jeder Server so handhaben.
>
> Schreib einfach hinter die URL&vor \r\n noch " HTTP/1.0" (mit space
> getrennt)
>
> Wenn der Google-Server jedoch auch noch HTTPS erwartet hilft das alleine
> nicht.


Hallo,

der Server wird https erwarten denke ich.
Wenn ich " HTTP/1.0" oder ähnliches hinterhänge, dann bekomme ich gar 
keine Antwort mehr. 0. Wenn ich nur "/1.1\r\n" mache ohne Leerzeichen, 
dann geht es.

von MOBA 2. (Gast)


Lesenswert?

Jan L. schrieb:
> Marius D. schrieb:
>> Hier geht es um diesen Link:
>>
> 
https://script.googleusercontent.com/macros/echo?user_content_key=9KdUApyqKa0Y0_g2e61WcfwsXKZrv2_mHapbDknbkXtjMzsWuclVsS
>
> um diesen Link geht es eher nicht wirklich - hier lautet das Ding
> "https://"; - das ist SSL/TLS über Port 443. In deinem Code gibst du aber
> Port 80 - also HTTP - an. Das ist ein klitzekleiner Unterschied...
>
> Rufst du o.g. Link in einer Kommandozeile deiner Wahl mal auf z.B. per
>
> curl "http://script...."; bekommst du als Antwort dann einen
> "301 Moved Permanently" wiederum auf "https://....";. Dem folgt die
> ESP-Firmware aber ganz sicher nicht...
> Offenbar möchte Google nicht, dass man ohne SSL zugreift.
>
> "Früher" jedenfalls konnte die AT-Firmware gar kein SSL - ob sich das
> inzwischen geändert hat, weiss ich nicht.
> Da sich nach meiner Erfahrung jede AT-Version von der jeweils anderen
> Version mehr oder weniger deutlich (bis fatal) unterscheidet, habe ich
> es aufgegeben, damit irgendwas Sinnvolles machen zuwollen... :)


Ja und deswegen habe ich eine Version, die sehr stabil läuft und alles 
was ich brauche kann. Und bei der bin ich geblieben, weil sonst muss man 
monatlich sich neu einarbeiten weil sich alles konfus geändert hatt.

Ich habe V. 1.4.0 und AT Version 0.5

von MOBA 2. (Gast)


Lesenswert?

Kennt jmd. vll noch einen anderen Anbieter wo ich simpel á la 
openweathermap die Uhrzeit, Tag und Datum bekommen kann, kostenlos im 
JSON?

Ich finde da nix wie man das Datum und die Uhrzeit bekommen kann, Wetter 
gibt es 1000x anbieter.....



Oder wie geht das das ich diese Daten bekomme?!

von Daniel A. (daniel-a)


Lesenswert?

Zunächst, am ende brauchts 2 \r\n

Den Fehler bekomme ich auch auf dem PC:
1
~# echo -ne "GET /macros/echo?user_content_key=_5fcYWA9yfzbGOQ3O0JNrZ4D9A61ZBUmAqa2IdWptGNKWGc0KVKrrKtsCJquQ0JpBw_zxse2Tzjzxj24GGxQuFXGAaKqr0OYm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJ9GRkcRevgjTvo8Dc32iw_BLJPcPfRdVKhJT5HNzQuXEeN3QFwl2n0M6ZmO-h7C6eIqWsDnSrEd&lib=MwxUjRcLr2qLlnVOLh12wSNkqcO1Ikdrk/1.1\r\nHost: script.googleusercontent.com\r\n\r\n" | nc script.googleusercontent.com 80
2
HTTP/1.0 404 Not Found
3
Content-Type: text/html; charset=UTF-8
4
Content-Length: 1572
5
Date: Thu, 26 Jan 2017 10:02:33 GMT
6
...

Korrigiert man den Request:
1
~# echo -ne "GET /macros/echo?user_content_key=9KdUApyqKa0Y0_g2e61WcfwsXKZrv2_mHapbDknbkXtjMzsWuclVsSdhH9OO9wjLonCQ6f-d99SFFKcMF19uw8ca4KGM4fEtm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJ9GRkcRevgjTvo8Dc32iw_BLJPcPfRdVKhJT5HNzQuXEeN3QFwl2n0M6ZmO-h7C6eIqWsDnSrEd&lib=MwxUjRcLr2qLlnVOLh12wSNkqcO1Ikdrk HTTP/1.0\r\nHost: script.googleusercontent.com\r\n\r\n" | nc script.googleusercontent.com 80
2
HTTP/1.0 301 Moved Permanently
3
Content-Type: text/html; charset=UTF-8
4
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
5
Pragma: no-cache
6
Expires: Mon, 01 Jan 1990 00:00:00 GMT
7
Date: Thu, 26 Jan 2017 10:06:13 GMT
8
Location: https://script.googleusercontent.com/macros/echo?user_content_key=9KdUApyqKa0Y0_g2e61WcfwsXKZrv2_mHapbDknbkXtjMzsWuclVsSdhH9OO9wjLonCQ6f-d99SFFKcMF19uw8ca4KGM4fEtm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJ9GRkcRevgjTvo8Dc32iw_BLJPcPfRdVKhJT5HNzQuXEeN3QFwl2n0M6ZmO-h7C6eIqWsDnSrEd&lib=MwxUjRcLr2qLlnVOLh12wSNkqcO1Ikdrk
9
X-Content-Type-Options: nosniff
10
X-Frame-Options: SAMEORIGIN
11
X-XSS-Protection: 1; mode=block
12
Server: GSE
13
Accept-Ranges: none
14
Vary: Accept-Encoding
15
...

Eine Weiterleitung. Hier muss also HTTPS verwendet werden:
1
~# echo -ne "GET /macros/echo?user_content_key=9KdUApyqKa0Y0_g2e61WcfwsXKZrv2_mHapbDknbkXtjMzsWuclVsSdhH9OO9wjLonCQ6f-d99SFFKcMF19uw8ca4KGM4fEtm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJ9GRkcRevgjTvo8Dc32iw_BLJPcPfRdVKhJT5HNzQuXEeN3QFwl2n0M6ZmO-h7C6eIqWsDnSrEd&lib=MwxUjRcLr2qLlnVOLh12wSNkqcO1Ikdrk HTTP/1.0\r\nHost: script.googleusercontent.com\r\n\r\n" | openssl s_client -quiet -connect script.googleusercontent.com:443
2
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
3
verify return:1
4
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
5
verify return:1
6
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
7
verify return:1
8
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = *.googleusercontent.com
9
verify return:1
10
HTTP/1.0 302 Moved Temporarily
11
Content-Type: text/html; charset=UTF-8
12
Access-Control-Allow-Origin: *
13
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
14
Pragma: no-cache
15
Expires: Mon, 01 Jan 1990 00:00:00 GMT
16
Date: Thu, 26 Jan 2017 10:09:04 GMT
17
Location: https://script.google.com/macros/s/AKfycbyd5AcbAnWi2Yn0xhFRbyzS4qMq1VucMVgVvhul5XqS9HkAyJY/exec
18
P3P: CP="This is not a P3P policy! See https://support.google.com/accounts/answer/151657?hl=en for more info."
19
P3P: CP="This is not a P3P policy! See https://support.google.com/accounts/answer/151657?hl=en for more info."
20
X-Content-Type-Options: nosniff
21
X-Frame-Options: SAMEORIGIN
22
X-XSS-Protection: 1; mode=block
23
Server: GSE
24
Set-Cookie: NID=95=LfyLdcWr-otWAKH_gzWly1EKGddjDcpGTnxN0jJEwXrTlQ8ZCxGjN6xfv_oSAGfwANTnmhMtZKoxYiYcELUhaQonqHjtpoZnfAyDTrZuL0eHidD-ILjMw8bb-FAfIx3F;Domain=.googleusercontent.com;Path=/;Expires=Fri, 28-Jul-2017 10:09:04 GMT;HttpOnly
25
Set-Cookie: NID=95=iTSpZsmlpL0WS4AKDwFEmzPuU2zLnj-KwvWnJsCFMWSkv9cv6k8TGxtnFKNnYDqZ_GZe0CD4Ah2VCq3w8Am80YOIxSdJs-c45ENVCbQ3CB5XBvyCvIBX2S0XyZmPFsJi;Domain=.googleusercontent.com;Path=/;Expires=Fri, 28-Jul-2017 10:09:04 GMT;HttpOnly
26
Alt-Svc: quic=":443"; ma=2592000; v="35,34"
27
Accept-Ranges: none
28
Vary: Accept-Encoding
29
...

Eine weitere Weiterleitung. Wenn man dieser folgt, bekommt man nochmal 
ne Weiterleitung, und danach nochmal die vorherige Weiterleitung, eine 
Endlosschleife, ich müsste wohl die Cookies mitsenden, aber dass wird 
doch langsam zu aufwendig. Ausserdem ist es unwahrscheinlich, dass der 
ESP SSL überhaupt unterstützt.

von Jan L. (ranzcopter)


Lesenswert?

Marius D. schrieb:
> Ich finde da nix wie man das Datum und die Uhrzeit bekommen kann, Wetter
> gibt es 1000x anbieter.....

ich habe mal meine Musikanlage dabei "ertappt", dass sich selbige diese 
Daten hier per Webservice holt:
http://new.earthtools.org/webservices.htm

von MOBA 2. (Gast)


Lesenswert?

Jan L. schrieb:
> Marius D. schrieb:
>> Ich finde da nix wie man das Datum und die Uhrzeit bekommen kann, Wetter
>> gibt es 1000x anbieter.....
>
> ich habe mal meine Musikanlage dabei "ertappt", dass sich selbige diese
> Daten hier per Webservice holt:
> http://new.earthtools.org/webservices.htm

Hast du da einen Direktlink wo ich die JSON Daten habe?
Sehr undurchsichtig die Seite finde ich.

von Jan L. (ranzcopter)


Lesenswert?

Marius D. schrieb:
> Jan L. schrieb:
>> Marius D. schrieb:
>>> Ich finde da nix wie man das Datum und die Uhrzeit bekommen kann, Wetter
>>> gibt es 1000x anbieter.....
>>
>> ich habe mal meine Musikanlage dabei "ertappt", dass sich selbige diese
>> Daten hier per Webservice holt:
>> http://new.earthtools.org/webservices.htm
>
> Hast du da einen Direktlink wo ich die JSON Daten habe?
> Sehr undurchsichtig die Seite finde ich.

...funktioniert doch genau wie's da steht - ok, der Hostname hat sich 
geändert:
1
# curl "http://new.earthtools.org/timezone/51.9539/7.9909"
2
<?xml version="1.0" encoding="ISO-8859-1" ?>
3
<timezone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.earthtools.org/timezone.xsd">
4
  <version>1.0</version>
5
  <location>
6
    <latitude>51.9539</latitude>
7
    <longitude>7.9909</longitude>
8
  </location>
9
  <offset>1</offset>
10
  <suffix>A</suffix>
11
  <localtime>26 Jan 2017 12:21:58</localtime>
12
  <isotime>2017-01-26 12:21:58 +0100</isotime>
13
  <utctime>2017-01-26 11:21:58</utctime>
14
  <dst>False</dst>
15
</timezone>

...und ein Blick auf die Uhr zeigt - stimmt! ;-)

von MOBA 2. (Gast)


Lesenswert?

Jan L. schrieb:
> ...funktioniert doch genau wie's da steht - ok, der Hostname hat sich
> geändert:
>
1
> # curl "http://new.earthtools.org/timezone/51.9539/7.9909"
2
> <?xml version="1.0" encoding="ISO-8859-1" ?>
3
> <timezone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
4
> xsi:noNamespaceSchemaLocation="http://www.earthtools.org/timezone.xsd">
5
>   <version>1.0</version>
6
>   <location>
7
>     <latitude>51.9539</latitude>
8
>     <longitude>7.9909</longitude>
9
>   </location>
10
>   <offset>1</offset>
11
>   <suffix>A</suffix>
12
>   <localtime>26 Jan 2017 12:21:58</localtime>
13
>   <isotime>2017-01-26 12:21:58 +0100</isotime>
14
>   <utctime>2017-01-26 11:21:58</utctime>
15
>   <dst>False</dst>
16
> </timezone>
17
>
>
> ...und ein Blick auf die Uhr zeigt - stimmt! ;-)



Ich habe das getestet, wenn ich dem ESP das nach dem o.g. Schema sende, 
bekomme ich 3 Zeilen zurück das der Header nicht passt aber nicht diese 
Daten. Ist in diesem Fall auch XML, muss ich da anders vorgehen?

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

So geht es.

Mit HTTP/1.0 geht es nicht.

von Jan L. (ranzcopter)


Lesenswert?

Stefan U. schrieb:
> So geht es.
>
> Mit HTTP/1.0 geht es nicht.

...jedenfalls muss einfach irgendeine Protokollangabe hin, wird 
serverseitig "upgegradet"; und der HOST-Header muss sein.
1
# telnet new.earthtools.org 80
2
Trying 69.163.250.52...
3
Connected to new.earthtools.org.
4
Escape character is '^]'.
5
GET /timezone/51.9539/7.9909 HTTP/4711
6
HOST: new.earthtools.org
7
8
HTTP/1.1 200 OK
9
Date: Thu, 26 Jan 2017 16:16:24 GMT
10
Server: Apache
11
Connection: close
12
Content-Type: application/xml
13
14
<?xml version="1.0" encoding="ISO-8859-1" ?>
15
<timezone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.earthtools.org/timezone.xsd">
16
  <version>1.0</version>
17
  <location>
18
    <latitude>51.9539</latitude>
19
    <longitude>7.9909</longitude>
20
  </location>
21
  <offset>1</offset>
22
  <suffix>A</suffix>
23
  <localtime>26 Jan 2017 17:16:33</localtime>
24
  <isotime>2017-01-26 17:16:33 +0100</isotime>
25
  <utctime>2017-01-26 16:16:33</utctime>
26
  <dst>False</dst>
27
</timezone>

von guest (Gast)


Lesenswert?

Marius D. schrieb:
> Kennt jmd. vll noch einen anderen Anbieter wo ich simpel á la
> openweathermap die Uhrzeit, Tag und Datum bekommen kann, kostenlos im
> JSON?
>
> Ich finde da nix wie man das Datum und die Uhrzeit bekommen kann, Wetter
> gibt es 1000x anbieter.....

Falls Dir das reicht:
http://date.jsontest.com/
http://time.jsontest.com/
Beschreibung:
http://www.jsontest.com/

von MOBA 2. (Gast)


Lesenswert?

guest schrieb:
> Marius D. schrieb:
>> Kennt jmd. vll noch einen anderen Anbieter wo ich simpel á la
>> openweathermap die Uhrzeit, Tag und Datum bekommen kann, kostenlos im
>> JSON?
>>
>> Ich finde da nix wie man das Datum und die Uhrzeit bekommen kann, Wetter
>> gibt es 1000x anbieter.....
>
> Falls Dir das reicht:
> http://date.jsontest.com/
> http://time.jsontest.com/
> Beschreibung:
> http://www.jsontest.com/

Das ist geil. Perfekt danke.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.