diff options
Diffstat (limited to 'pollutometer-php/src')
10 files changed, 488 insertions, 0 deletions
diff --git a/pollutometer-php/src/.htaccess b/pollutometer-php/src/.htaccess new file mode 100644 index 0000000..fb1de45 --- /dev/null +++ b/pollutometer-php/src/.htaccess @@ -0,0 +1,7 @@ +<IfModule mod_authz_core.c> + Require all denied +</IfModule> +<IfModule !mod_authz_core.c> + Order deny,allow + Deny from all +</IfModule> diff --git a/pollutometer-php/src/AppBundle/AppBundle.php b/pollutometer-php/src/AppBundle/AppBundle.php new file mode 100644 index 0000000..05123b6 --- /dev/null +++ b/pollutometer-php/src/AppBundle/AppBundle.php @@ -0,0 +1,9 @@ +<?php + +namespace AppBundle; + +use Symfony\Component\HttpKernel\Bundle\Bundle; + +class AppBundle extends Bundle +{ +} diff --git a/pollutometer-php/src/AppBundle/Controller/AllDataAverageController.php b/pollutometer-php/src/AppBundle/Controller/AllDataAverageController.php new file mode 100644 index 0000000..4434d47 --- /dev/null +++ b/pollutometer-php/src/AppBundle/Controller/AllDataAverageController.php @@ -0,0 +1,66 @@ +<?php +namespace AppBundle\Controller; + +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; + + +class AllDataAverageController extends Controller +{ + /** + * @Route("/AllDataAverage", name="AllDataAverage") + */ + + public function GetAllDataAverage() + { + // Get cURL resource + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, "https://pollutometerapi.azurewebsites.net/api/Readings"); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); // Assuming you're requesting JSON + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + // Send the request & save response to $resp + $resp = curl_exec($curl); + // Close request to clear up some resources + curl_close($curl); + + $data = json_decode($resp, true); + $readings = array(); + $results = array(); + + usort($data, function($a,$b){ + return $a['TimeStamp'] - $b['TimeStamp']; + }); + + foreach($data as $index => $item) + { + $data[$index]['TimeStamp'] = gmdate('d F l', $item['TimeStamp']); + $readings[$data[$index]['TimeStamp']][] = $data[$index]; + } + + foreach ($readings as $key => $item) + { + $gasAverage = array('Co' => 0, 'No' => 0, 'So' => 0); + foreach ($readings[$key] as $index => $values) + { + $gasAverage['Co'] += $readings[$key][$index]['Co']; + $gasAverage['No'] += $readings[$key][$index]['No']; + $gasAverage['So'] += $readings[$key][$index]['So']; + + if($index === count($readings[$key]) - 1) + { + $gasAverage['Co'] /= $index + 1; + $gasAverage['No'] /= $index + 1; + $gasAverage['So'] /= $index + 1; + } + $results[$key] = $gasAverage; + } + } + + $data = json_encode($results); + + $response = new Response($data); + $response->headers->set('Content-Type', 'application/json'); + return $response; + } +}
\ No newline at end of file diff --git a/pollutometer-php/src/AppBundle/Controller/AllDataController.php b/pollutometer-php/src/AppBundle/Controller/AllDataController.php new file mode 100644 index 0000000..b45d2c9 --- /dev/null +++ b/pollutometer-php/src/AppBundle/Controller/AllDataController.php @@ -0,0 +1,43 @@ +<?php +namespace AppBundle\Controller; + +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; + + +class AllDataController extends Controller +{ + /** + * @Route("/AllData", name="AllData") + */ + + public function GetAllData() + { + // Get cURL resource + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, "https://pollutometerapi.azurewebsites.net/api/Readings"); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); // Assuming you're requesting JSON + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + // Send the request & save response to $resp + $resp = curl_exec($curl); + // Close request to clear up some resources + curl_close($curl); + + $data = json_decode($resp, true); + + + usort($data, function($a,$b){ + return $a['TimeStamp'] - $b['TimeStamp']; + }); + + foreach($data as $index => $item) + { + $data[$index]['TimeStamp'] = gmdate("l jS \of F Y h:i:s A", $item['TimeStamp']); + } + + $parametersToTwig = array("data" => $data); + + return $this->render('default/AllData.html.twig',$parametersToTwig); + + } +}
\ No newline at end of file diff --git a/pollutometer-php/src/AppBundle/Controller/HomeController.php b/pollutometer-php/src/AppBundle/Controller/HomeController.php new file mode 100644 index 0000000..d84ab76 --- /dev/null +++ b/pollutometer-php/src/AppBundle/Controller/HomeController.php @@ -0,0 +1,60 @@ +<?php +/** + * Created by PhpStorm. + * User: andy + * Date: 11/23/17 + * Time: 10:21 AM + */ + +namespace AppBundle\Controller; + +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; +use AppBundle\Utils\Aqi; + +class HomeController extends Controller +{ + /** + * @Route("/", name="homepage") + */ + + + public function numberAction(Aqi $aqi) + { + $table = array( + 'Co' => array('breakpoints' => [0, 4.4, 4.5, 9.4, 9.5, 12.4, 12.5, 15.4, 15.5, 30.4, 30.5, 40.4, 40.5, 50.4], + 'aq' => [0, 50, 51, 100, 101, 150, 151, 200, 201, 300, 301, 400, 401, 500]), + 'So' => array('breakpoints' => [0.000, 0.034, 0.035, 0.144, 0.145, 0.224, 0.225, 0.304, 0.305, 0.604, 0.605, 0.804, 0.805, 1.004], + 'aq' => [0, 50, 51, 100, 101, 150, 151, 200, 201, 300, 301, 400, 401, 500]), + 'No' => array('breakpoints' => [0,0.05,0.08,0.10,0.15,0.20,0.25 ,0.31,0.65, 1.24, 1.25, 1.64, 1.65, 2.04], + 'aq' => [0 ,50 ,51 ,100 ,101 ,150 ,151,200,201, 300, 301, 400, 401, 500]) + ); + + + $tableObj = json_decode(json_encode($table)); + + // Get cURL resource + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, "https://pollutometerapi.azurewebsites.net/api/Readings/latest"); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); // Assuming you're requesting JSON + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + // Send the request & save response to $resp + $resp = curl_exec($curl); + // Close request to clear up some resources + curl_close($curl); + + $data = json_decode($resp, true); + $data['TimeStamp'] = gmdate("l jS \of F Y h:i:s A", $data['TimeStamp']); + + $arr = []; + $CO = is_nan($aqi->calculateAQI("Co", $data['Co'], $tableObj)) ? 0 : $aqi->calculateAQI("Co", $data['Co'], $tableObj); + $SO = is_nan($aqi->calculateAQI("So", $data['So'], $tableObj)) ? 0 : $aqi->calculateAQI("So", $data['So'], $tableObj); + $NO = is_nan($aqi->calculateAQI("No", $data['No'], $tableObj)) ? 0 : $aqi->calculateAQI("No", $data['No'], $tableObj); + + array_push($arr, $CO, $SO, $NO); + $max = max($arr); + $data['Aqi'] = $max; + + return $this->render('default/index.html.twig', $data); + } +} diff --git a/pollutometer-php/src/AppBundle/Controller/LastWeekDataAverageController.php b/pollutometer-php/src/AppBundle/Controller/LastWeekDataAverageController.php new file mode 100644 index 0000000..e25b0a8 --- /dev/null +++ b/pollutometer-php/src/AppBundle/Controller/LastWeekDataAverageController.php @@ -0,0 +1,66 @@ +<?php +namespace AppBundle\Controller; + +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; + + +class LastWeekDataAverageController extends Controller +{ + /** + * @Route("/LastWeekDataAverage", name="LastWeekDataAverage") + */ + + public function GetLastWeekAverageData() + { + // Get cURL resource + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, "https://pollutometerapi.azurewebsites.net/api/Readings/lastweek"); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); // Assuming you're requesting JSON + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + // Send the request & save response to $resp + $resp = curl_exec($curl); + // Close request to clear up some resources + curl_close($curl); + + $data = json_decode($resp, true); + $readings = array(); + $results = array(); + + usort($data, function($a,$b){ + return $a['TimeStamp'] - $b['TimeStamp']; + }); + + foreach($data as $index => $item) + { + $data[$index]['TimeStamp'] = gmdate('d F l', $item['TimeStamp']); + $readings[$data[$index]['TimeStamp']][] = $data[$index]; + } + + foreach ($readings as $key => $item) + { + $gasAverage = array('Co' => 0, 'No' => 0, 'So' => 0); + foreach ($readings[$key] as $index => $values) + { + $gasAverage['Co'] += $readings[$key][$index]['Co']; + $gasAverage['No'] += $readings[$key][$index]['No']; + $gasAverage['So'] += $readings[$key][$index]['So']; + + if($index === count($readings[$key]) - 1) + { + $gasAverage['Co'] /= $index + 1; + $gasAverage['No'] /= $index + 1; + $gasAverage['So'] /= $index + 1; + } + $results[$key] = $gasAverage; + } + } + + $data = json_encode($results); + + $response = new Response($data); + $response->headers->set('Content-Type', 'application/json'); + return $response; + } +}
\ No newline at end of file diff --git a/pollutometer-php/src/AppBundle/Controller/LastWeekDataController.php b/pollutometer-php/src/AppBundle/Controller/LastWeekDataController.php new file mode 100644 index 0000000..7b5d993 --- /dev/null +++ b/pollutometer-php/src/AppBundle/Controller/LastWeekDataController.php @@ -0,0 +1,42 @@ +<?php +namespace AppBundle\Controller; + +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; + + +class LastWeekDataController extends Controller +{ + /** + * @Route("/LastWeekData", name="LastWeekData") + */ + + public function GetAllData() + { + // Get cURL resource + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, "https://pollutometerapi.azurewebsites.net/api/Readings/lastweek"); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); // Assuming you're requesting JSON + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + // Send the request & save response to $resp + $resp = curl_exec($curl); + // Close request to clear up some resources + curl_close($curl); + + $data = json_decode($resp, true); + + + usort($data, function($a,$b){ + return $a['TimeStamp'] - $b['TimeStamp']; + }); + + foreach($data as $index => $item) + { + $data[$index]['TimeStamp'] = gmdate("l jS \of F Y h:i:s A", $item['TimeStamp']); + } + + $parametersToTwig = array("data" => $data); + + return $this->render('default/LastWeekData.html.twig',$parametersToTwig); + } +}
\ No newline at end of file diff --git a/pollutometer-php/src/AppBundle/Controller/NewDataController.php b/pollutometer-php/src/AppBundle/Controller/NewDataController.php new file mode 100644 index 0000000..5dd440f --- /dev/null +++ b/pollutometer-php/src/AppBundle/Controller/NewDataController.php @@ -0,0 +1,42 @@ +<?php +/** + * Created by PhpStorm. + * User: andy + * Date: 11/23/17 + * Time: 10:21 AM + */ + +namespace AppBundle\Controller; + +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; + +class NewDataController extends Controller +{ + /** + * @Route("/latest") + */ + + public function getLatestData() + { + // Get cURL resource + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, "https://pollutometerapi.azurewebsites.net/api/Readings/latest"); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); // Assuming you're requesting JSON + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + // Send the request & save response to $resp + $resp = curl_exec($curl); + // Close request to clear up some resources + curl_close($curl); + + $data = json_decode($resp, true); + $data['TimeStamp'] = gmdate("l jS \of F Y h:i:s A", $data['TimeStamp']); + $data = json_encode($data); + + $response = new Response($data); + $response->headers->set('Content-Type', 'application/json'); + return $response; + } + +} diff --git a/pollutometer-php/src/AppBundle/Controller/TrainScheduleController.php b/pollutometer-php/src/AppBundle/Controller/TrainScheduleController.php new file mode 100644 index 0000000..a6b517d --- /dev/null +++ b/pollutometer-php/src/AppBundle/Controller/TrainScheduleController.php @@ -0,0 +1,110 @@ +<?php +/** + * Created by PhpStorm. + * User: marcin + * Date: 07/12/17 + * Time: 10:33 + */ + +namespace AppBundle\Controller; + +use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; +use Symfony\Bundle\FrameworkBundle\Controller\Controller; +use AppBundle\Utils\Aqi; + +class TrainScheduleController extends Controller +{ + /** + * @Route("/TrainSchedule") + */ + + public function GetSchedule() + { + $url = "http://xmlopen.rejseplanen.dk/bin/rest.exe/multiDepartureBoard?id1=008600617&date=" . + date("d.m.Y") . + "&time=00%3A00&useBus=0&format=json"; + + // Get cURL resource + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); // Assuming you're requesting JSON + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + // Send the request & save response to $resp + $resp = curl_exec($curl); + // Close request to clear up some resources + curl_close($curl); + + $trains = json_decode($resp, true); + $trains = $trains['MultiDepartureBoard']['Departure']; + + // Get cURL resource + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, "https://pollutometerapi.azurewebsites.net/api/Readings/lastweek"); + curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json')); // Assuming you're requesting JSON + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + // Send the request & save response to $resp + $resp = curl_exec($curl); + // Close request to clear up some resources + curl_close($curl); + + $readings = json_decode($resp, true); + + + for ($i = 0; $i < count($trains); $i++) { + $closest = 5301590400; + $time = $trains[$i]['time']; + $date = $trains[$i]['date']; + $datesplit = explode(".", $date); + $datetime = $datesplit[0] . "." . $datesplit[1] . ".20" . $datesplit[2] . " " . $time; + $trainTimeStamp = strtotime($datetime) + 3600; + + if($trainTimeStamp > time()) + { + $trains[$i]['direction'] = 0; + continue; + } + + foreach ($readings as $reading) { + if (abs($reading['TimeStamp'] - $trainTimeStamp) < abs($closest - $trainTimeStamp)) + $closest = $reading['TimeStamp']; + } + + $closestReading = $readings[0]; + foreach ($readings as $reading) + { + if($reading['TimeStamp'] == $closest) $closestReading = $reading; + } + $trains[$i]['direction'] = $this->getAqi($closestReading); + } + + $parametersToTwig = array("data" => $trains); + + return $this->render('default/TrainSchedule.html.twig', $parametersToTwig); + } + + private function getAqi(array $data) + { + $aqi = new Aqi(); + + $table = array( + 'Co' => array('breakpoints' => [0, 4.4, 4.5, 9.4, 9.5, 12.4, 12.5, 15.4, 15.5, 30.4, 30.5, 40.4, 40.5, 50.4], + 'aq' => [0, 50, 51, 100, 101, 150, 151, 200, 201, 300, 301, 400, 401, 500]), + 'So' => array('breakpoints' => [0.000, 0.034, 0.035, 0.144, 0.145, 0.224, 0.225, 0.304, 0.305, 0.604, 0.605, 0.804, 0.805, 1.004], + 'aq' => [0, 50, 51, 100, 101, 150, 151, 200, 201, 300, 301, 400, 401, 500]), + 'No' => array('breakpoints' => [0,0.05,0.08,0.10,0.15,0.20,0.25 ,0.31,0.65, 1.24, 1.25, 1.64, 1.65, 2.04], + 'aq' => [0 ,50 ,51 ,100 ,101 ,150 ,151,200,201, 300, 301, 400, 401, 500]) + ); + + $tableObj = json_decode(json_encode($table)); + + $arr = []; + $CO = is_nan($aqi->calculateAQI("Co", $data['Co'], $tableObj)) ? 0 : $aqi->calculateAQI("Co", $data['Co'], $tableObj); + $SO = is_nan($aqi->calculateAQI("So", $data['So'], $tableObj)) ? 0 : $aqi->calculateAQI("So", $data['So'], $tableObj); + $NO = is_nan($aqi->calculateAQI("No", $data['No'], $tableObj)) ? 0 : $aqi->calculateAQI("No", $data['No'], $tableObj); + + array_push($arr, $CO, $SO, $NO); + $max = max($arr); + + return $max; + } +}
\ No newline at end of file diff --git a/pollutometer-php/src/AppBundle/Utils/Aqi.php b/pollutometer-php/src/AppBundle/Utils/Aqi.php new file mode 100644 index 0000000..1b324a8 --- /dev/null +++ b/pollutometer-php/src/AppBundle/Utils/Aqi.php @@ -0,0 +1,43 @@ +<?php +/** + * Created by PhpStorm. + * User: andy + * Date: 11/30/17 + * Time: 11:27 AM + * + * + */ + +Namespace AppBundle\Utils; + +class Aqi { + public function calculateAQI($gasName, $concentration, $table) { + $bpLow = 1; + $bpHi = 2; + $bpLowIndex = 1; + $bpHiIndex = 1; + + $arr = $table ->{$gasName} ->{'breakpoints'}; + foreach ($arr as $index => $value) { + if ($value <= $concentration && $table->{$gasName}->{'breakpoints'}[$index + 1] >= $concentration) { + $bpLow = $value; + $bpLowIndex = $index; + } + + if ($value >= $concentration && $table->{$gasName}->{'breakpoints'}[$index - 1] <= $concentration) { + $bpHi = $value; + $bpHiIndex = $index; + } + + }; + + + + $airQualityIndex = (($table->{$gasName}->{'aq'}[$bpHiIndex] - $table->{$gasName}->{'aq'}[$bpLowIndex]) / ($bpHi - $bpLow)) * ($concentration - $bpLow) + $table->{$gasName}->{'aq'}[$bpLowIndex]; + + return $airQualityIndex; + + } +} + +?>
\ No newline at end of file |