realtime api fetching and storing curl.php
This commit is contained in:
parent
b90ccb2fd2
commit
8b0613c235
111
website/curl.php
111
website/curl.php
@ -3,6 +3,15 @@
|
||||
// The api key from Scooty's app/account: iPtAHWdOVLEtgkaymXoMHVVg
|
||||
// Below is the static html to generate the map, it can also be done more dynamically using https://github.com/LuminFire/leaflet-php but that might be overkill
|
||||
|
||||
//debugging, enable all error reporting
|
||||
// ini_set('display_errors', 1);
|
||||
// ini_set('display_startup_errors', 1);
|
||||
// error_reporting(E_ALL);
|
||||
//measure script execution time
|
||||
$start_time = microtime(true);
|
||||
$a=1;
|
||||
|
||||
|
||||
|
||||
// array of scooters, artist, title, description
|
||||
global $scooters;
|
||||
@ -21,26 +30,79 @@ $scooters = array(
|
||||
|
||||
// for each scooter in array get the json (TODO, for each, safe to file/database?) $scooters is a multidimensional array: $scooter[0][0] = the first data (api url) of the first scooter, $scooter[1][0] = the first data (api url) of the second scooter, $scooter[0][1] = the artist name of the first scooter etcetc.
|
||||
|
||||
$id = 0; //get the first scooter for now
|
||||
//$id = 0; //get the first scooter for now
|
||||
|
||||
|
||||
function saveLatestJSON(){
|
||||
global $scooters; //"import" the global variable into the function's scope
|
||||
|
||||
//TODO if latestData.json = older than ..2 minutes...call the API again
|
||||
$id = 0; //start id
|
||||
foreach($scooters as $item) {
|
||||
$getJSON = callAPI($scooters[$id][0]); //abstract callAPI for neater reuse
|
||||
// GET RID OF JSON DECODE!
|
||||
$arr = json_decode($getJSON, true); // decode JSON data to PHP associative array
|
||||
// access values from the associative array
|
||||
$lat = $arr["data"]["attributes"]["lat"]; // get lattitude
|
||||
$lng = $arr["data"]["attributes"]["lng"]; // get longitude
|
||||
$pos = $lat.', '.$lng; // construct lat/lon for use in leafet
|
||||
$lst = $arr["data"]["attributes"]["lastLocationUpdate"]; // get time of last position
|
||||
$rnt = $arr["data"]["attributes"]["isRentable"]; // check if scooter is rentable,
|
||||
$act = $arr["data"]["attributes"]["state"]; // check if scooter is ACTIVE or MAINTAINANCE
|
||||
// access values from the multidimensional $scooters array
|
||||
$nam = $scooters[$id][1]; // get the artist name
|
||||
$tit = $scooters[$id][2]; // get the works title
|
||||
$des = $scooters[$id][3]; // get the works description
|
||||
|
||||
//construct json with latest data
|
||||
$latestData[] = array( "ID" => $id,
|
||||
"lastPos" => $pos,
|
||||
"lastLocationUpdate" => $lst,
|
||||
"isRentable" => $rnt,
|
||||
"state" => $act,
|
||||
"name" => $nam,
|
||||
"title" => $tit,
|
||||
"desc" => $des);
|
||||
$id++;
|
||||
}
|
||||
|
||||
return $latestData; //return array
|
||||
|
||||
}
|
||||
|
||||
// THIS ONLY NEEDS TO RUN EVERY 1 or 2 minutes, possibly in the background, als this should construct historical json as per tom martins post here: https://stackoverflow.com/questions/7895335/append-data-to-a-json-file-with-php/7895384
|
||||
$arrayToEcho = saveLatestJSON();
|
||||
$latestData = json_encode($arrayToEcho, JSON_FORCE_OBJECT); // force object accepts 0 as a key for the array and not NULL
|
||||
|
||||
$file = './latestData.json';
|
||||
file_put_contents($file, $latestData, LOCK_EX);
|
||||
|
||||
|
||||
function makeMarker(int $id){
|
||||
global $scooters; //"import" the global variable into the function's scope
|
||||
$getJSON = callAPI($scooters[$id][0]); //abstract callAPI for neater reuse
|
||||
$arr = json_decode($getJSON, true); // decode JSON data to PHP associative array
|
||||
// access values from the associative array
|
||||
$lat = $arr["data"]["attributes"]["lat"]; // get lattitude
|
||||
$lng = $arr["data"]["attributes"]["lng"]; // get longitude
|
||||
$pos = $lat.', '.$lng; // construct lat/lon for use in leafet
|
||||
$lst = $arr["data"]["attributes"]["lastLocationUpdate"]; // get time of last position
|
||||
$rnt = $arr["data"]["attributes"]["isRentable"]; // check if scooter is rentable,
|
||||
$act = $arr["data"]["attributes"]["state"]; // check if scooter is ACTIVE or MAINTAINANCE
|
||||
//TODO make historical json file..
|
||||
//see: https://stackoverflow.com/questions/7895335/append-data-to-a-json-file-with-php/7895384
|
||||
//add something like:
|
||||
// $inp = file_get_contents('./latestData.json');
|
||||
// $tempArray = json_decode($inp);
|
||||
// $tempArray[] .= $latestData;
|
||||
// $jsonData = json_encode($tempArray);
|
||||
// file_put_contents('./latestData.json', $jsonData);
|
||||
|
||||
|
||||
function makeMarker(int $id){ // generate appropriate markers based on latest JSON
|
||||
|
||||
$readJSON = file_get_contents('./latestData.json'); //read latest data
|
||||
$arr = json_decode($readJSON, true);
|
||||
|
||||
$pos = $arr[$id]["lastPos"]; // get last known position
|
||||
$lst = $arr[$id]["lastLocationUpdate"]; // get time of last position
|
||||
$rnt = $arr[$id]["isRentable"]; // check if scooter is rentable,
|
||||
$act = $arr[$id]["state"]; // check if scooter is ACTIVE or MAINTAINANCE
|
||||
// access values from the multidimensional $scooters array
|
||||
$nam = $scooters[$id][1]; // get the artist name
|
||||
$tit = $scooters[$id][2]; // get the works title
|
||||
$des = $scooters[$id][3]; // get the works description
|
||||
$nam = $arr[$id]["name"]; // get the artist name
|
||||
$tit = $arr[$id]["title"]; // get the works title
|
||||
$des = $arr[$id]["desc"]; // get the works description
|
||||
|
||||
|
||||
|
||||
//check scooter status and construct marker with corresponding icon
|
||||
|
||||
@ -64,14 +126,20 @@ function makeMarker(int $id){
|
||||
};
|
||||
|
||||
return $marker;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//// make date time file------
|
||||
|
||||
|
||||
|
||||
// TODO save json to file?...mmm one big one? seperate ones, timestamped ones?
|
||||
|
||||
///..mmm one big one? seperate ones, timestamped ones?
|
||||
// 60 second update interval
|
||||
|
||||
// make timestamp file like original python one! to check for updates
|
||||
@ -100,9 +168,7 @@ function checkModified($file, $expiration){ //check if file is older than expira
|
||||
|
||||
}
|
||||
|
||||
function parseJSON(){
|
||||
|
||||
}
|
||||
|
||||
function callAPI($url){
|
||||
$curl = curl_init($url);
|
||||
@ -124,6 +190,7 @@ function callAPI($url){
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
||||
|
||||
|
||||
@ -196,6 +263,7 @@ function callAPI($url){
|
||||
$id = 0; //start id
|
||||
foreach($scooters as $item) {
|
||||
|
||||
// echo makeMarker($id);
|
||||
echo makeMarker($id);
|
||||
|
||||
$id++;
|
||||
@ -219,3 +287,10 @@ function callAPI($url){
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<?php //end of measuring script execution time
|
||||
//end clock time in seconds
|
||||
$end_time = microtime(true);
|
||||
//calculate script execution time
|
||||
$execution_time = ($end_time - $start_time);
|
||||
echo " Execution time of script = ".$execution_time." sec";
|
||||
?>
|
1
website/latestData.json
Normal file
1
website/latestData.json
Normal file
@ -0,0 +1 @@
|
||||
{"0":{"ID":0,"lastPos":"52.58619, 13.358061","lastLocationUpdate":"2020-10-09T08:00:29Z","isRentable":true,"state":"ACTIVE","name":"artist name 0","title":"title 0","desc":"desciption 0"},"1":{"ID":1,"lastPos":"52.58619, 13.358061","lastLocationUpdate":"2020-10-09T08:00:29Z","isRentable":true,"state":"ACTIVE","name":"artist name 1","title":"title 1","desc":"desciption 1"},"2":{"ID":2,"lastPos":"52.53619, 13.358061","lastLocationUpdate":"2020-10-09T08:00:29Z","isRentable":true,"state":"ACTIVE","name":"artist name 2","title":"title 2","desc":"desciption 2"}}
|
Loading…
Reference in New Issue
Block a user