在旅行日益频繁的今天,了解航班实时信息对于旅客来说至关重要。Java作为一种广泛使用的编程语言,可以用来轻松查询航班号并获取实时信息。本文将为您介绍如何使用Java实现这一功能,让您在旅途中更加轻松、便捷。
1. 获取航班信息API
首先,我们需要找到一个提供航班查询服务的API。这里我们以“FlightAware”为例,它提供了丰富的航班信息,包括航班号、起飞时间、降落时间、航班状态等。
访问FlightAware官网(https://flightaware.com/),找到API相关页面,获取API密钥。请注意,部分API服务可能需要付费。
2. 创建Java项目
在您的计算机上安装Java开发环境,如JDK、IDE(如IntelliJ IDEA、Eclipse等)。创建一个Java项目,命名为“FlightInfo”。
3. 编写Java代码
在FlightInfo项目中,创建一个名为“FlightQuery”的类。该类将包含查询航班信息的方法。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class FlightQuery {
private static final String API_KEY = "YOUR_API_KEY"; // 替换为您的API密钥
public static void main(String[] args) {
String flightNumber = "YOUR_FLIGHT_NUMBER"; // 替换为您要查询的航班号
try {
String response = getFlightInfo(flightNumber);
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getFlightInfo(String flightNumber) throws Exception {
String queryUrl = "https://flightaware.com/json/FlightXMLServer/v2/publicFlights/" + flightNumber + "?api_key=" + API_KEY;
URL url = new URL(queryUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return response.toString();
} else {
throw new Exception("Failed to retrieve flight information. Response code: " + responseCode);
}
}
}
4. 运行Java程序
在IDE中运行“FlightQuery”类,您将看到查询到的航班信息。以下是一个示例输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response>
<request>
<query>publicFlights/CA123</query>
<api_key>YOUR_API_KEY</api_key>
</request>
<meta>
<version>2.0</version>
<timestamp>2023-02-18T14:22:23Z</timestamp>
<url>https://flightaware.com/flightstatus/CA123</url>
</meta>
<flights>
<flight>
<id>435534</id>
<tail_number>N12345</tail_number>
<airline>IATA:CA,ICAO:CAE</airline>
<type>Boeing 737</type>
<origin>
<icao>IAD</icao>
<iata>IAD</iata>
<city>Washington, D.C.</city>
<country>United States</country>
</origin>
<destination>
<icao>LAX</icao>
<iata>LAX</iata>
<city>Los Angeles, CA</city>
<country>United States</country>
</destination>
<status>DEPARTED</status>
<estimated_time>2023-02-18T14:22:23Z</estimated_time>
<actual_time>2023-02-18T14:22:23Z</actual_time>
<time_UTC>2023-02-18T14:22:23Z</time_UTC>
<time_local>2023-02-18T09:22:23-05:00</time_local>
<speed>299</speed>
<true_speed>299</true_speed>
<course>237</course>
<altitude>36670</altitude>
<vertical_rate>0</vertical_rate>
<aircraft_type>Boeing 737</aircraft_type>
<aircraft_registration>N12345</aircraft_registration>
<aircraft_operator>IATA:CA,ICAO:CAE</aircraft_operator>
<flight_number>CA123</flight_number>
<flight_type>Passenger</flight_type>
<cancellation_reason></cancellation_reason>
<operational_status>ACTUAL</operational_status>
<airline_name>Continental Airlines</airline_name>
<airline_url>http://www.continental.com/</airline_url>
<airline_logo_url>http://www.continental.com/Continental%20Air%20Lines/Logo.gif</airline_logo_url>
<airline_phone>1-800-523-3825</airline_phone>
<airport_name>IAD</airport_name>
<airport_url>http://www.iad.com/</airport_name>
<airport_logo_url>http://www.iad.com/images/iad-logo.jpg</airport_logo_url>
<airport_phone>703-661-1611</airport_phone>
<arrival_airport_name>LAX</arrival_airport_name>
<arrival_airport_url>http://www.lax.com/</arrival_airport_name>
<arrival_airport_logo_url>http://www.lax.com/images/lax-logo.jpg</arrival_airport_logo_url>
<arrival_airport_phone>310-641-2300</arrival_airport_phone>
<departure_airport_name>IAD</departure_airport_name>
<departure_airport_url>http://www.iad.com/</departure_airport_name>
<departure_airport_logo_url>http://www.iad.com/images/iad-logo.jpg</departure_airport_logo_url>
<departure_airport_phone>703-661-1611</departure_airport_phone>
</flight>
</flights>
</response>
5. 解析XML数据
FlightAware返回的数据为XML格式。您可以使用Java内置的DOM或SAX解析器来解析这些数据。
以下是一个简单的示例,演示如何解析上述XML数据,获取航班号、起飞机场、降落机场等信息:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class XMLParser {
public static void parseFlightInfo(String xmlData) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new java.io.ByteArrayInputStream(xmlData.getBytes()));
NodeList flightList = document.getElementsByTagName("flight");
for (int i = 0; i < flightList.getLength(); i++) {
Element flight = (Element) flightList.item(i);
String flightNumber = flight.getElementsByTagName("flight_number").item(0).getTextContent();
String departureAirport = flight.getElementsByTagName("origin").item(0).getElementsByTagName("city").item(0).getTextContent();
String destinationAirport = flight.getElementsByTagName("destination").item(0).getElementsByTagName("city").item(0).getTextContent();
System.out.println("Flight Number: " + flightNumber);
System.out.println("Departure Airport: " + departureAirport);
System.out.println("Destination Airport: " + destinationAirport);
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
6. 使用示例
将以下代码添加到您的FlightQuery类中,即可在运行程序时解析XML数据并打印航班信息:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class FlightQuery {
// ... 其他代码 ...
public static void main(String[] args) {
// ... 其他代码 ...
try {
String xmlResponse = getFlightInfo(flightNumber);
XMLParser.parseFlightInfo(xmlResponse);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行程序后,您将看到类似以下输出的航班信息:
Flight Number: CA123
Departure Airport: Washington, D.C.
Destination Airport: Los Angeles, CA
总结
通过本文,您已经学会了如何使用Java查询航班号并获取实时信息。希望这篇文章能帮助您在旅行中更加轻松、便捷。祝您旅途愉快!
