summaryrefslogtreecommitdiff
path: root/scripts/flights.php
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/flights.php')
-rw-r--r--scripts/flights.php156
1 files changed, 156 insertions, 0 deletions
diff --git a/scripts/flights.php b/scripts/flights.php
new file mode 100644
index 0000000..565732a
--- /dev/null
+++ b/scripts/flights.php
@@ -0,0 +1,156 @@
+<?php
+chdir(dirname(__FILE__).'/..');
+require 'vendor/autoload.php';
+
+$flights = ORM::for_table('flights')
+ ->where('active', 1)
+ ->find_many();
+foreach($flights as $flight) {
+
+ $user = ORM::for_table('users')
+ ->where('id', $flight->user_id)
+ ->where_not_equal('flightaware_apikey', '')
+ ->find_one();
+ if($user) {
+ echo date('Y-m-d H:i:s')."\n";
+ echo "Processing flight ".$flight->flight." for ".$user->url."\n";
+
+ $ch = curl_init('http://flightxml.flightaware.com/json/FlightXML2/InFlightInfo?ident='.$flight->flight);
+ curl_setopt($ch, CURLOPT_USERPWD, $user->flightaware_username.':'.$user->flightaware_apikey);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ $json = curl_exec($ch);
+ $data = json_decode($json, true);
+ #$data = json_decode($flight->lastposition, true);
+ $flightData = $data['InFlightInfoResult'];
+
+ $flight->lastposition = $json;
+ $flight->save();
+
+ if($flightData['departureTime']) {
+
+ if($flightData['departureTime'] < strtotime($flight->date_created)) {
+ echo "This flight departed before the checkin was made so this is probably the wrong flight\n";
+ } else {
+
+ $has_new_location = false;
+ $flight_ended = false;
+
+ // Add this point to the list
+ if($flight->positions)
+ $positions = json_decode($flight->positions, true);
+ else
+ $positions = [];
+
+ if($flightData['latitude']) {
+ $positions[] = [
+ 'date' => date('Y-m-d H:i:s'),
+ 'lat' => $flightData['latitude'],
+ 'lng' => $flightData['longitude'],
+ 'altitude' => $flightData['altitude'],
+ 'heading' => $flightData['heading'],
+ 'speed' => $flightData['groundspeed'],
+ ];
+ $flight->positions = json_encode($positions);
+
+ $has_new_location = true;
+ }
+
+ if($has_new_location) {
+ $latitude = $flightData['latitude'];
+ $longitude = $flightData['longitude'];
+ } else {
+ $latitude = $positions[count($positions)-1]['lat'];
+ $longitude = $positions[count($positions)-1]['lng'];
+ }
+
+ if($flightData['arrivalTime']) {
+ $flight->arrival_time = date('Y-m-d H:i:s', $flightData['arrivalTime']);
+ $flight->active = 0;
+ $flight_ended = true;
+ }
+
+ if($flight_ended || $has_new_location) {
+
+ $flight->departure_time = date('Y-m-d H:i:s', $flightData['departureTime']);
+ $flight->save();
+
+ $checkin = [
+ 'type' => ['h-card'],
+ 'properties' => [
+ 'name' => [$flight->flight],
+ 'url' => ['http://flightaware.com/live/flight/'.$flight->flight],
+ 'latitude' => [$latitude],
+ 'longitude' => [$longitude],
+ ]
+ ];
+
+ // Geocode the location
+ $geocode = json_decode(file_get_contents('https://atlas.p3k.io/api/geocode?latitude='.$latitude.'&longitude='.$longitude), true);
+ if($geocode) {
+ $checkin['properties']['locality'] = [$geocode['locality']];
+ $checkin['properties']['region'] = [$geocode['region']];
+ $checkin['properties']['country-name'] = [$geocode['country']];
+ $tz = new DateTimeZone($geocode['timezone']);
+ } else {
+ $tz = new DateTimeZone('UTC');
+ }
+
+ $departure = new DateTime($flight->departure_time);
+ $departure->setTimeZone($tz);
+
+ $trip = [
+ 'type' => ['h-trip'],
+ 'properties' => [
+ 'mode-of-transport' => ['plane'],
+ 'start' => [$departure->format('c')],
+ 'flight' => [$flightData['ident']],
+ 'flight-id' => [$flightData['faFlightID']],
+ 'aircraft' => [$flightData['type']],
+ 'origin' => [$flightData['origin']],
+ 'destination' => [$flightData['destination']],
+ 'speed' => [
+ [
+ 'type' => ['h-measure'],
+ 'properties' => [
+ 'num' => [$flightData['groundspeed']],
+ 'unit' => ['mph'],
+ ]
+ ]
+ ],
+ 'route' => ['http://quill.dev/flight/'.$flight->id.'/'.$flightData['faFlightID'].'/route.json']
+ ]
+ ];
+
+ if($flight->arrival_time) {
+ $arrival = new DateTime($flight->arrival_time);
+ $arrival->setTimeZone($tz);
+ $trip['properties']['end'] = [$arrival->format('c')];
+ }
+
+ // Convert this to a Micropub request
+ $micropub = [
+ 'action' => 'update',
+ 'url' => $flight->url,
+ 'replace' => [
+ 'checkin' => $checkin,
+ 'trip' => $trip,
+ ]
+ ];
+ $r = micropub_post_for_user($user, $micropub, null, true);
+ print_r($r['response']);
+
+ }
+ }
+
+ } else {
+ echo "It looks like the flight has not yet departed\n";
+ }
+
+ print_r($data);
+
+ } else {
+ echo "User ".$user->url." has no FlightAware credentials\n";
+ }
+
+}
+