Arduino - Anropa hemsida

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Aha, det är klart det är så. I mitt huvud så tog den alla data och stoppade den i c = SLData. Sen började den söka. Men nej.
Borde man inte kunna "analysera" inkommande data direkt så den kollar efter "DisplayTime" och efter det kommit så sparar den ner följande 4-6 tecken i en sträng?
Användarvisningsbild
Icecap
Inlägg: 26105
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Arduino - Anropa hemsida

Inlägg av Icecap »

Det kan definitivt gå! Det är ju bara att definiera en konstant sträng med det den ska hitta ("Display Time") och sedan ha en rutin som jämför med första bokstaven.

Är de lika stegar den ett steg i strängen och kollar att nästa tecken är lika med osv. När den når strängen är de nästa data som kommer dom du vill ha.

Om det finns fel tecken i den inkommande data är det ju bara att börja om på tecken 1.

Men det hade ju varit bättre och enklare med en µC med minne nog.
Senast redigerad av Icecap 5 april 2018, 21:48:24, redigerad totalt 1 gång.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Awww.. Jag blir så trött...

Tänkte jag skulle försöka städa upp lite i alla data så det blir mindre för arduinon att ta hand om. Men då stöter jag så klart på nästa problem.
Söker efter DisplayTime och sparar allt efter den tills den kommer till Journey stoppar in det i $match.
Men eftersom DisplayTime och Journey finns med flera gånger i alla data så stannar den inte vid första träffen.

PHP kod

Kod: Markera allt

<?php
$content = file_get_contents('http://geekjoan.com/sl_test.html');

preg_match('#DisplayTime(.*)Journey#', $content, $match);

$ONE = $match[1];
$ONE =  substr($ONE, 3, -3); // Plockar bort tre tecken efter DisplayTime och tre tecken innan Journey

echo "Next bus: $ONE";

?>
Detta är vad som kommer ut: Det som är i rött är inte med, det har jag bara lagt dit nu för att förtydliga

DisplayTime":"Next bus: 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","Journey
Användarvisningsbild
rvl
Inlägg: 5719
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Arduino - Anropa hemsida

Inlägg av rvl »

Kunde vara värt att utnyttja att det är json... Har obefintlig erfarenhet av php, men kanske dethär kan ge ideer:
https://stackoverflow.com/questions/293 ... n-with-php
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Jag får försöka läsa på lite.
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3743
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Mickecarlsson »

Kan detta vara något att bygga på:

Kod: Markera allt

<?php

$json='{"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":[]}}';

   $bussar = json_decode($json,true);
   //echo $arr[1];
    //var_dump($arr["ResponseData"]["Buses"]);
   $antal_bussar = count($bussar["ResponseData"]["Buses"]);
   for ($i =0; $i < $antal_bussar; $i++)
   {
   	echo "Linje: " . $bussar["ResponseData"]["Buses"][$i]["LineNumber"] . " ";
   	echo "Destination: " . $bussar["ResponseData"]["Buses"][$i]["Destination"] . " ";
   	echo "Stannar: " . $bussar["ResponseData"]["Buses"][$i]["StopAreaName"] . " ";
   	echo "Ungefär: " . $bussar["ResponseData"]["Buses"][$i]["ExpectedDateTime"] . "\n";
   }
?>
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Ska testa.
Utan att prova så borde $json.... funka att byta ut till: $json = file_get_contents('http://geekjoan.com/sl_test.html'); ?
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Ändrade lite, But it's a live! http://geekjoan.com/multiscreen/sldata2.php

Tack så mycket Mickecarlsson! :tumupp:
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3743
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Mickecarlsson »

Vasego GeekJoan, kul att det funkar. :D :D
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Lika bra jag passar på att fråga när jag har någon som kan.
Använder samma kod men för en annan hållplats där det är mycket mer trafik från olika bussar och tåg etc.
Om jag bara är intresserad av buss 509 hur lägger jag in:
["LineNumber"="509"]?

http://geekjoan.com/multiscreen/sldata_torg.php
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3743
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Mickecarlsson »

Kod: Markera allt

   $bussar = json_decode($json,true);
   $antal_bussar = count($bussar["ResponseData"]["Buses"]);
   for ($i =0; $i < $antal_bussar; $i++)
   {
   	if($bussar["ResponseData"]["Buses"][$i]["LineNumber"] == "509")
   	{
   	echo "Linje: " . $bussar["ResponseData"]["Buses"][$i]["LineNumber"] . " ";
   	echo "Destination: " . $bussar["ResponseData"]["Buses"][$i]["Destination"] . " ";
   	echo "Stannar: " . $bussar["ResponseData"]["Buses"][$i]["StopAreaName"] . " ";
   	echo "Ungefär: " . $bussar["ResponseData"]["Buses"][$i]["ExpectedDateTime"] . "\n";	
   	}
   }

Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

:tumupp:
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Har stött på patrull igen.
Kollar "Deviations" i phpskriptet, och nu när det var något "fel" så blev det knas. Antar att det är dessa tecken som strular till det:
[{"Text":"Förs....
Så istället för att kolla "Deviations" kanske man ska kolla "Text". Men "Text" finns inte med alls om det inte är en försening eller liknande. Så då kommer jag säkert få fel på det.

Osäker på hur man skriver in den kollen?

{"GroupOfLine":null,"TransportMode":"BUS","LineNumber":"509","Destination":"Danderyds sjukhus","JourneyDirection":1,"StopAreaName":"Sundbybergs torg","StopAreaNumber":50242,"StopPointNumber":50242,"StopPointDesignation":"C","TimeTabledDateTime":"2018-04-05T13:36:09","ExpectedDateTime":"2018-04-05T13:36:09","DisplayTime":"8 min","JourneyNumber":21131,"Deviations":[{"Text":"Förseningar pga framkomlighetsproblem","Consequence":"INFORMATION","ImportanceLevel":7}]},
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3743
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Mickecarlsson »

Denna kod fungerar. OBS, koden kollar bara första nivån på Deviations

Kod: Markera allt

   $bussar = json_decode($json,true);
//   var_dump($bussar);
   $antal_bussar = count($bussar["ResponseData"]["Buses"]);
   for ($i =0; $i < $antal_bussar; $i++)
   {
   	if($bussar["ResponseData"]["Buses"][$i]["LineNumber"] == "509")
   	{
   	echo "Linje: " . $bussar["ResponseData"]["Buses"][$i]["LineNumber"] . " ";
   	echo "Destination: " . $bussar["ResponseData"]["Buses"][$i]["Destination"] . " ";
   	echo "Stannar: " . $bussar["ResponseData"]["Buses"][$i]["StopAreaName"] . " ";
   	echo "Ungefär: " . $bussar["ResponseData"]["Buses"][$i]["ExpectedDateTime"] . "\n";	
      if($bussar["ResponseData"]["Buses"][$i]["Deviations"][0] != NULL) {
         echo "Avvikelse: " . $bussar["ResponseData"]["Buses"][$i]["Deviations"][0]["Text"] . "\n";
         echo "Orsak: " . $bussar["ResponseData"]["Buses"][$i]["Deviations"][0]["Consequence"] . "\n";
         echo "Nivå: " . $bussar["ResponseData"]["Buses"][$i]["Deviations"][0]["ImportanceLevel"] . "\n";
         } 
   	}
   }
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Tackar, ska testa i helgen.
Skriv svar