Sida 1 av 8

Arduino - Anropa hemsida

Postat: 14 mars 2018, 11:20:56
av GeekJoan
Håller på med en liten display som talar om när nästa buss kommer. Har skaffat nycklar och grejer till SL's API så jag kan anropa och få rätt tider etc. Men eftersom jag har ett begränsat antal anrop per timme så vill jag inte jobba mot sl's hemsida. Så jag kopierade resultatet och la det på min egna sida som en statisk sida http://geekjoan.com/sl_test.html

Mitt problem just nu är att jag får det inte att funka.
Resultat:
connecting...
connected
HTTP/1.1 301 Moved Permanently
Date: Wed, 14 Mar 2018 09:03:25 GMT
Server: Apache/2.4.25 (Debian)
Location: http://buggfix.se/
Content-Length: 306
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://buggfix.se/">here</a>.</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at http://www.google.com Port 80</address>
</body></html>

disconnecting.


Exempelkod:

Kod: Markera allt

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x3C, 0xA4 };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "geekjoan.com";    // name address for Google (using DNS)

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 0, 177);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /sl_test.html HTTP/1.1");
    client.println("Host: www.google.com");
    client.println("Connection: close");
    client.println();
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    while (true);
  }
}

Re: Arduino - Anropa hemsida

Postat: 14 mars 2018, 11:23:47
av GeekJoan
Om jag ändrar till SL's adress så får jag ut följande:

connecting...
connected
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.5
server: Microsoft-IIS/8.5
x-aspnet-version: 4.0.30319
x-powered-by: ASP.NET
X-Powered-By: ASP.NET
Date: Wed, 14 Mar 2018 10:22:32 GMT
Connection: close
Content-Length: 1670

{"StatusCode":0,"Message":null,"ExecutionTime":42,"ResponseData":{"LatestUpdate":"2018-03-14T11:22:26","DataAge":6,"Metros":[],"Buses":[{"GroupOfLine":null,"TransportMode":"BUS","LineNumber":"509","Destination":"Brommaplan","JourneyDirection":2,"StopAreaName":"Rosenborgsgatan","StopAreaNumber":50213,"StopPointNumber":50214,"StopPointDesignation":null,"TimeTabledDateTime":"2018-03-14T11:24:32","ExpectedDateTime":"2018-03-14T11:24:11","DisplayTime":"1 min","JourneyNumber":20874,"Deviations":null},{"GroupOfLine":null,"TransportMode":"BUS","LineNumber":"509","Destination":"Danderyds sjukhus","JourneyDirection":1,"StopAreaName":"Rosenborgsgatan","StopAreaNumber":50213,"StopPointNumber":50213,"StopPointDesignation":null,"TimeTabledDateTime":"2018-03-14T11:33:06","ExpectedDateTime":"2018-03-14T11:33:06","DisplayTime":"10 min","JourneyNumber":20850,"Deviations":null},{"GroupOfLine":null,"TransportMode":"BUS","LineNumber":"509","Destination":"Brommaplan","JourneyDirection":2,"StopAreaName":"Rosenborgsgatan","StopAreaNumber":50213,"StopPointNumber":50214,"StopPointDesignation":null,"TimeTabledDateTime":"2018-03-14T11:39:32","ExpectedDateTime":"2018-03-14T11:39:32","DisplayTime":"17 min","JourneyNumber":20907,"Deviations":null},{"GroupOfLine":null,"TransportMode":"BUS","LineNumber":"509","Destination":"Danderyds sjukhus","JourneyDirection":1,"StopAreaName":"Rosenborgsgatan","StopAreaNumber":50213,"StopPointNumber":50213,"StopPointDesignation":null,"TimeTabledDateTime":"2018-03-14T11:48:06","ExpectedDateTime":"2018-03-14T11:48:06","DisplayTime":"25 min","JourneyNumber":20875,"Deviations":null}],"Trains":[],"Trams":[],"Ships":[],"StopPointDeviations":[]}}
disconnecting.

Re: Arduino - Anropa hemsida

Postat: 14 mars 2018, 11:33:12
av Kulla
I svaret från SL du får json tillbaka med rätt data verkar som. Vad funkar inte exakt?

Du får array av bussar som kommer så du bara behöver ta ExpectedDateTime och eventuellt någon annan variabel du behöver.

Kod: Markera allt

        "Buses": [{
            "GroupOfLine": null,
            "TransportMode": "BUS",
            "LineNumber": "509",
            "Destination": "Brommaplan",
            "JourneyDirection": 2,
            "StopAreaName": "Rosenborgsgatan",
            "StopAreaNumber": 50213,
            "StopPointNumber": 50214,
            "StopPointDesignation": null,
            "TimeTabledDateTime": "2018-03-14T11:24:32",
            "ExpectedDateTime": "2018-03-14T11:24:11",
            "DisplayTime": "1 min",
            "JourneyNumber": 20874,
            "Deviations": null
        }, {
            "GroupOfLine": null,
            "TransportMode": "BUS",
            "LineNumber": "509",
            "Destination": "Danderyds sjukhus",
            "JourneyDirection": 1,
            "StopAreaName": "Rosenborgsgatan",
            "StopAreaNumber": 50213,
            "StopPointNumber": 50213,
            "StopPointDesignation": null,
            "TimeTabledDateTime": "2018-03-14T11:33:06",
            "ExpectedDateTime": "2018-03-14T11:33:06",
            "DisplayTime": "10 min",
            "JourneyNumber": 20850,
            "Deviations": null
        }, {
            "GroupOfLine": null,
            "TransportMode": "BUS",
            "LineNumber": "509",
            "Destination": "Brommaplan",
            "JourneyDirection": 2,
            "StopAreaName": "Rosenborgsgatan",
            "StopAreaNumber": 50213,
            "StopPointNumber": 50214,
            "StopPointDesignation": null,
            "TimeTabledDateTime": "2018-03-14T11:39:32",
            "ExpectedDateTime": "2018-03-14T11:39:32",
            "DisplayTime": "17 min",
            "JourneyNumber": 20907,
            "Deviations": null
        }, {
            "GroupOfLine": null,
            "TransportMode": "BUS",
            "LineNumber": "509",
            "Destination": "Danderyds sjukhus",
            "JourneyDirection": 1,
            "StopAreaName": "Rosenborgsgatan",
            "StopAreaNumber": 50213,
            "StopPointNumber": 50213,
            "StopPointDesignation": null,
            "TimeTabledDateTime": "2018-03-14T11:48:06",
            "ExpectedDateTime": "2018-03-14T11:48:06",
            "DisplayTime": "25 min",
            "JourneyNumber": 20875,
            "Deviations": null
        }],

Re: Arduino - Anropa hemsida

Postat: 14 mars 2018, 12:15:30
av johano
Problemet är att du skickar fel Hostheader (www.google.com), prova med att skicka "geekjoan.com" där istället så funkar det.

/j

Re: Arduino - Anropa hemsida

Postat: 14 mars 2018, 13:23:34
av Kulla
Host header är oviktigt eftersom han får svar från API.

Re: Arduino - Anropa hemsida

Postat: 14 mars 2018, 13:30:33
av simply
Inte när han testar mot sin egen server... där nämns ju även google i felmeddelandet:
"Apache/2.4.25 (Debian) Server at http://www.google.com Port 80"

Re: Arduino - Anropa hemsida

Postat: 14 mars 2018, 13:42:31
av GeekJoan
Japp, där var problemet. Tack!

Re: Arduino - Anropa hemsida

Postat: 14 mars 2018, 15:41:52
av Kulla
simply skrev:Inte när han testar mot sin egen server... där nämns ju även google i felmeddelandet:
"Apache/2.4.25 (Debian) Server at http://www.google.com Port 80"
Ah, det stämmer, jag var mer fokuserad på SL server :D

Re: Arduino - Anropa hemsida

Postat: 19 mars 2018, 22:45:06
av GeekJoan
OK, nu till nästa "problem" (JA, jag är helt grön på detta)

Nu när jag väl får ut data från hemsidan så vill jag så klart leta efter rätt sak.
Vad jag är intresserad av är så klart NÄR nästa buss kommer.

Men jag får det inte att funka. Har testat följande:

Kod: Markera allt

void loop() {
  if (client.available()) {
    
    char c = client.read();   // Läser hemsidan och stoppar det i c
    String SLData = String(c);    // Stoppar in det jag läser i strängen SLData
    Serial.print(SLData);    // Printar ut det som är i SLData

    char r = SLData.indexOf("DisplayTime", 1);  // Här vet i fan om jag är på rätt spår, 
    Serial.print(r);  // Om denna raden är med så blir det bara blaj av texten.
  }

Om denna raden är med så blir det bara blaj av texten: Serial.print(r);

Kod: Markera allt

connecting...
connected
H⸮T⸮T⸮P⸮/⸮1⸮.⸮1⸮ ⸮2⸮0⸮0⸮ ⸮O⸮K⸮
⸮
⸮D⸮a⸮t⸮e⸮:⸮ ⸮M⸮o⸮n⸮,⸮ ⸮1⸮9⸮ ⸮M⸮a⸮r⸮ ⸮2⸮0⸮1⸮8⸮ ⸮2⸮1⸮:⸮4⸮1⸮:⸮3⸮2⸮ ⸮G⸮M⸮T⸮
⸮
⸮S⸮e⸮r⸮v⸮e⸮r⸮:⸮ ⸮A⸮p⸮a⸮c⸮h⸮e⸮/⸮2⸮.⸮4⸮.⸮2⸮5⸮ ⸮(⸮D⸮e⸮b⸮i⸮a⸮n⸮)⸮
⸮
⸮L⸮a⸮s⸮t⸮-⸮M⸮o⸮d⸮i⸮f⸮i⸮e⸮d⸮:⸮ ⸮T⸮u⸮e⸮,⸮ ⸮1⸮3⸮ ⸮M⸮a⸮r⸮ ⸮2⸮0⸮1⸮8⸮ ⸮1⸮9⸮:⸮1⸮8⸮:⸮3⸮3⸮ ⸮G⸮M⸮T⸮
⸮
⸮E⸮T⸮a⸮g⸮:⸮ ⸮"⸮5⸮8⸮a⸮-⸮5⸮6⸮7⸮5⸮0⸮1⸮f⸮d⸮a⸮5⸮4⸮4⸮0⸮"⸮
⸮
⸮A⸮c⸮c⸮e⸮p⸮t⸮-⸮R⸮a⸮n⸮g⸮e⸮s⸮:⸮ ⸮b⸮y⸮t⸮e⸮s⸮
⸮
⸮C⸮o⸮n⸮t⸮e⸮n⸮t⸮-⸮L⸮e⸮n⸮g⸮t⸮h⸮:⸮ ⸮1⸮4⸮1⸮8⸮
⸮
⸮C⸮o⸮n⸮n⸮e⸮c⸮t⸮i⸮o⸮n⸮:⸮ ⸮c⸮l⸮o⸮s⸮e⸮
⸮
⸮C⸮o⸮n⸮t⸮e⸮n⸮t⸮-⸮T⸮y⸮p⸮e⸮:⸮ ⸮t⸮e⸮x⸮t⸮/⸮h⸮t⸮m⸮l⸮
⸮
⸮
⸮
⸮⸮⸮⸮⸮⸮⸮<⸮h⸮t⸮m⸮l⸮>⸮
⸮<⸮h⸮e⸮a⸮d⸮>⸮<⸮/⸮h⸮e⸮a⸮d⸮>⸮
⸮<⸮b⸮o⸮d⸮y⸮>⸮
⸮<⸮p⸮r⸮e⸮ ⸮s⸮t⸮y⸮l⸮e⸮=⸮"⸮w⸮o⸮r⸮d⸮-⸮w⸮r⸮a⸮p⸮:⸮ ⸮b⸮r⸮e⸮a⸮k⸮-⸮w⸮o⸮r⸮d⸮;⸮ ⸮w⸮h⸮i⸮t⸮e⸮-⸮s⸮p⸮a⸮c⸮e⸮:⸮ ⸮p⸮r⸮e⸮-⸮w⸮r⸮a⸮p⸮;⸮"⸮>⸮{⸮"⸮S⸮t⸮a⸮t⸮u⸮s⸮C⸮o⸮d⸮e⸮"⸮:⸮0⸮,⸮"⸮M⸮e⸮s⸮s⸮a⸮g⸮e⸮"⸮:⸮n⸮u⸮l⸮l⸮,⸮"⸮E⸮x⸮e⸮c⸮u⸮t⸮i⸮o⸮n⸮T⸮i⸮m⸮e⸮"⸮:⸮2⸮9⸮,⸮"⸮R⸮e⸮s⸮p⸮o⸮n⸮s⸮e⸮D⸮a⸮t⸮a⸮"⸮:⸮{⸮"⸮L⸮a⸮t⸮e⸮s⸮t⸮U⸮p⸮d⸮a⸮t⸮e⸮"⸮:⸮"⸮2⸮0⸮1⸮8⸮-⸮0⸮3⸮-⸮1⸮3⸮T⸮2⸮0⸮:⸮1⸮4⸮:⸮2⸮1⸮"⸮,⸮"⸮D⸮a⸮t⸮a⸮A⸮g⸮e⸮"⸮:⸮1⸮1⸮,⸮"⸮M⸮e⸮t⸮r⸮o⸮s⸮"⸮:⸮[⸮]⸮,⸮"⸮B⸮u⸮s⸮e⸮s⸮"⸮:⸮[⸮{⸮"⸮G⸮r⸮o⸮u⸮p⸮O⸮f⸮L⸮i⸮n⸮e⸮"⸮:⸮n⸮u⸮l⸮l⸮,⸮"⸮T⸮r⸮a⸮n⸮s⸮p⸮o⸮r⸮t⸮M⸮o⸮d⸮e⸮"⸮:⸮"⸮B⸮U⸮S⸮"⸮,⸮"⸮L⸮i⸮n⸮e⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮"⸮5⸮0⸮9⸮"⸮,⸮"⸮D⸮e⸮s⸮t⸮i⸮n⸮a⸮t⸮i⸮o⸮n⸮"⸮:⸮"⸮D⸮a⸮n⸮d⸮e⸮r⸮y⸮d⸮s⸮ ⸮s⸮j⸮u⸮k⸮h⸮u⸮s⸮"⸮,⸮"⸮J⸮o⸮u⸮r⸮n⸮e⸮y⸮D⸮i⸮r⸮e⸮c⸮t⸮i⸮o⸮n⸮"⸮:⸮1⸮,⸮"⸮S⸮t⸮o⸮p⸮A⸮r⸮e⸮a⸮N⸮a⸮m⸮e⸮"⸮:⸮"⸮R⸮o⸮s⸮e⸮n⸮b⸮o⸮r⸮g⸮s⸮g⸮a⸮t⸮a⸮n⸮"⸮,⸮"⸮S⸮t⸮o⸮p⸮A⸮r⸮e⸮a⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮5⸮0⸮2⸮1⸮3⸮,⸮"⸮S⸮t⸮o⸮p⸮P⸮o⸮i⸮n⸮t⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮5⸮0⸮2⸮1⸮3⸮,⸮"⸮S⸮t⸮o⸮p⸮P⸮o⸮i⸮n⸮t⸮D⸮e⸮s⸮i⸮g⸮n⸮a⸮t⸮i⸮o⸮n⸮"⸮:⸮n⸮u⸮l⸮l⸮,⸮"⸮T⸮i⸮m⸮e⸮T⸮a⸮b⸮l⸮e⸮d⸮D⸮a⸮t⸮e⸮T⸮i⸮m⸮e⸮"⸮:⸮"⸮2⸮0⸮1⸮8⸮-⸮0⸮3⸮-⸮1⸮3⸮T⸮2⸮0⸮:⸮1⸮7⸮:⸮3⸮9⸮"⸮,⸮"⸮E⸮x⸮p⸮e⸮c⸮t⸮e⸮d⸮D⸮a⸮t⸮e⸮T⸮i⸮m⸮e⸮"⸮:⸮"⸮2⸮0⸮1⸮8⸮-⸮0⸮3⸮-⸮1⸮3⸮T⸮2⸮0⸮:⸮2⸮1⸮:⸮1⸮1⸮"⸮,⸮"⸮D⸮i⸮s⸮p⸮l⸮a⸮y⸮T⸮i⸮m⸮e⸮"⸮:⸮"⸮6⸮ ⸮m⸮i⸮n⸮"⸮,⸮"⸮J⸮o⸮u⸮r⸮n⸮e⸮y⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮2⸮2⸮0⸮5⸮6⸮,⸮"⸮D⸮e⸮v⸮i⸮a⸮t⸮i⸮o⸮n⸮s⸮"⸮:⸮n⸮u⸮l⸮l⸮}⸮,⸮{⸮"⸮G⸮r⸮o⸮u⸮p⸮O⸮f⸮L⸮i⸮n⸮e⸮"⸮:⸮n⸮u⸮l⸮l⸮,⸮"⸮T⸮r⸮a⸮n⸮s⸮p⸮o⸮r⸮t⸮M⸮o⸮d⸮e⸮"⸮:⸮"⸮B⸮U⸮S⸮"⸮,⸮"⸮L⸮i⸮n⸮e⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮"⸮5⸮0⸮9⸮"⸮,⸮"⸮D⸮e⸮s⸮t⸮i⸮n⸮a⸮t⸮i⸮o⸮n⸮"⸮:⸮"⸮D⸮a⸮n⸮d⸮e⸮r⸮y⸮d⸮s⸮ ⸮s⸮j⸮u⸮k⸮h⸮u⸮s⸮"⸮,⸮"⸮J⸮o⸮u⸮r⸮n⸮e⸮y⸮D⸮i⸮r⸮e⸮c⸮t⸮i⸮o⸮n⸮"⸮:⸮1⸮,⸮"⸮S⸮t⸮o⸮p⸮A⸮r⸮e⸮a⸮N⸮a⸮m⸮e⸮"⸮:⸮"⸮R⸮o⸮s⸮e⸮n⸮b⸮o⸮r⸮g⸮s⸮g⸮a⸮t⸮a⸮n⸮"⸮,⸮"⸮S⸮t⸮o⸮p⸮A⸮r⸮e⸮a⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮5⸮0⸮2⸮1⸮3⸮,⸮"⸮S⸮t⸮o⸮p⸮P⸮o⸮i⸮n⸮t⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮5⸮0⸮2⸮1⸮3⸮,⸮"⸮S⸮t⸮o⸮p⸮P⸮o⸮i⸮n⸮t⸮D⸮e⸮s⸮i⸮g⸮n⸮a⸮t⸮i⸮o⸮n⸮"⸮:⸮n⸮u⸮l⸮l⸮,⸮"⸮T⸮i⸮m⸮e⸮T⸮a⸮b⸮l⸮e⸮d⸮D⸮a⸮t⸮e⸮T⸮i⸮m⸮e⸮"⸮:⸮"⸮2⸮0⸮1⸮8⸮-⸮0⸮3⸮-⸮1⸮3⸮T⸮2⸮0⸮:⸮3⸮2⸮:⸮3⸮9⸮"⸮,⸮"⸮E⸮x⸮p⸮e⸮c⸮t⸮e⸮d⸮D⸮a⸮t⸮e⸮T⸮i⸮m⸮e⸮"⸮:⸮"⸮2⸮0⸮1⸮8⸮-⸮0⸮3⸮-⸮1⸮3⸮T⸮2⸮0⸮:⸮3⸮4⸮:⸮2⸮7⸮"⸮,⸮"⸮D⸮i⸮s⸮p⸮l⸮a⸮y⸮T⸮i⸮m⸮e⸮"⸮:⸮"⸮1⸮9⸮ ⸮m⸮i⸮n⸮"⸮,⸮"⸮J⸮o⸮u⸮r⸮n⸮e⸮y⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮2⸮2⸮0⸮7⸮9⸮,⸮"⸮D⸮e⸮v⸮i⸮a⸮t⸮i⸮o⸮n⸮s⸮"⸮:⸮n⸮u⸮l⸮l⸮}⸮,⸮{⸮"⸮G⸮r⸮o⸮u⸮p⸮O⸮f⸮L⸮i⸮n⸮e⸮"⸮:⸮n⸮u⸮l⸮l⸮,⸮"⸮T⸮r⸮a⸮n⸮s⸮p⸮o⸮r⸮t⸮M⸮o⸮d⸮e⸮"⸮:⸮"⸮B⸮U⸮S⸮"⸮,⸮"⸮L⸮i⸮n⸮e⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮"⸮5⸮0⸮9⸮"⸮,⸮"⸮D⸮e⸮s⸮t⸮i⸮n⸮a⸮t⸮i⸮o⸮n⸮"⸮:⸮"⸮B⸮r⸮o⸮m⸮m⸮a⸮p⸮l⸮a⸮n⸮"⸮,⸮"⸮J⸮o⸮u⸮r⸮n⸮e⸮y⸮D⸮i⸮r⸮e⸮c⸮t⸮i⸮o⸮n⸮"⸮:⸮2⸮,⸮"⸮S⸮t⸮o⸮p⸮A⸮r⸮e⸮a⸮N⸮a⸮m⸮e⸮"⸮:⸮"⸮R⸮o⸮s⸮e⸮n⸮b⸮o⸮r⸮g⸮s⸮g⸮a⸮t⸮a⸮n⸮"⸮,⸮"⸮S⸮t⸮o⸮p⸮A⸮r⸮e⸮a⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮5⸮0⸮2⸮1⸮3⸮,⸮"⸮S⸮t⸮o⸮p⸮P⸮o⸮i⸮n⸮t⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮5⸮0⸮2⸮1⸮4⸮,⸮"⸮S⸮t⸮o⸮p⸮P⸮o⸮i⸮n⸮t⸮D⸮e⸮s⸮i⸮g⸮n⸮a⸮t⸮i⸮o⸮n⸮"⸮:⸮n⸮u⸮l⸮l⸮,⸮"⸮T⸮i⸮m⸮e⸮T⸮a⸮b⸮l⸮e⸮d⸮D⸮a⸮t⸮e⸮T⸮i⸮m⸮e⸮"⸮:⸮"⸮2⸮0⸮1⸮8⸮-⸮0⸮3⸮-⸮1⸮3⸮T⸮2⸮0⸮:⸮4⸮0⸮:⸮0⸮5⸮"⸮,⸮"⸮E⸮x⸮p⸮e⸮c⸮t⸮e⸮d⸮D⸮a⸮t⸮e⸮T⸮i⸮m⸮e⸮"⸮:⸮"⸮2⸮0⸮1⸮8⸮-⸮0⸮3⸮-⸮1⸮3⸮T⸮2⸮0⸮:⸮4⸮0⸮:⸮0⸮5⸮"⸮,⸮"⸮D⸮i⸮s⸮p⸮l⸮a⸮y⸮T⸮i⸮m⸮e⸮"⸮:⸮"⸮2⸮0⸮:⸮4⸮0⸮"⸮,⸮"⸮J⸮o⸮u⸮r⸮n⸮e⸮y⸮N⸮u⸮m⸮b⸮e⸮r⸮"⸮:⸮2⸮2⸮1⸮1⸮9⸮,⸮"⸮D⸮e⸮v⸮i⸮a⸮t⸮i⸮o⸮n⸮s⸮"⸮:⸮n⸮u⸮l⸮l⸮}⸮]⸮,⸮"⸮T⸮r⸮a⸮i⸮n⸮s⸮"⸮:⸮[⸮]⸮,⸮"⸮T⸮r⸮a⸮m⸮s⸮"⸮:⸮[⸮]⸮,⸮"⸮S⸮h⸮i⸮p⸮s⸮"⸮:⸮[⸮]⸮,⸮"⸮S⸮t⸮o⸮p⸮P⸮o⸮i⸮n⸮t⸮D⸮e⸮v⸮i⸮a⸮t⸮i⸮o⸮n⸮s⸮"⸮:⸮[⸮]⸮}⸮}⸮<⸮/⸮p⸮r⸮e⸮>⸮
⸮<⸮/⸮b⸮o⸮d⸮y⸮>⸮
⸮<⸮/⸮h⸮t⸮m⸮l⸮>⸮
⸮
disconnecting.

Tycker det borde bli rätt först och sen komma blaj om det nu är helt fel på min syntax?

Re: Arduino - Anropa hemsida

Postat: 20 mars 2018, 06:55:41
av Fortran
Helt blaj är det väl inte? :humm:
Plockar du bort alla ⸮ så blir det ju rätt.
Så nånting i din loop spottar ur sig något extra varje varv.

Det kan inte va så simpelt att du behöver specificera datatyp typ Serial.print(r, DEC); ?

Kod: Markera allt

connecting...
connected
HTTP/1.1 200 OK

Date: Mon, 19 Mar 2018 21:41:32 GMT

Server: Apache/2.4.25 (Debian)

Last-Modified: Tue, 13 Mar 2018 19:18:33 GMT

ETag: "58a-567501fda5440"

Accept-Ranges: bytes

Content-Length: 1418

Connection: close

Content-Type: text/html



<html>
<head></head>
<body>
<pre style="word-wrap: break-word; white-space: pre-wrap;">{"StatusCode":0,"Message":null,"ExecutionTime":29,"ResponseData":{"LatestUpdate":"2018-03-13T20:14:21","DataAge":11,"Metros":[],"Buses":[{"GroupOfLine":null,"TransportMode":"BUS","LineNumber":"509","Destination":"Danderyds sjukhus","JourneyDirection":1,"StopAreaName":"Rosenborgsgatan","StopAreaNumber":50213,"StopPointNumber":50213,"StopPointDesignation":null,"TimeTabledDateTime":"2018-03-13T20:17:39","ExpectedDateTime":"2018-03-13T20:21:11","DisplayTime":"6 min","JourneyNumber":22056,"Deviations":null},{"GroupOfLine":null,"TransportMode":"BUS","LineNumber":"509","Destination":"Danderyds sjukhus","JourneyDirection":1,"StopAreaName":"Rosenborgsgatan","StopAreaNumber":50213,"StopPointNumber":50213,"StopPointDesignation":null,"TimeTabledDateTime":"2018-03-13T20:32:39","ExpectedDateTime":"2018-03-13T20:34:27","DisplayTime":"19 min","JourneyNumber":22079,"Deviations":null},{"GroupOfLine":null,"TransportMode":"BUS","LineNumber":"509","Destination":"Brommaplan","JourneyDirection":2,"StopAreaName":"Rosenborgsgatan","StopAreaNumber":50213,"StopPointNumber":50214,"StopPointDesignation":null,"TimeTabledDateTime":"2018-03-13T20:40:05","ExpectedDateTime":"2018-03-13T20:40:05","DisplayTime":"20:40","JourneyNumber":22119,"Deviations":null}],"Trains":[],"Trams":[],"Ships":[],"StopPointDeviations":[]}}</pre>
</body>
</html>

Re: Arduino - Anropa hemsida

Postat: 20 mars 2018, 10:09:14
av rvl

Kod: Markera allt

String SLData = String(c);    // Stoppar in det jag läser i strängen SLData
"Stoppar in" stämmer för det är just det som brutalt sker, vill du däremot bygga up din sträng i en buffer så måste instoppningspositionen stegas framåt. Sen först när hela strängen är klar blir det dags att söka i den och printa ut, i stället för att skriva ett tecken (+ skräp) varje varv.

Re: Arduino - Anropa hemsida

Postat: 20 mars 2018, 11:44:07
av Mr Andersson
Vi kan gå igenom programmet rad för rad. Indata är "HTTP ..."
char c = client.read(); Läs ett tecken ('H') till c
String SLData = String(c); Bygg en sträng av c, dvs "H"
Serial.print(SLData); Skriv ut "H"
char r = SLData.indexOf("DisplayTime", 1); Testa om "H" innehåller "DisplayTime". Det gör det inte, r = -1
Serial.print(r); Skriv ut -1 som ASCII, terminalen vet inte hur den ska tolka det och skriver ?
Sen fortsätt tecken för tecken genom hela texten.

Testa om det här fungerar bättre (otestad kod)

Kod: Markera allt

void loop() {
	String SLData;
	while (client.available()) {
		SLData += client.read();
	}

	if (SLData.length() > 0) {
		Serial.print(SLData);

		int r = SLData.indexOf("DisplayTime", 1);
		if (r >= 0) {
			Serial.print("DisplayTime finns på position ");
			Serial.print(r);
		}
	}
}

Re: Arduino - Anropa hemsida

Postat: 20 mars 2018, 12:16:25
av Jan Almqvist
Det kommer väl nästan 2000 tecken, jag undrar om minnet kommer att räcka?

Kod: Markera allt

   String SLData;
   while (client.available()) {
      SLData += client.read();
   }

Re: Arduino - Anropa hemsida

Postat: 20 mars 2018, 17:54:25
av Mr Andersson
Jo det är sant, glömde bort hur lite minne det finns.

Man måste nog göra någon egen strängsökfunktion som bara sparar en lite del av texten åt gången.

Re: Arduino - Anropa hemsida

Postat: 20 mars 2018, 18:13:20
av johano
Om man nu inte kan trimma ner det data som hamnar på den egna servern till att endast innehålla det relevanta?
Alternativt bygger en liten "tjänst" som kan "strippa ner" data vid requesttillfället.

Parse:a (potentiellt stora) strängar låter inte som ett perfekt jobb för en Arduino

/j