You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
5.0 KiB
156 lines
5.0 KiB
<?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";
|
|
}
|
|
|
|
}
|
|
|