Sida 2 av 8

Re: Arduino - Anropa hemsida

Postat: 20 mars 2018, 21:08:56
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?

Re: Arduino - Anropa hemsida

Postat: 20 mars 2018, 21:25:29
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.

Re: Arduino - Anropa hemsida

Postat: 20 mars 2018, 23:09:04
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

Re: Arduino - Anropa hemsida

Postat: 21 mars 2018, 07:46:10
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

Re: Arduino - Anropa hemsida

Postat: 21 mars 2018, 21:30:04
av GeekJoan
Jag får försöka läsa på lite.

Re: Arduino - Anropa hemsida

Postat: 22 mars 2018, 21:15:10
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";
   }
?>

Re: Arduino - Anropa hemsida

Postat: 23 mars 2018, 18:22:48
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'); ?

Re: Arduino - Anropa hemsida

Postat: 25 mars 2018, 00:23:58
av GeekJoan
Ändrade lite, But it's a live! http://geekjoan.com/multiscreen/sldata2.php

Tack så mycket Mickecarlsson! :tumupp:

Re: Arduino - Anropa hemsida

Postat: 25 mars 2018, 08:55:40
av Mickecarlsson
Vasego GeekJoan, kul att det funkar. :D :D

Re: Arduino - Anropa hemsida

Postat: 25 mars 2018, 17:56:50
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

Re: Arduino - Anropa hemsida

Postat: 25 mars 2018, 21:42:14
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";	
   	}
   }


Re: Arduino - Anropa hemsida

Postat: 25 mars 2018, 23:49:36
av GeekJoan
:tumupp:

Re: Arduino - Anropa hemsida

Postat: 5 april 2018, 13:39:53
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}]},

Re: Arduino - Anropa hemsida

Postat: 5 april 2018, 20:55:45
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";
         } 
   	}
   }

Re: Arduino - Anropa hemsida

Postat: 5 april 2018, 21:30:49
av GeekJoan
Tackar, ska testa i helgen.