From b1b4aaa4d02ba2cf4c0bb07a95afcb0035dac3cf Mon Sep 17 00:00:00 2001 From: Aaron Parecki Date: Thu, 11 May 2017 19:19:07 -0700 Subject: add interface for checking in to flights let's give this a shot --- scripts/flights.php | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 scripts/flights.php (limited to 'scripts/flights.php') 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 @@ +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"; + } + +} + -- cgit v1.2.3