|
|
<?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"; }
}
|