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']*100*0.3048, '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' => [Config::$base_url.'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"; } }