|                                                                                                                                                        |  | <?phpchdir(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']*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";  }
}
 |