users.edu.turku.fiusers.edu.turku.fi/jkoivuka/avoindata.docx · web viewiot-pohjainen...
TRANSCRIPT
TSJL avoin data, yleistäFölin avoin dataTurun seudun joukkoliikenteen (TSJL) avoimen datan lähteet löytyvät osoitteestahttp://data.foli.fi/doc/index SIvulla on kolme tietolähdettä:
Rajapinnan kautta on pääsy kolmeen tietolähteeseen: GTFS , SIRI ja CITYBIKE
Ensimmäiset tehtävät liittyvät näihin tietolähteisiin. GTFS sisältää pysyvää tietoa ja SIRI sekä CITYBIKE ajantasaista dataa. Miten IoT liittyy näihin? Esimerkiksi paikallisliikenteen
bussissa on IoT-pohjainen järjestelmä, joka lähettää reaaliaikaista tietoa sen sijainnista. Meidän tehtävä on selvittää, miten päästään käsiksi tähän reaaliaikaiseen tietoon.
Pysyvän datan käsittely: pysäkin numeroSelvitä avointa dataa hyödyntäen, mitkä ovat Köydenpunojankadun koulun läheisyydessä olevien pysäkkien numerot. Logomon puoleinen pysäkki + Kukkulan puoleinen pysäkki. Köydenpunojankatu.
Pysäkkitiedot JSON-muodossa löytyvät osoitteesta http://data.foli.fi/gtfs/v0/20191114-135003/stops ja ensimmäinen tehtävä liittyy tähän dataan.
Yhden pysäkin tiedot
yksi.html
<!DOCTYPE html><html><body><p id="demo"></p><script>
var myJSON = '{"stop_code": "1","stop_name": "Turun satama (Silja)", "stop_lat": 60.43497, "stop_lon": 22.21966, "zone_id": "F\u00d6LI", "stop_timezone": "Europe\/Helsinki"}';var myObj = JSON.parse(myJSON);document.getElementById("demo").innerHTML = myObj.stop_code + ", " + myObj.stop_name;</script></body></html>
Kolmen pysäkin tiedotAlla on stop-tiedostosta kolme ensimmäistä pysäkkitietoa. Tässäkin data on kopioitu koodiin leikepöydän avulla. Datan tilalle voidaan kopioida kaikkien pysäkkien tiedot. kolme.html<!DOCTYPE html><html><body>
<p id="demo"></p><script>var myObj, x;myObj = { "1": { "stop_code": "1", "stop_name": "Turun satama (Silja)", "stop_lat": 60.43497, "stop_lon": 22.21966, "zone_id": "F\u00d6LI", "stop_timezone": "Europe\/Helsinki" }, "10": { "stop_code": "10", "stop_name": "Sairashuoneenpuisto", "stop_lat": 60.44419, "stop_lon": 22.25233, "zone_id": "F\u00d6LI", "stop_timezone": "Europe\/Helsinki" },
"100": { "stop_code": "100", "stop_name": "W\u00e4rtsil\u00e4npolku", "stop_lat": 60.43482, "stop_lon": 22.24424, "zone_id": "F\u00d6LI", "stop_timezone": "Europe\/Helsinki" }};
var koodi, nimi;for (x in myObj) { koodi = myObj[x].stop_code; nimi = myObj[x].stop_name; document.getElementById("demo").innerHTML += "Pysakin koodi: " + koodi; document.getElementById("demo").innerHTML += ", nimi: " + nimi + "<br>"; }</script></body></html>
Kaikkien pysäkkien tiedot tiedostostaPysäkkien tiedot (pysyvä eli staattinen data). Löytyy osoitteesta http://data.foli.fi/gtfs/v0/20191114-135003/stops muodossa jota en kirjoitushetkellä tunne. Kierrän toistaiseksi ongelman seuraavalla tavalla.1) Avaan linkin selaimeen:
2) Kopioin kuvassa näkyvän sivun sisällön stop2.json-tiedostoon omalle www-alueelleni (http://users.edu.turku.fi/jkoivuka/bussit/stop2.json)3) Kirjoitan koodin stop2.php, joka lukee JSON-muodossa olevan stop2.json-tiedoston ja printtaa sen sisällön siististi HTML:n taulukkomuodossa. Tämä versio tulostaa sivulle vain pysäkin koodin (stop_code) ja nimen (stop_name).
<html><head><meta charset="UTF-8"><style>table, th, td { border: 1px solid black;}th { text-align: left;}</style></head></html><?php@ini_set("display_errors", 1);@ini_set("error_reporting", E_ALL);$string = file_get_contents("http://users.edu.turku.fi/jkoivuka/bussit/stop2.json");$json_a=json_decode($string,true);$koko = sizeof($json_a);echo "<br>Rivien lkm: $koko <br><br>";echo "<table width=30%>";echo "<th>Numero</th><th>Nimi</th>";foreach($json_a as $obj){ echo "<tr><td>"; echo $obj['stop_code'] ; echo "</td>"; echo "<td>"; echo $obj['stop_name']; echo "</td></tr>";}echo "</table>";?>
Harjoitus edellisen pohjalta: stop3.phpTee stop3.php käyttäen edellä esitettyä stop2.php-koodia hyväksi, niin että yhdelle riville ilmestyy pysäkin koodin ja nimen lisäksi sijainnin latitude- ja longitude-arvot.Malli: http://users.edu.turku.fi/jkoivuka/bussit/stop3.php
Korona-tilasto
Avoin data json-muodossa
https://www.hs.fi/kotimaa/art-2000006433221.html
Harjoitus edellisen pohjalta: stop4.phpa) Tee stop4.php, joka listaa niiden pysäkkien tiedot, joiden nimi alkaa P-kirjaimella. Tämä onkin helppo tehtävä, sillä koodi löytyy alta. Olen lisännyt koodiin sisaltaa-funktion, joka tarkastaa löytyykö tekstistä sanaa.b) Tee stop5.html ja stop5.php. Nyt listataan ne, jotka alkavat stop5.html-lomakkeelle syötetyllä sanalla. Malli: http://users.edu.turku.fi/jkoivuka/bussit/stop5.html stop4.php
<html><head><meta charset="UTF-8"><style>table, th, td { border: 1px solid black; }th { text-align: left; }</style></head></html><?php@ini_set("display_errors", 1);@ini_set("error_reporting", E_ALL);// Lisäsin sisaltaa-funktionfunction sisaltaa($mystring, $word){ if (strncasecmp($mystring, $word, strlen($word)) == 0 ) return true; else return false; }$string = file_get_contents("http://users.edu.turku.fi/jkoivuka/bussit/stop2.json");$json_a=json_decode($string,true);echo "<table width=30%>";echo "<th>Numero</th><th>Nimi</th><th>Latitude</th><th>Longitude</th>";foreach($json_a as $obj){ if(sisaltaa($obj['stop_name'], 'P')) { echo "<tr>"; echo "<td>".$obj['stop_code']."</td>"; echo "<td>".$obj['stop_name']."</td>"; echo "<td>" . $obj['stop_lat'] . "</td>"; echo "<td>" . $obj['stop_lon'] . "</td>"; echo "</tr>"; }}echo "</table>";?>
Pysäkin 1051 dataData Juhannuskukkulan pysäkki 1051 Köydenpunojankadulla:
Saapumisajat ovat datassa result-nimisessä taulukossa. Kahden ensimmäisen bussin (taulukon indeksit 0 ja 1) linjanumerot:
<?php$string = file_get_contents("http://data.foli.fi/siri/sm/1051");$json_a = json_decode($string, true);echo $json_a['result'][0]['lineref'];
echo $json_a['result'][1]['lineref'];?>
Attribuutti lineref ja muut:
Esimerkkikoodi<html><head><meta charset="UTF-8"><style>table, th, td { border: 1px solid black;}th { text-align: left;}</style></head></html>
<?php
function esitaHMS($aika){ $h = date('H', $aika); $h = $h+2; // Kesäaika: lisää 1 (ei 2) $m = date('i', $aika); $s = date('s', $aika); echo $h . ":" . $m . ":" . $s;}
$string = file_get_contents("http://data.foli.fi/siri/sm/1051");$json_a = json_decode($string, true);echo "Pysakki 1051 <br>";$i=0;$koko = sizeof($json_a['result']);echo "<br>Taulukon koko eli saapuvia busseja: $koko <br><br>";echo "<br>";echo "<table border='1'>";echo "<th>Bussinro</th><th>PVM</th><th>Saapumisaika</th>"; while ($i<$koko){ $k = $i+1; echo "<tr>"; echo "<td>"; echo $json_a['result'][$i]['lineref']; echo "</td>"; $aika = $json_a['result'][$i]['expectedarrivaltime']; echo "<td>"; echo date("d.m.Y", $aika); echo "</td>"; echo "<td>"; esitaHMS($aika); echo "</td>"; echo "</tr>"; $i++;}echo "</table>"; ?>
Testaa: http://users.edu.turku.fi/jkoivuka/bussit/1051.php