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