Hacka din egen kollektivtrafik tidtabell (6 / 7 steg)
Steg 6: Genomförandet - skicka en HTTP-begäran med Edison
Edisons Ardurino miljö ger alla funktioner du behöver utföra en http-begäran. Bara innehåller < Ethernet.h > och skapa en instans av EthernetClient i mitt exempel deklareras som "klient". Ta en titt på exemplen i posten "Ethernet" om du vill veta mer om biblioteket.
Här bara några kodsträngarna att visa dig de grundläggande funktionerna. Jag bifogade hela källkoden till slut - detta här är bara för dig att förstå - jag hoppas det själv förklarar:
char readstring [5000];
EthernetClient klient;
int jag = 0;
byte [mac] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IP-adress server(195,30,121,20); Servern är efa.mvv-muenchen.de
Ethernet.BEGIN(Mac);
client.println(CMD); CMD är den begäran som du vill skicka som en sträng
IF(client.available()) {
char c = client.read(); Läs en char
ReadString [i ++] = c; lägga den till arrayen röding
}
Om du har ytterligare frågor vänligen besök: http://www.arduino.cc/en/reference/ethernet
Strängen "cmd" måste ha samma struktur som vi använde i netcat innan strängen.
CMD = GET /xhr_departures? locationServerActive = 1 & statslösa = 1 & type_d... HTTP/1.0 "
Se till att hantera rätt tid och datum inuti strängen (i rätt format!). Jag la ett "HTTP / 1.0" i slutet som det var gjort i exemplen.
Först och främst bör du kontrollera om du får samma resultat som med netcat genom att skriva ut tecken till seriekonsoll. Om du inte - du gjorde något fel). Kontrollera för stavfel och se till att skicka en radmatning '\n' i slutet.
Anta att arbetar - Grattis! Du är nästan klar! Resten av ditt jobb är att extrahera information du verkligen behöver från mottagna strängen. Du måste som enligt de uppgifter du får av servern. Jag gjorde det på en "quick and dirty" sätt och du kan göra det mycket mer elegant.
Jag ignorera alla tecken innan jag ser en början av kroppen. Du behöver inte göra det - men det kändes obehagligt att hålla alla värdelösa data;). Jag använde "om (strstr (readstring,"< tbody >")) {" att kontrollera.
-Jag letade efter gemensamma mönster till extraktet den information jag behöver. Med "j" och "k" Markera jag indexet precis före och efter tecken jag behöver. Använd "indexOf" att hitta den. I mitt fall numret var omgiven av "... utskrivbara > "och"< \span >". Använd "understräng" för att lagra linjen numrera själv i en separat sträng. Upprepa att för all information du behöver.
j = bodyString.indexOf ("\"printable\">", j) + strlen ("\"printable\">");
k = bodyString.indexOf ("</span >", j);
innehållet = bodyString.substring(j,k)